• [技术干货] 【学习赛2021-硬盘异常检测】【总结分享】衍生变量与统计特征
    华为网络AI学习赛2021-硬盘异常检测华为网络AI学习赛2021-硬盘异常检测 衍生变量举个列子,高中物理中提到的公式 Vt = V0 + at(末速度 = 初速度 + 加速度*时间)序号V0at120210根据上表给出的数据,可以新增一列 Vt,计算公式是 Vt = V0 + at20 + 2*10 = 40序号V0atVt12021040数据集新增了Vt后,再去训练模型,看看是不是模型的预测精度会有些许提升呢? 添加衍生变量的应用应用在本次比赛中的话,知识背景(来自【赛题数据描述】)smart_x_raw:代表编号为x的smart指标从硬盘上采集到的数据的原始值。smart_x_normalized:代表编号为x的smart指标从raw值经过厂商内部处理后归一化的值slaine前辈用了smart_x_raw和smart_x_normalized,做了除法操作。结果bingo!推荐尝试! 统计特征平均值最大值最小值方差标准差偏度峰值最大值 - 平均值最大值 - 最小值平均值 - 最小值等等...... 添加统计特征的应用应用在本次比赛中的话(代码仅做参考):# 按序号分组,再求统计特征 tdgmax = train_data.groupby("serial_number").max() # 更改列名 tdgmax.rename(columns=lambda x:x+"_max", inplace=True) # 重置索引,为了下步的合并做准备 tdgmax.reset_index(inplace=True) tdgmax# 合并 train_data_new = pd.merge(train_data,tdgm)添加了许多有意义的统计特征后,再去训练模型,看看预测精度是否会提升呢? 学习资源和参考资料#网络约AI,有你更精彩#网络人工智能黑客松大赛二等奖方案分享一等奖方案分享【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及ppt网络AI学习赛2021.硬盘异常检测,赛题解读 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【总结分享】 Dataflow转DataFrame(pandas)与生成新的数据实例
    华为网络AI学习赛2021-硬盘异常检测华为网络AI学习赛2021-硬盘异常检测 Dataflow转DataFrame(pandas)与生成新的数据实例# 加载数据 dataset = 'DatasetService' #@param {"type":"string","label":"数据集","required":true,"asyncConfig":{"type":"dataset"},"hyperParamType":"inDataset"} dataset_entity = 'learning_training_data' #@param {"type":"string","label":"数据集实例","required":true,"asyncConfig":{"type":"data","params":{"dataset":{"key":"dataset"}}},"hyperParamType":"inData"} data_file_list = None #@param {"type":"raw","label":"数据文件列表","asyncConfig":{"type":"datafiles","params":{"dataset":{"key":"dataset"},"data":{"key":"dataset_entity"}}},"helpTip":"选择文件列表后,只读取列表中的文件并合并。各文件的列名需要完全相同。","advanced":true} data_file_type = None #@param {"type":"string","label":"数据文件格式","options":[{"text":"","value":"\\None"},{"text":"csv","value":"csv"},{"text":"其他","value":"other"}],"show":{"key":"data_file_list"},"helpTip":"选择CSV表示结构化数据,可调用to_pandas_dataframe方法转化为pandas的dataframe","advanced":true} attrs = {'is_time_series': False, 'time_column': None, 'time_format': None, 'id_column': None, "do_analysis": False} datareference = data_reference.get_data_reference(dataset, dataset_entity, file_list=data_file_list, file_type=data_file_type, attrs=attrs) #@global {"variableType":"datareference","label":"数据引用变量名","attrs":{"dataset":{"key":"dataset"},"dataset_entity":{"key":"dataset_entity"},"attrs":{"key":"attrs"}},"helpTip":"当存在多个数据引用时,可重命名数据引用对象的变量名以避免冲突","required":true,"advanced":true} dataflow = data_flow.create_data_flow(data_reference=datareference) #@global {"variableType":"dataflow","label":"操作流变量名","attrs":{"data_reference":{"variableType":"datareference"}},"helpTip":"当存在多个数据操作流时,可重命名操作流对象的变量名以避免冲突","required":true,"advanced":true} dataflow.show_head()type(dataflow) naie_cloud.feature_processing.data_flow.Dataflow# dataflow 转 pandas_dataframe train_data_df=dataflow.to_pandas_dataframe()type(train_data_df) pandas.core.frame.DataFrame# 对数据集进行修改,删除指定列标签的列。并更新原始数据 train_data_df.drop(['date_g'],axis=1,inplace=True)# pandas_dataframe 转 dataflow from naie.feature_processing import data_flow data_flow_new = data_flow.create_dataflow_from_df(train_data_df)type(data_flow_new) naie_cloud.feature_processing.data_flow.Dataflow# 生成数据实例 # dataset 和 dataset_entity 的命名要见名知意。能区分开另外两个比赛 #@param {"id":"create-dataset"} create_dataset_kwargs = { "dataset": "DiskDataSet", "dataset_entity": "Disk_20210226_1114" } current_dataflow = data_flow_new #@param {"id":"global.flow"} current_dataflow.write_as_dataset(**create_dataset_kwargs)加载数据,查看处理后的数据集#@param {"id":"data-references"} data_reference_kwargs = [ { "dataset": "DiskDataSet", "dataset_entity": "Disk_20210226_1114", "file_list": [ "data.csv" ], "file_type": "csv", "encoding": "utf-8", "enable_local_cache": False } ] data_references = [data_reference.get_data_reference(**kwargs) for kwargs in data_reference_kwargs] #@global {"id":"global.export_data_references"} display(data_references) dataflows = [data_flow.create_data_flow(data_reference=datareference) for datareference in data_references] dataflow = dataflows[0] 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及ppt 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【总结分享】特征工程 Filter(1) 唯一值 华为网络AI学习赛2021-硬盘异常检测
    华为网络AI学习赛2021-硬盘异常检测华为网络AI学习赛2021-硬盘异常检测 特征工程 Filter 唯一值# 此处省略导包和加载数据部分的代码 # dataflow -> pandas_dataframe train_data=dataflow.to_pandas_dataframe()# 查看每列中有多少中数值 # nunique(axis=0, dropna=True) -> pandas.core.series.Series method of pandas.core.frame.DataFrame instance # Count distinct observations over requested axis. # # Return Series with number of distinct observations. Can ignore NaN values. # https://blog.csdn.net/feizxiang3/article/details/93380525 train_data_nunique_dropnaTrue=train_data.nunique()# 算上NaN train_data_nunique_dropnaFalse = train_data.nunique(dropna=False)type(train_data.nunique()) pandas.core.series.Seriesi = 1 # 根据相同的index,查看 有无NaN的差异 # train_data_nunique_dropnaTrue.index 109列的列名 for index in train_data_nunique_dropnaTrue.index: print(i,str(index).ljust(30),train_data_nunique_dropnaTrue[index],train_data_nunique_dropnaFalse[index]) i = i+1# 挑选出 train_data_nunique.values 中是0的索引 # https://junchu.blog.csdn.net/article/details/88791935 index_list_dT = train_data_nunique_dropnaTrue[train_data_nunique_dropnaTrue.values == 0].index.tolist() print("list\n",index_list_dT) print("len\n",index_list_dT.__len__()) # 有56个特殊列index_list_dF = train_data_nunique_dropnaFalse[train_data_nunique_dropnaFalse.values == 1].index.tolist() print("list\n",index_list_dF) print("len\n",index_list_dF.__len__()) # 有58个特殊列,多了 model 和 capacity_bytes# 将两个List取并集 # https://www.cnblogs.com/kwzblog/p/14101262.html index_list = list(set(index_list_dF).union(set(index_list_dT))) print(index_list) print(index_list.__len__())# 删除index_list的列 # 删除的是 单值列 和 全NaN train_data_df.drop(index_list,axis=1,inplace=True)# 查看删除结果 train_data# 再次使用 nunique train_data_nunique_dropnaTrue = train_data.nunique(dropna=True) train_data_nunique_dropnaFalse = train_data.nunique(dropna=False)# 检查结果 i = 1 for index in train_data_nunique_dropnaTrue.index: print(i,str(index).ljust(30),train_data_nunique_dropnaTrue[index],train_data_nunique_dropnaFalse[index]) i = i+1注意,上图的输出结果中类似于 smart_XXX 1 2,是要多关注的。 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及ppt网络AI学习赛2021.硬盘异常检测,赛题解读 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【总结分享】特征工程 Filter(2) 方差 华为网络AI学习赛2021-硬盘异常检测
    华为网络AI学习赛2021-硬盘异常检测华为网络AI学习赛2021-硬盘异常检测 特征工程 Filter(2) 方差# 省略加载数据 # 省略转为 pandas_dataframe # 省略train_data_nunique_dropnaTrue=train_data.nunique() # 使用 describe查看每列的统计信息 # 有一些列很特殊的,其中一列如下图所示 i = 1 for col_name in train_data_nunique_dropnaTrue.index: print(i," ",col_name,"\n",train_data[col_name].describe(),"\n","------","\n") i = i+1# "date_g","serial_number" 不算标准差 # 查看其他列的标准差 # std=0 表示数据基本无波动 # 设置阈值 temp_std < 0.01 std_index_list = [] for col_name in train_data_nunique_dropnaTrue.index: if col_name not in ["date_g","serial_number"]: temp_std = train_data[col_name].std() if temp_std < 0.01: std_index_list.append(col_name) print(col_name,temp_std)# 查看列名和数量 print(std_index_list) print(len(std_index_list))# 删除std_index_list的列 # 删除的是 标准差过小,也就是数据波动太小的列 train_data.drop(std_index_list,axis=1,inplace=True)# 查看数据 train_data 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及ppt网络AI学习赛2021.硬盘异常检测,赛题解读 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【总结分享】特征工程 Filter(3) 相关系数 华为网络AI学习赛2021-硬盘异常检测
    华为网络AI学习赛2021-硬盘异常检测华为网络AI学习赛2021-硬盘异常检测 特征工程 Filter(3) 相关系数# 计算相关系数 train_data_df_corr = train_data.corr()import matplotlib.pyplot as plt import seaborn as sns# 设置大小 plt.subplots(figsize=(20, 20)) # 热力图 # annot=True 显示数值 sns.heatmap(train_data_df_corr.round(2),annot=True)# print(train_data_df_corr.index) # print(train_data_df_corr.columns) i = 1 # 输出相关系数大于0.95的行列索引值 # index = col , 相关系数为1 for index in train_data_df_corr.index: for col in train_data_df_corr.columns: corr_val = train_data_df_corr.loc[index,col] # 对称矩阵的处理 if index == col: break if (corr_val> 0.99) and index != col: print(i,"-",index,"-",col,"-",corr_val) i = i+1查阅比赛资料,补充知识 https://competition.huaweicloud.com/information/1000041370/circumstance# 经过个人的选取,是一次尝试,并非最完美的方案。 corr_index_col = ["smart_194_normalized","smart_194_raw","smart_198_normalized","smart_198_raw","smart_240_raw"] # 删除 corr_index_col 的列 # 相关系数过大的话,保留一列就好了 train_data_df.drop(corr_index_col,axis=1,inplace=True)# 查看数据 train_data# 设置大小 plt.subplots(figsize=(20, 20)) # 热力图 # annot=True 显示数值 # train_data.corr().round(2) 保留两位小数 sns.heatmap(train_data.corr().round(2),annot=True) # 这会再看的话,就会发现除了对角线外,就没有1了 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及ppt网络AI学习赛2021.硬盘异常检测,赛题解读 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【分享总结】Pandas 查看训练数据集的基本信息 华为网络AI学习赛2021-硬盘异常检测
    华为网络AI学习赛2021-硬盘异常检测 pandas 查看训练数据集的基本信息import os os.chdir("/home/ma-user/work/disk") import pandas as pd from naie.datasets import get_data_reference dr_train = get_data_reference("DatasetService", "learning_training_data", file_type='csv') train_data = dr_train.to_pandas_dataframe()# 查看前6行数据 train_data.head(n=6)# 查看训练数据集的大小 train_data.shape (558636, 109)# 查看训练数据集的行标签 train_data.index.values array([ 0, 1, 2, ..., 558633, 558634, 558635])# 查看训练数据集的列标签 # 转成list的话,可以使用 train_data.columns.values.tolist() train_data.columns.values array(['date_g', 'serial_number', 'model', 'capacity_bytes', 'failure', 'smart_1_normalized', 'smart_1_raw', 'smart_2_normalized', 'smart_2_raw', 'smart_3_normalized', 'smart_3_raw', 'smart_4_normalized', 'smart_4_raw', 'smart_5_normalized', 'smart_5_raw', 'smart_7_normalized', 'smart_7_raw', 'smart_8_normalized', 'smart_8_raw', 'smart_9_normalized', 'smart_9_raw', 'smart_10_normalized', 'smart_10_raw', 'smart_11_normalized', 'smart_11_raw', 'smart_12_normalized', 'smart_12_raw', 'smart_13_normalized', 'smart_13_raw', 'smart_15_normalized', 'smart_15_raw', 'smart_22_normalized', 'smart_22_raw', 'smart_23_normalized', 'smart_23_raw', 'smart_24_normalized', 'smart_24_raw', 'smart_177_normalized', 'smart_177_raw', 'smart_179_normalized', 'smart_179_raw', 'smart_181_normalized', 'smart_181_raw', 'smart_182_normalized', 'smart_182_raw', 'smart_183_normalized', 'smart_183_raw', 'smart_184_normalized', 'smart_184_raw', 'smart_187_normalized', 'smart_187_raw', 'smart_188_normalized', 'smart_188_raw', 'smart_189_normalized', 'smart_189_raw', 'smart_190_normalized', 'smart_190_raw', 'smart_191_normalized', 'smart_191_raw', 'smart_192_normalized', 'smart_192_raw', 'smart_193_normalized', 'smart_193_raw', 'smart_194_normalized', 'smart_194_raw', 'smart_195_normalized', 'smart_195_raw', 'smart_196_normalized', 'smart_196_raw', 'smart_197_normalized', 'smart_197_raw', 'smart_198_normalized', 'smart_198_raw', 'smart_199_normalized', 'smart_199_raw', 'smart_200_normalized', 'smart_200_raw', 'smart_201_normalized', 'smart_201_raw', 'smart_220_normalized', 'smart_220_raw', 'smart_222_normalized', 'smart_222_raw', 'smart_223_normalized', 'smart_223_raw', 'smart_224_normalized', 'smart_224_raw', 'smart_225_normalized', 'smart_225_raw', 'smart_226_normalized', 'smart_226_raw', 'smart_235_normalized', 'smart_235_raw', 'smart_240_normalized', 'smart_240_raw', 'smart_241_normalized', 'smart_241_raw', 'smart_242_normalized', 'smart_242_raw', 'smart_250_normalized', 'smart_250_raw', 'smart_251_normalized', 'smart_251_raw', 'smart_252_normalized', 'smart_252_raw', 'smart_254_normalized', 'smart_254_raw', 'smart_255_normalized', 'smart_255_raw'], dtype=object)# 摘要信息 train_data.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 558636 entries, 0 to 558635 Columns: 109 entries, date_g to smart_255_raw dtypes: float64(104), int64(2), object(3) memory usage: 464.6+ MB# 描述统计信息(boxplot中提到的数值) train_data.describe() 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码https://blog.csdn.net/qq_40981268/article/details/86566068https://www.itdiandi.net/view/1800https://blog.csdn.net/qq_37975685/article/details/107953941 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 【学习赛2021-硬盘异常检测】【分享总结】Pandas 查看训练数据集中正负样本比例 华为网络AI学习赛2021-硬盘异常检测
    华为网络AI学习赛2021-硬盘异常检测 Pandas 查看训练数据集中正负样本比例import os os.chdir("/home/ma-user/work/disk") import pandas as pd from naie.datasets import get_data_reference dr_train = get_data_reference("DatasetService", "learning_training_data", file_type='csv') train_data = dr_train.to_pandas_dataframe()# 查看列的信息 train_data['failure'] 0 0 1 0 2 0 3 0 4 0 .. 558631 0 558632 0 558633 0 558634 0 558635 0 Name: failure, Length: 558636, dtype: int64# crosstab # rosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name:str='All', dropna:bool=True, normalize=False) -> 'DataFrame' # Compute a simple cross tabulation of two (or more) factors. By default # computes a frequency table of the factors unless an array of values and an # aggregation function are passed. pd.crosstab(train_data.failure,"count")type(pd.crosstab(train_data.failure,"count")) pandas.core.frame.DataFrame# 饼图 # 显示的小数位数 autopct='%.3f%%' pd.crosstab(train_data.failure,"count").plot(kind="pie",subplots=True,autopct='%.3f%%')# 柱状图 pd.crosstab(train_data.failure,"count").plot(kind="bar")有些学习数据集的正负样本比例是平衡的,在实际中不平衡的会多一些。 学习资源和参考资料【2021学习赛---硬盘异常检测】2月23号直播ppt【学习赛2021--硬盘异常检测】样例代码【学习赛2021--KPI异常检测】优秀选手usstroot直播baseline代码及pptMatplotlib简单画图(四) -- pandas绘图之DataFrame 其他学习赛推荐华为网络AI学习赛2021-KPI异常检测华为网络AI学习赛2021-日志异常检测 备注感谢老师的教学与课件欢迎各位同学一起来交流比赛心得^_^比赛配备了较为丰富的学习资料,有助于新手平稳入门,推荐参赛
  • [技术干货] 知识+AI融合新突破,华为云论文被人工智能顶刊IEEE TPAMI接收
    近日,人工智能领域国际顶级学术刊物IEEE Transactions on Pattern Analysis and Machine Intelligence(即IEEE TPAMI,影响因子17.861)接收了华为云员工博士论文期间的研究成果。近日,人工智能领域国际顶级学术刊物IEEE Transactions on Pattern Analysis and Machine Intelligence(即IEEE TPAMI,影响因子17.861)接收了华为云员工博士论文期间的研究成果——论文“What is a Tabby? Interpretable Model Decisions by Learning Attribute-based Classification Criteria”。华为云已进一步联合中国科学院计算技术研究所将该成果应用于华为云EI故障检测平台,并支撑铁路、电网等客户的实际故障检测业务,未来计划应用于华为云一站式AI开发平台ModelArts训练服务,向模型中引入人工先验知识,提升模型精度;并计划应用于ModelArts推理服务,帮助定位当前模型存在的问题,确定后续进一步优化的思路。受益于深度学习技术的突破,图像分类、物体检测等传统计算机视觉任务的精度也得到了大幅度的提升,但是由于深度学习模型的复杂性,目前关于深度学习的理论并不完善。可解释的深度学习模型,以及深度学习模型与人工先验的结合是当前学术界重点研究的前沿方向,对于提升深度学习模型的可靠性和泛化能力具有重要的意义。方法框架示意图通过利用物体类别之间存在的层级关系约束,自动学习从数据中抽取识别不同类别的规则,该论文同时在这两个方向上迈出了坚实的一步:在可解释深度学习模型方面,相比于现有方法,不仅能够给出图像中的关键区域,还能给出规则化的解释,对使用者更友好,更符合人对于解释结果的期望;在引入人工先验知识方面,走通了一条基本可行的技术路线。为了更好地赋能产业升级,华为云持续深耕AI基础研究和落地应用。2020年以来,华为云人工智能研究团队已在图像分类、弱标注场景下的图像分类、图像检测,多模态数据处理、语音语义等领域取得多项世界第一,研究成果多次被顶级期刊及学术会议接受。未来,华为云将持续把AI前沿算法产品化,并开放给各行业的AI开发者使用,通过技术创新驱动产业智能升级。
  • [技术干货] 蒙特卡洛树搜索在黑盒优化和神经网络结构搜索中的应用
    布朗大学在读博士王林楠在本文中介绍了他与 Facebook 田渊栋团队合作,在 2020 年 NeurIPS 取得亮眼表现的新算法,以及其在神经网络结构搜索中的应用。现实世界的大多数系统是没有办法给出一个确切的函数定义,比如机器学习模型中的调参,大规模数据中心的冷藏策略等问题。这类问题统统被定义为黑盒优化。黑盒优化是在没办法求解梯度的情况下,通过观察输入和输出,去猜测优化变量的最优解。在过去的几十年发展中,遗传算法和贝叶斯优化一直是黑盒优化最热门的方法。不同于主流算法,本文介绍一个基于蒙特卡洛树搜索(MCTS)的全新黑盒优化算法,隐动作集蒙特卡洛树搜索 (LA-MCTS)。LA-MCTS 发表在 2020 年的 NeurIPS,仅仅在文章公开几个月后,就被来自俄罗斯 JetBrains 和韩国的 KAIST 的队伍独立复现,并用来参加 2020 年 NeurIPS 的黑盒优化挑战,分别取得了第三名和第八名的好成绩 [10][11]。论文链接:https://arxiv.org/pdf/2007.00708.pdfGithub 地址:https://github.com/facebookresearch/LaMCTS黑盒优化的回顾 黑盒优化是一个已经发展了几十年的领域了,在跟很多人交流我们工作的时候,我被问到最多的问题就是,我们算法和遗传算法以及贝叶斯优化有什么优势?为了更好的理解这个问题,首先让我们来看看遗传算法和贝叶斯优化是如何工作的。 遗传算法:遗传算法有很多变种,但是大体上是这图上这 3 类。  1) Evolution: 首先是用一个固定的 multi-variate gaussian 来建模下一步从哪儿去采样(如上图的 Evolution)。在当下的 iteration 撒一堆点,然后找出这堆点当下最优的解,然后把这个 multi-variate gaussian 的均值重新放到这个最优解。由于不变,所以下一个 iteration 做采样的时候那个 region 的样子也不变。 这里我们给出了一个优化 2 维 Rastrigin 的例子。Rastrigin 函数如下图, 下图呈现了 Evolution 算法的优化过程。由于 σ 不变,每次采样出来的蓝色的点的分布在每个 iteration 都是差不多的。并且当下 iteration 中,采样分布所用的 μ,是上一个 iteration 中采样出来的最好的点,即图中红色的点。2) Genetic: 这个核心思想就是抽取一个 pool 来追踪当下样本中的 top 10%(可以设置的超参变量),然后在这个 pool 里进行变异。同样下图可视化了该算法在 2 维 Rastrigin 的优化过程。图中绿色的点就是当下 top samples,在下一个 iteration 中的蓝色 samples 都是由上一个 iteration 中的绿色的 samples 变异而来。 3)CMA-ES: 和 Evolution 相比,它不光变 μ,而且同时变 σ 。其核心思想是同样追踪当下 top samples,然后用 top samples 来更新 μ 和 σ,而不是像 evolution 里只把 μ 改到了当下最优的 sample 上。所以这里的采样区间会动态的变化,特别是 top samples 分布比较分散的话,采样区间就会很大。当 top samples 收敛到一个最优解附近时候,采样空间就自动减小了,因为 top samples 之间的 variance 小了。 同样我们可视化了 CMA-ES 在优化二维 Rastrigin 函数的过程。一开始采样区域迅速增大,那是因为 top samples (图中紫色的点) 的分布越来越散,导致用来采样的 gaussian 的 σ 增大,所以采样区域不过往最优解附近靠近(通过更新 μ ), 而且采样空间也迅速增大。但是到了后期采样,由于紫色的点慢慢靠拢,所以 σ 减小,同时也导致采样空间缩小。遗传算法的问题:由此可以看出,遗传算法并不是特别适合 NAS,因为他每个 iteration 需要撒很多的神经网络来更新采样分布。然而来评估一个神经是非常耗时的,无论是重头训练一遍,还是用 supernet。 贝叶斯优化:同样贝叶斯优化有很多变种,但是大体上算法可以归为下来几步。 1) Surrogate Model: 这一步利用一个函数拟合器,根据当下现有的采样,来 fit 一个黑盒函数。 2) Acquisition Function: 这一步就是贝叶斯优化的探索(exploration)和利用 (exploitation) 机制。他利用 Surrogate Model 和当下采样的分布,来选择下一个采样的位置。 同样是优化二维的 Rastrigin 函数,贝叶斯优化的采样效率会比遗传算法好很多,如下图。图中的每一个点都对应的一个采样,红色的点代表最优解。因为贝叶斯优化里利用了一个 Surrogate Model 去猜那里比较好,所以采样效率会高很多。 贝叶斯优化的问题:但是在高纬问题中,贝叶斯优化会过度的探索边界,导致大量的样本被浪费[8][9]。为了理解这个问题,我们来看下面优化一个一维函数的例子。左图中的 x 是从 iteration 1-> iteration3 的采样,右图是 acquisition function,最高的地方即是采样点。可以看出前几个 iteration 基本在探索那些附近没有样本的区域。 因为我们这里看到的只是一维问题,当问题纬度扩展到 20d+,这个时候贝叶斯优化一开始就需要非常多的点来探索搜索空间。这也就是为什么很多人会观测到,在高纬度问题中,贝叶斯优化在少量样本下,会跟随机搜索差不多。 而这些一开始作为探索的样本,一般都会落在搜索空间的边界。至于为什么会是边界,这个跟欧几里得空间有关。简单来说,一个立方体,靠近边界部分的体积会远大与内核部分的体积。以此类推,在一个 n 维立方体里,大部分的搜索空间都在边界,所以探索一开始会探索边界。 Latent Action Monte Carlo Tree Search(LA-MCTS) 为了解决贝叶斯优化在高维空间过渡探索的问题,我们的解决方案是,去学习切割搜索空间。这里的核心动机如下图。当我们切分搜索空间后,把原问题划分为更小的子问题,然后用贝叶斯优化来解。虽然在子问题也会出现过度探索,但是这个时候的样本落点和原问题的样本落点很不一样,如下图。所以划分子空间后,可以从某种程度上减轻过度探索的问题。 LA-MCTS 的核心思想就是,我们希望学习一些边界去划分搜索空间。这些边界还能够自动去适应函数值的变化。当我们在划分出来的好的空间去采样的时候,出来的样本也期望是好的,同理在坏的空间,采样出来的样本也相对较差。 上图是我们算法的一个大体框架。在每一个树的节点上,我们想学到一个边界,根据当下的采样点(既 x 和 f(x)),能够把搜索空间分为一个好的子空间(左节点),和一个坏的子空间(右节点),如上图。而这里的隐动作集 (Latent Action) 就是,从当下节点选择去左 / 右孩子。至于动作的选择,在每个节点是根据 UCT 公式来决定。因为每个节点对应一个搜索空间,这个搜索空间上有相应的样本。每个孩子上对应搜索空间的样本的个数就是 UCT 里的 n,而这些样本性能的平均值就是 UCT 里的 v。当我们对搜索空间建立这样的一个搜索树,随着树深度的增加,在搜索空间找到好的区域也越来越精确。 根据上述的定义,Latent Action 是把一个空间分成一个好的子空间,和一个坏的子空间。假设在任何一个节点上,我们首先学习一个 regressor 来把当下节点上的样本分为好样本和坏样本,然后我们通过 SVM 来学习出一个边界来把当下节点的搜索空间分为两个部分,一个好的搜索空间和一个坏的搜索空间。因为处在 regressor 上的样本 f(x)更高,所以分出来的空间是好空间。然后这两个子空间被两个子节点所代表,并且相应子空间上的样本也去相对应的节点。这就构成了我们整个树模型的最基本的单元。 有了这个最基本的模型,下来介绍下算法的 3 个基本步骤。 1)Learning and split: 在每个 iteration 开始,因为上个 iteration 有新的样本,我们需要重新构建一个树来分割搜索空间。同样,一开始的 root 节点包含所有的样本,同时并代表了整个搜索空间。我们这样递归的利用 latent action 来把一个节点分成两个节点,直到树上的叶子结点内,包含不超过 20(超参可以调)个样本。所以树的样子完全由样本决定的。下图描述了这个过程。 2) Select: 从树的根开始,我们计算出每个节点的 UCB 数值。访问次数就是当下 node 里有多少 samples,均值就是当下 node 里样本的均值,即 f(x)的均值。然后我们从跟节点到叶子,一直选 UCB 最大的。这个过程如下图。 3)Sampling: 根据我们选出来的一条路径,这个路径上的 SVM 就包裹出了一个子搜索空间,如下图的。然后,我们只在这个子空间上进行贝叶斯优化即可。最后我们很快的来看一下 LA-MCTS 应用在贝叶斯优化的效果。更多的数据,请参考我们的文章。 其实早在 2011 年,Rémi Munos (DeepMind) 提出利用 MCTS 来分割搜索空间用来优化一个黑盒函数 [4],然后,剑桥大学和 MIT,有很多工作把这种切分搜索空间的思想用在了高维贝叶斯优化 [5][6]。但是这些工作一般都会采用一个 k-ary 区块切分(如下图)。2020 年,MIT 的 Beomjoon Kim 在[7] 展示出利用沃罗诺伊图(Voronoi Graph)去切分搜索空间,结果会更好。我们的工作,LA-MCTS,则是利用了 learning 的法则,根据当下样本来学习分割方法,来提高搜索效率。 LA-MCTS 的一些有待改善的地方:目前我们观测到 UCB 中的 exploration 变量 c 对结果影响比较大,毕竟 Cp=0 的时候 LA-MCTS 就变成了一个 random 算法,而 Cp=1 的时候,就是一个纯 greedy 的算法了。目前我们发现大多数把 Cp = 0.1*max f(x) 工作的比较好,这里的 max f(x) 是猜测出来的函数最大值。当然在实际使用中,可以在 search space 先大概跑一跑,看什么样的 Cp 下降的比较快。如果大家在使用 LA-MCTS 感觉效果不太好,很可能是这里出了问题。 其次,SVM 在有些时候不是很稳定,比如 kernel type 的选择。还有,目前我们采样还是基于 sampling 的方法,未来可以考虑通过 LBFGS 来解一个 constrained optimization 问题,这里的 constrains 是 SVM 的边界。总而言之,未来还有很多需要解决的问题。 LA-MCTS 在 NeurIPS-2020 黑盒优化挑战的表现 当然文章里的数据是漂亮啦,但是要其他人复现出来同样说好那才好。在今年 NeurIPS-2020 中,Facebook, Twitter, SigOPT, 第四范式等活跃在黑盒优化领域内的公司,发起了一个黑盒优化挑战赛,试图去寻找当下最优的黑盒优化器。该挑战利用各个参赛团队提交的优化器,去解决 216 个不同领域的黑盒优化问题。当然,每个优化器在不同的问题上也是跑了很多次去取平均,来保证比赛的公正。更多这个比赛的详情,大家可以参照这里 https://bbochallenge.com/virtualroom。 下图是这次比赛的 leaderboard。 总结一下,LA-MCTS 在这次比赛分别被第三名的 JetBrains 和第八名的 KAIST 团队独立复现我们的算法(因为当时还没有放出源代码),并参加这次比赛。值得一提的是,第一名和第二名的队伍均采用 ensemble 不同 solver 的方法(比如不同的 acquisition),而第三名只使用一种 solver。所以我个人认为未来探索 ensemble 和 learning search space partition 会是一个比较有意思的问题。最后,我个人很喜欢的一个黑盒优化算法 TuRBO,在前十名队伍中,被六个队伍所广泛采用。 更值得一提的是,在 NAS 方面发表出的很多 search 算法,比如用神经网络或者图神经网络做 predictor,或者 RL,SGD (finite difference 类),并没有在这次比赛中表现出非常优秀的成绩。 把 LA-MCTS 应用在神经网络结构搜索(NAS) 我们同时也把 LA-MCTS 应用在神经网络结构搜索给 CIFAR-10,ImageNet,Detection 等。下面是我们搜索出来的网络的结果。 我们在 NAS 探索的一个简介 1. 起源:应用蒙特卡洛树搜索在神经网络结构搜索。 2017 年初,我的导师从美国国防高级研究计划局的 D3M 项目拿到了一笔项目资金,开启了我们的 AutoML 研究。而我被分配的子任务,就是神经网络结构搜索 (NAS)。当时 NAS 研究的 2 篇文章,都是利用强化学习(谷歌的 policy gradients 和 MIT 的 Q-learning)。我们发现 Q-learning 的 epsilon greedy 非常简单的同等对待了所有的状态(states),并不考虑每个 states 过去探索了多少次,所以并不能很好的去平衡利用(exploitation) 和探索 (exploration)。从这点出发,我们考虑对每个状态去建模,来更好的平衡利用和探索,来提高搜索效率。而蒙特卡洛树搜索(MCTS) 正是对每一个状态建模,利用 UCT 来动态的平衡利用和探索。同时,AlphaGo 的成功证实 MCTS 在大规模状态空间下效果非常好。在这样的背景下,我们开发第一个基于 MCTS 的 NAS 算法,并命名为 AlphaX。 AlphaX 构建网络和 MIT 的 Q-learning 算法相似。从一个空网络开始,根据动作集,比如添加一个 conv 或者 pooling,逐层构建一个网络架构(s→a→s’)。因为训练一个网络非常慢,AlphaX 提出利用一个价值函数预测器(value function predictor)来预测当下状态下的子网络们的性能。这个价值函数器输入就是一个网络架构,输出就是预测的该网络的精度。同时我们验证了,NAS 能够提升很多下游的视觉应用,比如风格迁移,目标检测等。详情请见[1]。 2. 学习蒙特卡洛树里的动作集,从 LaNAS 到 LA-MCTS。 基于 AlphaX,我 FB 的导师田渊栋洞察到动作集在 AlphaX 对搜索效率有着显著的影响。为了证实这个想法,我们设计了动作集 sequential 和 global。动作集 sequential 就是按照逐层构建网络的思路,一步步的增加 conv 或者 pooling,并指定每层的参数;而动作集 global 则首先划定网络的深度,比如 10 层网络。然后同时给这 10 层网络指定每层的种类,参数等。我们发现动作集 global 的搜索效率显著高于动作集 sequential,并且可视化了状态空间,如下图。 直观上而言,状态空间在 global 的动作集下,好的状态(深色)和差的状态(浅色)区分的很好,不像 sequential 混杂在一起。这样搜索算法可以很快找到一个好的区域,所以效率更高。基于这个观察,促使我们去给 MCTS 学习动作集,并提出了 Latent Action Monte Carlo Tree Search (LA-MCTS)。 我们最初把这个想法应用在了 NAS,并构建了一个 NAS 系统命名为 LaNAS[2]。对比贝叶斯优化和进化算法,LaNAS 在 NAS 的基准数据集 NASBench-101 上取得了显著的提升。所以我们又扩展了 LaNAS 成为了 LA-MCTS 去做应用更广的黑盒优化。从 LaNAS 到 LA-MCTS,核心更新有:1)LA-MCTS 把 LaNAS 里的边界扩展成一个非线性边界,2)LA-MCTS 在采样的时候利用贝叶斯优化来选择样本。最后,LA-MCTS 在各种测试函数和 MuJoCo 上取得了显著的提升,详见[3]。 搜索是否对 NAS 重要 我认为是重要的。以下是我观测到的一些趋势及我的思考。 1)最近有些文章展示随机搜索都可以达到很好的结果,那么是不是意味着搜索不重要了?  首先这些文章是说随机搜索得到的结果还不错,是一个非常强的对比基准。这个往往因为目前的搜索空间的设计,导致大部分网络结果都很好,比如下图所呈现的 NASBench-101 中 42 万个网络的分布(横轴是精度,纵轴是这个精度下有多少网络 log scale)。所以找出一个工作还不错的网络并不难。 2) 既然搜索空间的设计影响很大,那么是不是更应该把注意力放在设计搜索空间,而不是搜索? 我觉得这个问题应该站在不同的角度。首先,近几年神经网络的高速发展让我们在设计搜索空间的时候有了很多先验经验,所以设计出来的搜索域里的网络都不会太差。在一些传统的视觉应用,搜索的贡献可能就不如加各种 tricks 或者调参数在工程中来的更实际一些。但是如果当我们遇到一个新的任务,比如设计一个神经网络去调度网络节点。由于先验经验很少,这个时候搜索就可以极大的加速我们设计网络的速度。并且搜索可以提供很多的经验去让我们改进搜索空间。 3)基于搜索方法的 NAS 和 DARTS 类算法的对比。 以 DARTS 为代表的 one-shot NAS 方法跑的很快,是因为利用了一个超级网络 (Supernet) 去近似每个网络的性能。在这个过程中,Supernet 相当提供一个网络性能的预测,然后利用 SGD 在 Supernet 上去找一个比较好的结果。这里 Supernet 和 Search 也是可以分开,而且分开后更易分别提高这两个部分。所以只需要把 Supernet 的概念应用在传统搜索方法上,也是可以很快得到结果。SGD 的问题是很容易卡在一个局部最优,而且目前 SoTA 的结果基本都是利用传统搜索方法直接,或者利用一个 supernet 搜索出来的。 Github 地址:https://github.com/facebookresearch/LaMCTS 下面是这个开源项目一览: Neural Architecture Search,全网最全的神经网络结构搜索 pipeline。开源 LaNAS on NASBench101:无需训练网络,在你笔记本上快速评估 LaNAS。开源 LaNAS 搜索出的模型「LaNet」:在 CIFAR-10 和 ImageNet 上都取得 SoTA 结果。开源 one-shot/few-shots LaNAS:只需几个 GPU,快速并且高效完成神经网络结构搜索。含搜索,训练,整套 pipeline。分布式 LaNAS:让我们用上百个 GPU 来超过最先进的模型。整套 pipeline。Bag of tricks 模型训练的那些黑科技:我们列出当下训练模型的一些提升点数黑招数。Black-box optimizations,黑盒优化1 分钟的对比:只需 1 分钟,评测 LA-MCTS,和贝叶斯优化及进化算法。MuJoCo Tasks:应用 LA-MCTS 在机器人,强化学习,并可视化你学出来的策略。作者介绍 王林楠是布朗大学第四年博士生,他的研究方向为人工智能和超级计算。他的目标就是让人工智能全民化,能够让任何人,任何公司只需要点击几次鼠标就能设计,部署一个可行的人工智能系统。为了实现这个目标,他一直致力于建立一个基于蒙特卡洛树搜索的人工智能,来设计不同的人工智能给大众。通过四年的努力,他们已经围绕蒙特卡洛树搜索建立了一个完整的神经网络结构搜索系统去实现这个目标。 田渊栋博士,脸书(Facebook)人工智能研究院研究员及经理,研究方向为深度强化学习,多智能体学习,及其在游戏中的应用,和深度学习模型的理论分析。围棋开源项目 DarkForest 及 ELF OpenGo 项目中研究及工程负责人和第一作者。2013-2014 年在 Google 无人驾驶团队任软件工程师。2005 年及 08 年于上海交通大学获本硕学位,2013 年于美国卡耐基梅隆大学机器人研究所获博士学位。曾获得 2013 年国际计算机视觉大会(ICCV)马尔奖提名(Marr Prize Honorable Mentions)。 [1] Neural Architecture Search using Deep Neural Networks and Monte Carlo Tree Search, AAAI-2020. [2] Sample-Efficient Neural Architecture Search by Learning Action Space, 2019 [3] Learning Search Space Partition for Black-box Optimization using Monte Carlo Tree Search, NeurIPS 2020. [4] Optimistic optimization of a deterministic function without the knowledge of its smoothness, NeurIPS 2011. [5] Batched Large-scale Bayesian Optimization in High-dimensional Spaces, AISTATS 2018. [6] Heteroscedastic Treed Bayesian Optimisation, 2014. [7] Monte Carlo Tree Search in continuous spaces using Voronoi optimistic optimization with regret bounds, AAAI-2020. [8] Bock: Bayesian optimization with cylindrical kernels [9] Correcting boundary over-exploration deficiencies in Bayesian optimization with virtual derivative sign observations [10] Solving Black-Box Optimization Challenge via Learning Search Space Partition for Local Bayesian Optimization [11] Adaptive Local Bayesian Optimization Over Multiple Discrete Variables
  • [技术干货] Demo分享 | 当自动驾驶遇到ModelArts,ModelArts AI Gallery与HiLens Kit开发
    作者:历天一【摘要】 基于HiLens Kit已经基本开发完成,可部署到HiLens Kit,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,可通过ModelArts AI Gallery与HiLens Kit全流程端云协同开发部署。先来看看最终视频效果吧(PS:请忽略背景音乐)!                                                                 主体流程介绍:(可选,忽略亦可,取决于摄像头质量,对于相机畸变较大的需要先计算相机的畸变矩阵和失真系数,对图片进行校正)图片校正;截取感兴趣区域,仅对包含车道线信息的图像区域进行处理;对感兴趣区域使用透视变换;针对不同颜色的车道线,不同光照条件下的车道线,不同清晰度的车道线,根据不同的颜色空间使用不同的梯度阈值,颜色阈值进行不同的处理。并将每一种处理方式进行融合,得到车道线的二进制图;提取二进制图中属于车道线的像素;对二进制图片的像素进行直方图统计,统计左右两侧的峰值点作为左右车道线的起始点坐标进行曲线拟合;使用二次多项式分别拟合左右车道线的像素点(对于噪声较大的像素点,可以进行滤波处理,或者使用随机采样一致性算法进行曲线拟合);计算车道曲率及车辆相对车道中央的偏离位置;效果显示(可行域显示,曲率和位置显示)。检测驾驶过程中道路中其他车辆状态,显示车辆类别、置信度,并通过YOLOv3进行检测车辆,然后返回的车辆检测框的坐标与当前坐标进行透视变换获取大约的距离作为车辆之间的距离dis。说明:本Demo的主体框架基于HiLens Kit已经基本开发完成,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,所以计算量较大,导致整体速度较慢。关于部署和训练——基于ModelArts 和HiLens Kit的端云协同:考虑到部署,已经测试过部署到HiLens Kit了,对了,也支持在HiLens Stuido运行模拟测试,更推荐在HiLens Studio哦,比较方便,而且不需要硬件支持,只需要在HiLens Kit或HiLens Studio上安装pillow库就行了,关于如何在HiLens Kit和HiLens Studio上安装第三方库,非常简单的哦,可参考:在HiLens Kit上:https://bbs.huaweicloud.com/forum/thread-94316-1-1.html在HiLens Studio上:https://bbs.huaweicloud.com/forum/thread-94317-1-1.html如果想训练或优化,由没有硬件(比如GPU),那么很推荐使用ModelArts了,一站式开发,无缝衔接到HiLens Kit哦,关于ModelArts的介绍可参考:https://www.huaweicloud.com/product/modelarts.html同时也许还能提升下运行速度,这里介绍三种算法,亲测都可以部署到HiLens Kit推理使用哦,就在最新的AI Gallery(原AI市场)中哦,这里除了有算法,还有模型、数据集等等,很丰富,大家可以自己探索一下,同时还可以分享自己的算法给其他开发者,开发者订阅即可创建训练使用,很方便,相比于GitHub,不仅提供了源代码,还提供了用于训练的硬件资源,强大的Tesla V100 32GB版本哦。                                              (1)YOLOv3_Darknet53,没错,就是著名的YOLOv3,经典的目标检测网络,后续又推出了YOLOv4、YOLOv5(暂称此名吧),AI Gallery也推出了YOLOv5的,不过由于PyTorch框架暂不支持模         型转换,所以暂时放弃了。       关于YOLOv3_Darknet53的使用方法,算法界面介绍很详细,这里就不赘述了,可以参考使用,注意模型转换部分请参考这篇博文中模型转换部分哦:https://bbs.huaweicloud.com/blogs/199870       算法备用链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=2d52a07e-ccbd-420f-8999-2ea7b4bdd691     (2)YOLOv3_Resnet18(GPU),如果我们只想做车辆的检测或者为了简化模型,提高速度,可以选用主干网络为Resnet18的YOLOv3,网络更轻量,速度会快一些哦。       同样给上链接:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=948196c8-3e7a-4729-850b-069101d6e95c     (3)YOLOv3_Resnet18(Ascend 910),和上面(2)版本差异不大,主要改为由GPU换为Ascend 910训练的,大家可自由选择哦。       链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=7087008a-7eec-4977-8b66-3a7703e9fd22好了,算法部分解决了,数据怎么办呢?ModelArts的AI Gallery同样想到了,提供了数据集哦,免费订阅,下载到自己的OBS导入就能用了(注意OBS需要一定花费),这里我也提供了开源数据集的5164张人车图片,供大家使用哦,上链接:https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=a337272b-6918-4282-83d6-2b15e2a4c716那么数据集和算法都有了,该训练了吧,在ModelArts上可以很好完成,凭借强大的Tesla V100 32GB或Ascend 910可以很快完成哦。上述整体操作流程部分可参考下述博文完成:https://bbs.huaweicloud.com/blogs/199870运行效果:完成执行如视频中所示处理的一帧需要约300ms,也就是FPS约为3,不较慢,需要优化。我觉得还有很大优化空间,比如:(1)预处理和后处理很费时间,真正推理很快,可以从这方面加速,不知道开启多线程是否有提升,应该有吧;(2)应该可以更好发挥专用硬件,记得好像有DVPP和AIPP吧,可以用来做色域转换的操作;  (3)  YOLOv3的后处理解析比较麻烦,这里用的是COCO的80类,但可以只用person、car两类,或者再加一点,同时nms也比较费时间,如果能用算子实现,融合到om模型中,会提速很多;(4)这里使用的是Python,如果用C++应该会提升一些,执行效率会高很多吧。(5)优化提速要根据硬件性能,对费时的部分做分析,以最大压榨硬件性能,需要做针对性、定制化地优化,我个人理解很浅,希望有熟悉的同学指教。备注:本Demo所用模型、代码均来自开源代码,好像是吴恩达老师的一个课程涉及的项目,但找不到出处了,如果知道的同学,还请在在下方回复指教,谢谢了。本Demo的模型精度以及运行速度不做保证,仅供学习交流使用。其他未尽事宜,还请多多指教。代码会开源的,敬请期待哦,谢谢。来源:华为云社区 https://bbs.huaweicloud.com/blogs/226039
  • [技术干货] 华盛顿大学《生成模型》2020秋季课程完结,课件、讲义全部放出
    这门课聚焦生成建模技术的理论和数学基础,探讨多种生成模型技术。在概率统计理论中,生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。它能够给观测值和标注数据序列指定一个联合概率分布。在机器学习中,生成模型可用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。 生成模型是最近较为活跃的研究领域,从事机器学习研究的人有必要了解这一研究主题。去年秋季,华盛顿大学开设了一门主题为「生成模型」的课程 CSE 599,探讨了多种生成模型相关技术。课程地址:https://courses.cs.washington.edu/courses/cse599i/20au/这门课与当前的生成模型研究紧密相关,并提供了阅读该领域近期进展相关论文所需的背景知识。课程聚焦生成建模技术的理论和数学基础,学生在开始本课程前最好了解机器学习领域的基础概念。该课程于 2020 年 9 月 30 日开始,12 月 7 日结课。目前已放出课程讲义和 slide,每节课还提供额外的补充阅读材料。CSE 599 课程表部分截图。课程主题这门课程涉及以下主题:自回归模型NADE 框架RNN/LSTM 和 Transformer变分自编码器(VAE)高斯 VAEConvNet 与 ResNet后验崩溃离散式 VAE生成对抗网络f-GANWasserstein GANGenerative Sinkhorn Modeling生成流自回归流可逆网络神经常微分方程基于能量的模型Stein 方法与评分匹配郎格文动力学与扩散 具备类似主题的课程还有斯坦福大学开设的 CS236(深度生成模型)课程和加州大学伯克利分校的 CS294-158(深度无监督学习)课程。感兴趣的读者可以多了解这两门课。讲师简介课程主讲人 John Thickstun 本科毕业于布朗大学应用数学专业,目前在华盛顿大学计算机科学与工程系攻读博士学位。目前的研究兴趣包括生成模型、采样、时序,及其在音乐领域的应用,多篇论文发表在 EMNLP、ICML、ISMIR、ICLR 等学术会议上。个人主页:http://homes.cs.washington.edu/~thickstn/本文分享:https://www.jiqizhixin.com/articles/2021-01-29
  • [技术干货] AI顶会连发7篇论文,华为云实现人工智能多领域新突破
    全球人工智能领域的顶级学术会议AAAI 2021将于2月2日-9日在线上召开。论文录用结果显示,华为云的7篇AI科研成果被收录。华为云被接收的研究涉及联邦学习、深度学习、机器学习、自然语言处理、迁移学习、知识计算等技术领域,充分展现了华为云在人工智能领域的基础研究实力。技术创新和应用落地是这些论文的亮点,相关技术目前已在油气勘探、药物研发、AI 开发、智能交通等业务场景下规模化落地,加速行业智能升级。  AAAI 每年评审并收录来自全球最顶尖的人工智能领域学术论文,代表全球 AI 技术的趋势和未来。以下是华为云此次入选 7 篇论文介绍:论文一:业界首创自分组个性化联邦学习框架,并已落地华为云 ModelArts论文标题:《非独立同分布下的自分组个性化联邦学习》(Personalized Cross-Silo Federated Learning on Non-IID Data) 论文地址:https://arxiv.org/abs/2007.03797联邦学习机制以其独有的隐私保护机制受到很多拥有高质数据的大客户青睐。但是,各大客户的数据分布非常不一致,对模型的需求也不尽相同,这些在很大程度上制约了传统联邦学习方法的性能和应用范围。华为云自研 FedAMP 联邦学习框架使用独特的自适应分组学习机制(如图一)让拥有相似数据分布的客户进行更多合作,并对每个客户的模型进行个性化定制,从而有效处理普遍存在的数据分布不一致问题,并大幅度提高联邦学习性能。通过与中国科学院上海药物所在 AI 药物联邦学习上的合作,FedAMP 优质的性能获得了蒋华良院士的高度认可,并在中国医药创新与投资大会上吸引了众多医疗制药厂商洽谈合作。                                              图 1 FedAMP 联邦学习框架论文二: 首次提出利用物理信息深度学习的框架将二阶交通理论模型融合到神经网络中,以高效解决交通态的估值的问题:(Physics-Informed Deep Learning for Traffic State Estimation: A Hybrid Paradigm Informed By Second-Order Traffic Models)交通态的估值需要解决如何使用稀疏的传感器(如传感线圈,浮动车)数据将整条道路的交通态(如速度,流量,密度)完整地估计出来。这对算法的数据效率有着非常高的要求,而传统的纯交通模型和纯机器学习的解决方案的效果均不理想。针对这些问题,本论文提出了基于物理信息深度学习框架,通过对激励函数和连接权重的特殊设计,将复杂的二阶交通模型编码到神经网络中去(图二 - a),让神经网络在高阶交通理论的约束下进行训练。具体方法是,使用传统神经网络进行交通态的估值,然后将估值进一步输入到物理信息神经网络中去,计算出该估值的理论余量来量化偏移交通理论的程度。这个理论余量为估值网络的训练提供了重要的正则化信息,大大提高了估值模型的训练效率和估值精度。如图(图二 - b)所示,本方法可以基于很少的观测数据获得更高的估值准确度。本文是华为员工在哥伦比亚大学深造期间完成的工作。(a) (b) 图 2 编码了二阶交通理论模型的物理信息神经网络与交通态估值结果论文三:使用图卷积网络拟合权值共享神经结构搜索的搜索空间,提升神经结构搜索鲁棒性。(Fitting the Search Space of Weight-sharing NAS with Graph Convolutional Networks)论文地址:https://arxiv.org/pdf/2004.08423.pdf权值共享的神经结构搜索通过训练一个包含所有分支的超网络来复用不同操作上的计算量,以子网络采样的方式评估网络结构,大幅度提高了搜索速度。然而,这种子网络采样的方式并不能保证子网络的评估性能准确反映其真实属性。本文认为产生这一现象的原因是使用共享权值构建子网络的过程中产生了权值失配,使得评估性能中混入了一个随机噪声项。本论文提出使用一个图卷积网络来拟合采样子网络的评估性能,从而将这个随机噪声的影响降至最低。实验结果表明,使用本方案后,子网络的拟合性能与真实性能间的排序相关性得到有效提高,最终搜索得到的网络结构性能也更加优异。此外,本方案通过图卷积网络拟合了整个搜索空间中子网络的评估性能,因此可以很方便地选取符合不同硬件约束的网络结构。                                                           图 3 总体框架示意图论文四:首次提出基于多轮阅读理解的框架解决实体链接问题实体链接是将文本中提到的实体链接到知识库中对应实体的任务,目的是解决实体存在的歧义性问题,但由于名称的变化和实体的模糊性,此任务十分具有挑战性,尤其是短文本的实体链接,由于句子长度短,在链接过程中,每个待消歧的实体能利用的上下文信息非常有限。针对这个任务,本论文提出了一个多项选择阅读理解的框架,为句子中每个待消歧的实体分别生成一个问题,并将知识库中的候选实体转换成候选答案集,通过这样一个设计,实体链接转换为了一个阅读理解的问题(图 1 Local 部分)。在选择正确答案的过程中,待消歧实体的上下文信息与知识库中的候选实体之间获得了充分的交互,同时多个候选实体间的区别也得到了潜在地考虑。为了进一步捕捉句子内待消歧实体间的主题一致性来提高链接的准确率,本文采用了多轮阅读理解的方式以序列去处理多个待消歧的实体(图 1 Global 部分),为句子内多个实体的消歧提供了更丰富的信息。另外,为了解决短文本中常见的不可链接问题(即知识库中没有对应的实体),本文额外设计了一个两阶段的验证机制来判断实体是否可被链接。本论文提出的方法在多个中英文数据集上均取得了目前最优的实体链接效果。                                                 图 4 基于多轮阅读理解的实体链接框架论文五:首次提出基于多尺度地质知识迁移的跨区块油气储集层分类算法,利用迁移学习提升跨区块油气储集层分类效果。(Cross-Oilfield Reservoir Classification via Multi-Scale Sensor Knowledge Transfer)油气储集层分类是油气勘探中的一个关键步骤(如图一所示),自动准确的油气储集层分类方法不仅可以降低油气行业专家的工作负担,也可以帮助油气勘探公司做出最优的开采决策。当前已有的油气储集层分类主要关注在单一区块上的分类效果,但是在新区块上应用效果却不尽如人意。因此,如何迁移地层特征从而实现跨区块也能准确分类是一个富有挑战的任务。本论文首次提出了一种多尺度传感器抽取方法从多元测井记录中抽取地质特征的多尺度表示,然后设计了一种 encoder-decoder 模块来充分利用目标和源区块的特有特征,最后通过一个知识迁移模块来学习特征不变性表示,从而将地质知识从源区块迁移到目标区块。真实油气数据上的实验结果表明本论文精心设计的迁移学习方法,可以提升分类模型在新区块上的分类表现,相较于基线算法可以有 %6.1 的效果提升。                                                      图 5 油气勘探工作流论文六:首次提供基于超几何分布的概率模型,用于解决远程监督命名实体识别中的去噪问题。(Denoising Distantly Supervised Named Entity Recognition via a Hypergeometric Probabilistic Model)远程监督是一种常见的机器学习范式,可以降低对标注数据的依赖。但是远程监督往往会引入噪声,从而影响学习效果。对于基于远程监督的命名实体识别(NER)来说,如何有效去噪就是一个十分重要的问题。以往的去噪方法主要基于实例层次的统计结果,往往忽略了不同数据集不同实体类型之间噪声分布的差异性,从而导致这些方法何难适用于高噪声比例的设定。本论文提出了一种基于超几何分布的学习方法,同时考虑噪声分布和实例层次的置信度。具体而言,我们将每个训练 batch 里面噪声样本的数量建模成一个由噪声比例决定的超几何分布,这样一来每个实例都可以通过上一轮训练获得的置信度来决定是噪声还是正确样本。实验结果表明本论文提出的方法可以有效去除远程监督范式引入的噪声,显著提升 NER 的效果。                                                该工作由华为云团队与中科院软件所合作完成。论文七:提出基于对抗学习与相似性增强的域泛化训练新框架,在域泛化行人再识别领域创下新纪录 (Dual Distribution Alignment Network for Generalizable Person Re-Identification)域泛化是一种适用于现实应用场景的机器学习范式,对于行人再识别问题,域泛化是指在大规模多源数据上进行模型训练,期望模型在任意未知的场景中都能够直接适用。现实应用中,大规模训练数据往往难以收集,域泛化方法正是一个使得模型能够低成本快速部署的优秀方案。以往的方法对域间的巨大差异缺乏有效的处理手段,同时忽略了域间样本可能的相似性信息。在数据域层面,本论文提出了新的对抗学习方法,通过减少中心域与外围域的差异,实现了域间差异的有效消除;在样本层面,本论文通过增强来自不同域的相似样本之间的相似性,进一步对齐来自不同域的样本特征分布。在这两个方面的共同作用下,本论文的双重分布对齐网络实现了新的性能突破。实验表明,所提方法在公共测试基准数据集上取得了当前最好的结果。该工作由华为云团队与厦门大学合作完成。                                       图 7 针对域泛化行人再识别问题的双重分布对齐网络示意图为了更好地赋能产业升级,华为云持续深耕 AI 基础研究和落地应用,打造更懂世界的 AI。2020 年以来,华为云 EI 研究团队已在图像分类、弱标注场景下的图像分类、图像检测,多模态数据处理、语音语义等领域取得多项世界第一。未来,华为云将持续把 AI 前沿算法产品化,并开放给各行业的 AI 开发者使用,通过技术创新驱动产业智能升级。
  • [赛事资讯] 2021量子计算黑客松大赛决赛于上海大学落幕
    2021年07月15日 10:56   来源:中新网中新网上海新闻5月17日电 (董昭 许婧)15日至16日,由上海大学主办,华为技术有限公司、南方科技大学协办,2021量子计算黑客松决赛在上海大学理学院量子人工智能科学技术研究中心落幕。  本此大赛历时三个月多月,吸引了来自北京大学、清华大学、中科大、复旦大学、上海交通大学、中山大学、上海大学等全国各地的本科生、研究生293人报名。78个团队积极参与本次比赛,共同创新,推动量子计算的技术研究。  量子科技的发展具有重大科学意义和战略价值,是一项对传统技术体系产生冲击、进行重构的重大颠覆性技术创新,将引领新一轮科技革命和产业变革。其中,量子计算被认为是未来具有颠覆性影响的新型计算模式之一。为了体现前沿性和交叉性,本次参赛题目涉及量子计算、量子化学、机器学习等学科交叉。选手们触发思想火花,突破挑战,拓展思维的边界。最终经过层层选拔有来自国内各大高校的7支队伍脱颖而出,冲进决赛。  比赛期间,来自清华大学、中科院计算所、北京大学、复旦大学、华为等评委及选手们齐聚上海大学理学院量子人工智能科学技术中心。经过综合笔试和答辩两个环节的激烈角逐,来自中山大学的参赛选手最终摘得桂冠,获得了第一名。比赛产生了二等奖二名,三等奖三名,优秀奖一名。  期间,选手们还饶有兴致地参观了上海大学溯园和钱伟长图书馆,追忆老上大的峥嵘岁月,涵养新时代新青年的奋斗精神。  在这次黑客松大赛决赛中,不仅有各个队伍精彩的角逐,编程高手的对决,还有企业量子对话以及名师学者交流。5月15日下午,来自本源量子软件产品中心总经理吴伟,上海大学理学院量子人工智能科学技术研究中心主任以及来自华为技术有限公司徐旭升为大家带来精彩报告。他们讲述了国内本源量子在硬件、软件的最新发展以及实际应用,世界量子计算的新思想,以及华为最新量子机器学习的进展。16日下午,评委清华大学,香港中文大学以及北京大学评委就基于测量的端对端量子机器学习、量子测量极限与混合张良网络量子模拟进行了精彩的前沿学术报告。除了现场的上大师生,上千名师生通过寇享平台参与了上述活动。  本届量子计算黑客松大赛是上海大学与华为的第二次合作,赛事得到了多方支持和关注,规模比上届更大,赛题比上届更难,吸引了全国广大量子爱好者关注,诸多兄弟院校派员参与并观摩。量子计算黑客松大赛的举办对于实现校企联动,推动交叉创新的量子人才培养具有积极作用,有助于形成涉及学术研究、人才培养、科学普及和科技产业化的良好量子科技生态圈。  上海大学理学院早在2018年积极开发“量子世界”通选课,成为“育才大工科”系列中的一门,跨学科的团队引领学生享受思维的乐趣。学校将依托学校“五朵金花”之“量子科技”发展战略进一步推进量子计算与人工智能的基础与应用研究,并在量子计算、量子调控、量子模拟和量子材料等方面继续做好创新的前沿工作。(完)注:请在转载文章内容时务必注明出处!
  • [赛事资讯] 以生物医药为引擎,AI大赛能否促产业振兴开新局?
    六月,端午节和618一起掀起了一波消费小高潮。在节日的盛况背后,离不开人工智能产业的扶持。比如,AI客服将海量业务与咨询问题进行匹配,并自动回复;AI智能测温仪,探测精度高、范围广,能够减少人工遗漏,提高疫情防控效率。可见,人工智能产业的发展已经逐步走向成熟,整个技术领域发展前景广阔。艾媒咨询预测,2021年全球人工智能市场收入规模或将达到12140亿美元。当人工智能成为各行各业数字化转型的“加速引擎”后,关于底层算法创新的需求也随之增加。想要解决这个问题,AI大赛似乎是一个不错的解题思路。大赛将来自产学研各界相关专业人士齐聚一堂,共同见证新一轮AI与大数据人才的激烈角逐。那么在推动人工智能产业的全面发展的过程中,AI大赛究竟扮演着怎样的角色?响铃借着最近风头正盛的“华为云杯”人工智能应用创新大赛,来尝试回答这个关键问题。角色一:“斗兽场”,一场技术流派的“巅峰对决”很多时候,大家都把比赛说成竞技场,而在响铃看来,国内一些顶尖的AI大赛可以说是“斗兽场”了。在这里,开发者们就像古罗马战士,以技术与应用为矛,展开一场场“巅峰对决”,这个过程中,赛事主办方可以提供各种后方支援,帮助开发者实现三个层面的能力提升:让武器更锋利:开发者能获得宝贵的机会,与来自全国各地的强大对手较量,并在交锋中让彼此的“武器”变得更加“锋利”。“强者”之间总是惺惺相惜的,通过大赛,往往能够搭建出一个技术交流、人才培养、机遇共创的开发者平台,汇聚各类技术人才,迸发创新思想。比如在第一届“华为云杯”人工智能应用创新大赛中,我们能看到一些十分前沿的AI场景创新,例如研发脑起搏器的苏州景昱医疗器械有限公司就借助华为云AI辅助测评系统,成功实现了起搏器的远程调试功能,让诊断过程不再依赖医生的主观判断,诊断时间也由40分钟缩短至1分钟。这项全球首创的成果不仅令企业跑出创新“加速度”,也给该领域的技术发展以示范和借鉴。让“技巧”更丰盈:权威专家助阵评审,既给予开发者含金量极高的指导,也使得AI大赛的可看性更强。由于AI大赛对技术的要求较高,所以评委、嘉宾们往往也是“重量级”的,比如布道师、专家甚至是院士等行业“大牛”。在本届“华为云杯”人工智能应用创新大赛中,就邀请了华为行业专家、投融资嘉宾、科研院所等作为评审嘉宾。其中创客赛道的赛题更是与中国科学院上海药物研究所有着深度合作。作为中国历史最悠久的综合性创新药物研究机构,中国科学院上海药物研究所不仅可以为参赛选手提供专业点评与指导,而且其在恶性肿瘤、心脑血管系统疾病、神经精神系统疾病、代谢性疾病、自身免疫性疾病及感染性疾病等方面的成就,也能助力创客赛道的参赛选手开展创新药物基础和应用基础研究,发展药物研究新理论、新方法和新技术。让竞逐的“基础动能”更充足:某些AI赛事还为开发者们提供了宝贵的技术支持。以“华为云杯”2021人工智能应用创新大赛为例,大赛组委会为参赛选手提供一定量的华为云EI资源券,以支撑大赛期间的资源费用。除此之外,主办方还将提供ModelArts开发平台用以完成模型的训练、部署并测试以及模型的提交。由于ModelArts无需任何AI技术和代码开发功能,自动生成AI模型满足业务需求的特点,对于开发者而言极为友好,这也是其被国际权威研究机构国际数据公司(IDC)评为机器学习公有云服务中国市场份额第一位的重要原因。再者,从竞赛公平性上来看,在ModelArts 3.0下,用户可以各自利用本地数据训练,不交换数据本身,只用加密方式交换更新的模型参数,实现云边协同训练。即保障竞赛优胜模型质量的同时,还兼顾模型效率和数据安全,维护竞赛公平性并推动竞赛成果落地转化。若将“华为云杯”2021人工智能应用创新大赛当作一场“斗兽表演”,它无疑具备了令人血脉喷张的全部要素:势均力敌的精英勇士让结果充满未知的魅力;外围点评助威的参谋让赛事更专业、更有看点;承办方提供的“道具”和设定的“赛制”则令精彩加倍。角色二:“聚宝盆”,聚及前沿认知的思想“马拉松”如果说技术的交锋令参赛者热血沸腾,那么思想的碰撞无疑是令开发者灵感迸发的重要契机。由此,在响铃看来,这些行业内顶尖的AI赛事同样称得上是一个“聚宝盆”。前文中提及的参赛者、评委除了能给予技术上的扶持外,在思想“马拉松”的征程中,他们也是必不可少的“能量棒”,为开发者的创新之路添砖加瓦。但AI大赛的魅力并不仅限于此。一方面,与参赛者交流较深的除了竞争对手和评委以外,有的主办方亦能拓展开发者人工智能创新思路、赋予项目直接落地的机会,甚至还能牵引优质企业、开发者进入园区,提供宝贵的创新引导。“华为云杯”2021人工智能应用创新大赛是由华为(苏州)人工智能创新中心、苏州工业园区科技发展有限公司主办,这对于投身AI的开发者而言无疑是一个好消息。华为云已经入选了「AI中国」最强技术实力企业TOP10和最强人工智能公司TOP30两大榜单,展现了华为云AI具有强大的技术实力。与此同时,苏州工业园区科技发展有限公司的实力也不可小觑。据悉,2020年该园区人工智能产值达462亿元,带动相关产业估值超千亿元。未来,苏州国家新一代人工智能创新发展试验区建设还将继续以苏州工业园区为核心先导区,打造具有国际影响力的人工智能产业聚集区。它们在研发人员、论文发布、专利储备上拥有强大的储备,并在相应人工智能技术细分领域中处于顶尖水平,同时还具备成熟的商业模式。借此AI大赛,参赛者不仅与之接触、学习,研发成果还可以获得针对性的指导,可谓是一举两得。另一方面,AI大赛自然有其聚焦的领域,对这些领域感兴趣或正在研究的队伍投身其中,既有助于开发者能高效率的实现创新创意突破,还可以让参赛者有机会接触“滚烫”的前沿认知,获得“宝贵”的实践机遇。经历了十年的高速增长期,AI 技术已经渗透到行业的方方面面,包括智能交通、智慧物流、智慧能源、智慧医疗在内的多个领域也将乘着数字产业化的东风,在下一个阶段迎来长足的发展。“华为云杯”2021人工智能应用创新大赛分为创客赛道和企业赛道,其中企业赛道聚焦于“智慧城市”、“智慧医疗”和“智慧制造”等新一代人工智能领域的重点攻关场景,开发者参与其中,可以更加了解现阶段智慧化转型的重要着眼点,并输出成功经验与产品。创客赛道的赛题则聚焦生物医药研发的前沿领域,面向虚拟筛选场景,推动大数据、人工智能等技术与生物医药行业融合。正常来说,药物研发是一个漫长的过程,需要投入大量的研发人员,花费十到十五年的时间,以及数十亿美元的研发经费。不过,随着更多像“华为云杯”2021人工智能应用创新大赛的出现,它们一方面能促使药物研发领域的技术变革;另一方面,AI技术可以更深入地挖掘药物研发领域产生的海量数据,IT和BT的融合可能成为新药研发新的范式。站在长期收益层面来看,创客赛道中的高等院校和科研单位若是原本的研究课题与之相关,这也是个很好的机会去延伸课题价值,并扩大其在生物医药界的影响力。这样来看,AI大赛不仅拥有“斗兽场”那般令人热血沸腾的魅力,同时还具备着“聚宝盆”的吸引力。通过汇聚行业内顶尖的人才、综合实力强劲的主办方、人工智能的典型场景,凝结成一场场精彩绝伦、后劲十足的AI赛事。角色三:“摆渡人”,让创意在大赛里“落地生根”其实,不仅是在人工智能产业,像设计类、文字类的工作中,创意都像是精心孕育的“胚胎”,我们所渴求企盼的无非是这个“胚胎”何时能以“孩童”的形式呱呱坠地。这就需要找到落地的场景依托点,而某些具备行业内顶尖水准的AI大赛在契机之下刚好充当了开发者创意落地的“摆渡人”。其一,这些AI大赛提供的技术支持,有助于开发者构建模型与部署,是开发者探索 AI 算法、提升技术与实践能力的重要机会。前文提到的ModelArts 3.0就是典型的以面向AI行业落地著称的AI开发平台。其中EI骨干模型,是小样本数据训练高精度模型,能够提供AI开发的新范式;联邦学习,能打破数据孤岛,实现数据不出户的行业自由联合建模;模型智能评估诊断,能使开发者可以直观了解模型各方面性能,针对性调优或者部署;高性能的AI计算支持弹性训练,可以根据模型训练速度的需求自适应实现资源的最佳分配。以医疗领域为例,针对新冠肺炎疫情,华为云推出AI+CT医学影像分析服务,在AI-CT辅助筛查中实现了自动智能检测,而且已经在各大医院成功部署,这项服务部分便是依托于ModelArts一站式AI开发与管理平台。现在位于苏州人工智能产业园区的微清医疗器械也曾受惠于AI大赛创新成果,该公司通过引进与华为合作的AI辅助眼底诊断系统来进行青光眼的智能诊断,目前,苏州已有近10家医院使用上了这种技术。其二,参赛者在大赛中获得的物质及资源帮扶,也能助力创意落地。凡是竞技赛事,总是会有奖品,在种类繁多、眼花缭乱的奖品中,奖金是最常见的品类之一。在人工智能这个烧钱的行业,比赛获得的奖金不仅有助于使目前的“灵光”落地,也能成为下一个灵感的启动资金。在奖金以外,一些AI大赛也会别出新意的另设奖项。以“华为云杯”2021人工智能应用创新大赛企业赛道一等奖为例,“智能+医药”、“智能+制造”、“智能+城市”三个场景分别决出一个第一名,它们将获得价值100万元华为人工智能云资源、华为专家资源支持、园区具有竞争力的政策支持以及优先2022年重大联合创新。这本质上代表着,大赛的优胜队伍有可能依托华为在人工智能领域的技术研发实力,同时结合企业自身在行业内的经验积累,与华为以及主办方共同孵化、研发人工智能创新产品和解决方案,并使之有效落地。基于上述这些诱人的条件,“华为云杯”2021人工智能应用创新大赛在报名阶段就盛况空前。本着对开发者负责的本心,“华为云杯”2021人工智能应用创新大赛势必将扮演好“摆渡人”的角色,不仅承担着将“理想”渡成“现实”的责任,还要起到引领未来发展方向的作用。结语:总而言之,处于关键爬坡阶段的人工智能,无疑是下一轮科技革命和产业变革的核心驱动力,而纵观技术成熟曲线,这个阶段的AI技术还需不断攻关,产业还需要汇聚更多的人才,并且技术也需要与产业、实际应用更深入的结合,不断产生实践价值。在人工智能快速渗透到全行业、全场景的过程中,AI大赛成为了一个重要窗口,从“华为云杯”这个典型案例来看,AI大赛被称为“人工智能产业发展的推进剂”和“技术与场景融合的桥梁”绝对名副其实,它推动着技术更快速地迭代,也推动着更多优质项目实践落地,更推动着更广阔的市场空间出现。未来,如果业界期望以AI赛事去推进人工智能领域的学术交流、人才培养、技术发展以及跨界应用与融合,实现人工智能技术的跃迁,或许还需要更多像“华为云杯”一样的大赛。本文来源:科技向令说:https://mp.weixin.qq.com/s/8hN6IyJmqRJozqZHriDXzw
  • [技术干货] 主动学习解决数据标注难题
    作者:Frank转自:https://zhuanlan.zhihu.com/p/1724793061、动机如今,我们利用AI算法解决实际问题的时候,需要面临的第一个并且是最重要的一个问题就是进行大规模的数据采集和标注。众所周知,使用监督学习方法做分类任务时,往往训练样本规模越大,分类器的性能就越高。但是在面临实际问题时,我们接触到的大量的来自互联网或其他来源(如学术界或商业界)的都是未标注的数据。然而标记样本通常是代价比较大的,比如海量标注需要耗费大量时间和人力(海量的语料和图像标注);又比如一些数据需要领域内的专家来进行人工标注(一家数据驱动的医疗公司有很多MRI扫描,他们需要聘请一位专家来帮助他们解释这些扫描),这样数据标注便成了人工智能算法商用的一个难题。 业界也有一些专门进行数据标注的公司[1],比如Google可以提供不同任务的数据标注服务(其中视频类的标注费用最高,最高可到$686/500min),如Figure1示:根据上表,考虑到数据标注的代价以及有限的资源,人们无法解释或标记所有数据;这就是他们决定使用主动学习(Active Learning)的原因。主动学习的核心思想之一就是通过一定的查询策略,选取“最不确定”或者“携带最大信息”的样本进行标注供算法学习,然后通过模型迭代更新可以实现与使用完全受监督的数据集类似的或更高的[2]性能,而不需要对所有的数据进行标注。通过这种方式,决定使用多少数据或者期望模型达到某种性能就变成了一种资源管理决策;换言之,就变成了一种商业决策(Business Planning)。2、主动学习介绍主动学习(Active learning or query learning)作为机器学习的一个分支(Semi-supervised Learning)其主要是针对数据标签较少或打标签代价较高这一场景而设计的。主动学习背后的关键思想是,如果允许从学习的数据中选择数据,则机器学习算法可以通过较少的训练标签来实现期望的准确性。主动学习主要方式是模型(Learner)通过与用户或专家(Oracle)进行交互(如Figure 2所示),根据某种采样规则,抛出query让专家确定数据的标签,如此反复迭代,以期让模型利用较少的标记数据获得较好的性能。一般情况下,模型抛出的未标注数据为hard sample(可以是模型最难区分的样本;可以是对模型提升最大的样本,如梯度提升最大;可以是方差减小等等)。可以看出active learning与passive(supervised) learning最大的不同是其不需要大量的专家标注样本训练模型。 主动学习是利用少量标注样本,然后由模型(Learner)主动选择hard sample返回给用户或专家(Oracle)打标签,进而不断迭代以获得较好的模型(如Figure 3所示)[3],该过程必须要有Oracle的参与,这也是active learning区别于semi-supervised learning的不同之处。如上图所示,Figure3(a)是一个二分类数据集的GroundTruth。由于样本过多,Figure3(b)随机选择了其中20%的数据进行标注,通过训练得到如图所示的回归模型。可以看出,由于样本选择是随机的且标注的样本数量过少致使采样后的分布和GroudTruth真实分布相差较大,因此回归模型无法在真实数据集上得到较好的表现。图Figure3(c)采用了主动学习的方法,首先采用比如15%的数据训练出一个基学习器,然后基学习器基于某种查询策略主动在真实数据集中挑选基学习器难以区分的样本,交给Oracle进行标注,然后一步步迭代更新模型,最终采用较少的数据便可以训练出一个回归模型使得其在真实数据集上得到较好的表现。3、主动学习学术研究综述“Settles, B. 2009. Active Learning Literature Survey”[3]作为主动学习领域的经典论文,介绍了主动学习在2010年及以前的综述,Figure4的思维导图[4][5]结合该Survey以及近几年各大顶会中主动学习的研究展示了一些主动学习领域的一些Milestones。4、主动学习场景Membership Query SynthesisMembership Query Synthesis[5]可查询任意样本或随机生成(例如对图片样本进行旋转或添加“噪声”等,类似样本增强的策略),然后将其送给Oracle进行判断,其过程如图所示,由于在样本的随机生成过程中,其有较大的不确定性,因此在某些应用,专家也无法标记样本,故这种方法对于某些应用场景有一定的局限性。Stream-Based Selective SamplingStream-Based Selective Sampling或Sequential active learning,其核心假设为样本的获得是“免费的”或代价较小的,因此基学习器每次基于某种查询策略选择一个样本给专家进行标记,如图所示,模型通过某种“informative measure”确定是否由专家标注样本,或舍弃该样本。该方法支持在线学习(online learning)Pool-Based Sampling与Stream-Based Sampling最大的区别即为Pool-Based Sampling每次确定一批unlabeled data,由专家标记,如图4所示,Pool-Based Sampling是active learning中应用最为广泛的一种framework,同时支持在线学习。5、主动学习查询策略根据主动学习场景所述,Active learner在迭代中需要根据一定的策略选择most informative unlabeled sample去让Oracle进行标注,然后更新模型,在active learning中其主要包括以下几种Query Stategy:Uncertainty SamplingLeast confident sampling基学习器根据每一个样本所属类别输出概率最大值,选择一个最不确定的样本Margin sampling基学习器根据每一个样本所属第一个和第二个最可能类别概率差,选择一个最不确定的样本Entropy Sampling基学习器根据每一个样本所属类别概率的熵,选择一个最不确定的样本下面的热力图显示了通过三种查询策略后,在一个三分类任务中,不同的查询策略倾向于查询到的最不确定的样本。下面的例子展示如何具体运用三种查询策略:假设有一个三分类任务,训练好一个基学习器后,基学习器要在剩余样本的pool中选择一个最不确定的样本进行模型迭代更新,这个pool中有三个未标注的样本,输入基学习器后,基学习器输出了三个样本分别属于三个类别的概率:proba = np.array([[0.1 , 0.85, 0.05],[0.6 , 0.3 , 0.1 ],[0.39, 0.61, 0.0 ]])通过Least confident sampling:1 - proba.max(axis=1) = [0.15, 0.4 , 0.39]可以得到most uncertain样本为第二个样本通过Margin sampling:part = np.partition(-proba, 1, axis=1)margin = - part[:, 0] + part[:, 1]margin = [0.75, 0.3 , 0.22]可以得到most uncertain样本为第三个样本通过Entropy sampling:Entropy = entropy(proba.T)Entropy = [0.51818621, 0.89794572, 0.66874809]可以得到most uncertain样本为第二个样本Other Query Strategies除了Uncertainty Sampling之外,还有Query-by-Committee, Expected Model Change, Expected Error Reduction, Variance Reduction, Density-Weighted Methods等Query Method和相对应的变体,具体可阅读参考文献[3]的chapter 3以获取其余查询策略。6、主动学习算法流程最后,以一张流程图展示主动学习的算法流程,完成本次主动学习算法的介绍。其中红色部分的模块为算法流程的超参数,可以根据具体的场景进行调节。
总条数:7896 到第 页
上滑加载中