前言
现在开始就是学习在实际机器学习中有哪些前辈们留下的经验,可以避免在训练自动的网络时候走很多弯路。
单一评价指标
在训练的过程中我们会得到很多信息,最直观的就是精度(Precision)和回召率(Recall),但是我们选择哪个来比较两个模型的优劣呢,这时候引入了F1score,选择两者的调和平均数作为其评价指标。
同时呢可能有一个模型效果特别好,但是时间需要的也相较于其他模型很高,让我们无法接受,这时候可以给指标加一个时间的阈值,只有低于阈值的模型才继续比较F1score。
又比如会出现一些我们无法接受的结果的时候,我们可以把这些不好的结果设置一定的权重,添加到评价指标函数里,这样就可以规避掉坏结果的风险。
正交化
在机器学习过程中,正交化是一种策略,用于将不同的性能指标和优化目标分开处理,从而更清晰地理解和改进模型的各个方面。正交化的核心理念是将复杂问题分解成更容易解决的子问题,使每个子问题都可以独立优化,最终组合得到预期的整体效果。
贝叶斯最优误差
我们机械学习的本质就是求x到y的映射,而这个映射有一个理论最优函数,其误差就是贝叶斯最优误差,就是说我们无论模型设计的多么精妙最后的误差都只能接近这个最优误差。
我们怎么求贝叶斯最优误差?人脑在分类的工作上完成的非常好,这时候我们就可以用人对于图片的分类的误差近似与贝叶斯最优误差,然后再比较机器学习的结果和这个误差之间的差距,这部分差距称为可避免的误差,我们可以通过比较可避免的误差和方差的大小来判断当前模型改善的重点是什么。
超越人类水平的性能
因为我们只是把人类水平近似为最优误差,因此是有可能模型在一些方面超越人类水平。
错误分析
有时候我们推断这个模型表现的不太好的原因是某一部分数据集还不够多,这个时候我们就要思考是否值得去改善这一点了。
在评估是否值得去做的时候,我们需要考虑Ceiling表现上限,就是如果我们最好了这一点,那我们能够得到的最大收益是什么,这样可以避免我们做一些吃力不讨好的事情。
为了方便我们更好的进行错误分析,可以把所有的错误以及错误出现的原因列一个表格,对每个原因的占比进行计算,对重要的部分有针对性的解决。
错误的标签
在训练集中出现的标签随机的错误情况可以忽视,因为其对于整体训练的影响不大。但如果是系统性的,如把一些容易混淆的物体认错了,就需要更正
不匹配的训练集和开发/测试集
我们经常会遇到一种情况,训练集是网上下载的高清图片,但是用户实际应用的场景是手机自由拍摄的模糊图片。我们可以把网上下载的全部以及一部分实际应用场景图片放在训练集里面,同时新定义一组数据训练-验证集(training-dev set) ,让其拥有和验证集同样的数据分布,但其不参与训练。
这样我们就可以通过比较训练-验证集(training-dev set)的结果和训练集和验证集的联系,来判断结果拥有高方差的原因是因为数据不匹配还是其他原因
如果我们发现原因是数据不匹配的话,这个时候有一种方法是找到训练集和验证集数据的差别,比如实际应用场景中有噪音,那么我们可以人为给训练集其他图片加上噪音。
迁移学习
对于处理新的问题的时候,我们一般可以先构建一个简单的模型,然后不断对这个初始模型进行迭代,从而得到能解决实际问题的复杂模型。同时,我们也可以把新的问题和之前大家已经解决的很好的问题结合起来,比如在图像识别领域,一些图像的低级信息已经被训练好了,我们只需要在这网络基础上改最后一层,或者在后面加上几层,这种过程叫做预处理以及微调,可以用于小量样本处理高级信息。
多任务学习
多任务学习(Multi-task Learning, MTL)是一种旨在同时学习多个相关任务的机器学习范式,利用任务之间的共享信息提高模型的整体性能。主要应用于自然语言处理、计算机辅助翻译、语音处理、医学影像等
其底层逻辑也是共享低层的信息,可以提高效率,但只有神经网络比较大才不会损耗性能。
端对端
端对端是现代深度学习的优势,但有时候我们也可以把一些问题分成几个简单的步骤,有助于利用已知的信息。
端到端特点:
(1)需要大量的数据
(2)不用设计手工特征(也是弊端)
(3)有一些特征是人为设定的,不符合自然规律,如音素。
(4)有一些已经很成熟且复杂度高的领域用端对端不合适,如汽车路径规划问题,我们直接得到汽车的转向角和加减速,不如先进行目标检测,然后再规划路径。
总结
很有用的一些经验,要站在巨人的肩膀上看世界