1.正交化
通过电视机调节按钮的例子理解正交化。电视机的调节按钮有诸如调节图像高度、左右、旋转、大小等不同功能,而我们往往希望每一个按钮只控制一个功能,而这个按钮尽量不会影响到其他属性,这样更容易往我们想要的方向调节。
拟合训练集 | 训练更大的网络、切换更好的优化算法 |
拟合验证集 | 正则化、增大训练集 |
拟合测试集 | 增大开发集 |
在实际中应用很好 | 改变开发集或成本函数 |
early stopping这一旋钮,会导致对训练集拟合不够,但又能使得在开发集上表现好。因此这一功能不够正交化,我们一般不用。
2.评估指标
方便进行优化,我们尽量不使得多个指标同时作为我们的评估指标。应使用单实数评估指标
在N个指标中:我们一般选择1个优化指标,剩下N-1个为满足指标
3.开发集,测试集
开发集和测试集应来自同一分布,并且来自所有数据中的随机取值。尽量符合将来要进行预测的数据
把大量数据分到训练集,小部分分到开发集和测试集
如果你的评价指标无法正确定义算法排名,则需要定义一个新的评价指标
正交化思想:把设定指标看成独立的第一步,之后才想如何优化系统来提高这个指标分数
4.人类水平
当一个机器学习算法比人类进行判断的结果要糟糕时,可以:
1.标记更多数据
2.分析算法,看看错误出现在哪
3.更好地分析偏差和方差
可避免误差:贝叶斯误差和训练误差的差值
当训练的结果接近人类水平时,更难判断出问题是偏差还是方差
总结:
减小可避免误差 |
使用规模更大的模型或者训练更久 优化算法(momentun,RMSprop,Adam) 更好的神经网络架构(RNN,CNN或者超参数 |
减小方差 |
更大规模数据集 正则化(L2,dropout,数据增强) 更好的神经网络架构,超参数搜索 |
5.误差分析
在开发集或测试集中找一组错误的例子,观察错误标记的例子,看看假阳性和假阴性,统计属于不同错误类型的错误数量
深度学习算法对训练集中的随机错误是相当鲁棒的
当标注错误的比例上升到需要修正时,有两点需要注意:1。确保开发集和测试集同分布。2.算法做对和出错的例子都需要检查(第二点通常不做)。3.可以只修正开发集和测试集
构建深度学习系统的建议:1.构建开发集、测试集、目标。2.快速搭建一个系统原型。3.使用偏差/方差分析和误差分析,确定下一步的优化目标
6.不匹配数据的方差和偏差:
当训练集和开发集测试集来自不同分布时,我们很难分辨出开发集误差到底是来自于方差还是来自系统面对新数据的错误(数据不匹配)。
针对此问题的做法是:打散训练集,从中选出一个子集作为“训练开发集”
有了人类水平误差,训练集误差,训练开发集误差,开发集误差,测试集误差。做他们的差值,我们就可以得到可避免偏差,方差,数据不匹配问题的程度,对开发集的过拟合程度
如何解决数据不匹配问题?
1.进行误差分析,尝试了解训练集和开发集的具体差异
2.使得训练数据更加逼近开发集数据,或者收集更多类似于开发集的数据(例如人工数据合成)
7.两个强力工具
迁移学习
预训练,微调
当尝试优化任务B的性能(如放射科图像),而这个任务数据比价少。可以找一个相关但不同的任务,(例如图像识别,我们已经有很多数据,已经从中学到了很多底层次特征),这也许能够帮助在网络B中做的更好。
多任务学习
多任务学习可以共享低层次特征,训练一个复杂的网络以处理好各个任务,比单任务网络性能更好
8.端到端深度学习
端到端深度学习可以简化系统架构。
但是在一些问题上,端到端深度学习并不总是有效。例如人脸识别中,直接将图像对应到人的身份的数据集很难采集,但如果将任务分割成人脸检测+人脸对比两个子任务,则有更多的数据可用
优点 |
1.让数据自己说话 2.所需设计的手工组件更少 |
缺点 |
1.需要大量的数据 2.排除了可能有用的手工设计组件 |
数据和手工设计,是两个重要部分。当数据足够时,手工设计显得不那么重要。但当数据不足,则需要依靠手工设计弥补