1. Orthogonalization(正交化)
正交化的思想就是,每个输入单独控制一个属性,不要让一个输入同时控制多个属性。不同属性的控制是独立的,这样便于调试。
如果模型在training set上表现好,在dev set上表现不好,则可以正则化;
如果在dev set上表现好,在test set上表现不好,则可以增大dev set的规模;
如果在test set上表现好,在真实世界表现不好,则可以改变dev set或者cost function。
在神经网络中一般不用early stopping
2. 使用单一的量化评价指标
2.1. 状态与决策
- True: 预测正确的样本数
- False: 预测错误的样本数
- Positive: 预测为正样本的样本数
- Negative: 预测为负样本的样本数
2.2. 状态与决策的组合
- TP: 将正样本预测为正样本的样本数 (真阳性)
- FP: 将负样本预测为正样本的样本数 (假阳性)
- TN: 将负样本预测为负样本的样本数 (真阴性)
- FN: 将负样本预测为负样本的样本数 (假阳性)
2.3. 评价指标
- Precision(精确率):P=TP/(TP+FP),反映了被分类器判定的正例中,真正的正例样本的比重;
- Accuracy(准确率):A=(TP+TN)/(P+N)=(TP+TN)/(TP+FN+FP+TN),反映了分类器对整个样本集的判定能力——能将正的判定为正,负的判定为负的能力;
- Recall(召回率):R=TP(TP+FN)=1-FN/T,反映了呗正确判定的正例占总的正例的比重;
在实际中, 一般同时用Precision和Recall来综合评价一个分类器,我们希望分类器的这两个指标都很高。
采用$F_1$ score来衡量分类器的性能,可以兼顾Precision和Recall。它是Precision和Recall的调和平均数:更为一般地,定义$F_{\beta}$ score:一个好的验证机和单一量化评估指标可以提高迭代的效率
如果有多个指标(例如准确率和运行时间),选择其中一个加以优化,并使其他指标满足一个阈值,有时候是一个合理的策略。2.3. 关于train/dec/test set
三者的分布应该一样,并且都应该对未来的实际数据的分布基本一样。
关于三者的尺寸,在传统的机器学习时代,尤其是数据规模不大(万级以下的时候,如果只有train和test,则70%:30%比较合适;如果三者都有,则60%:20%:20%比较合适。在现代机器学习中,数据规模很大,一般都是百万级,那么98%:1%:1%比较合适。2.4. 与人类表现比较
当训练集准确率与人类表现相差比较大时(高偏差),应该优先考虑消除偏差;当偏差小,但是测试集与训练集准确率相差大(高方差)时,应该优先考虑消除高方差。
贝叶斯误差是理论上的最小误差,人类表的误差略大于贝叶斯误差,一把可以用人类误差来估计贝叶斯误差。除非过拟合,否则机器学习模型在训练集上的误差不会小于人类误差(贝叶斯误差)3. 错误分析
在实际应用中,人工对分类错误的样本进行统计(记录错误的类别),然后制定相应的改进策略,能够提高模型迭代效率。
训练集比较大时,有少量标签错误的样本影响不大,因为深度学习算法对随机错误很稳健,但是对系统误差不那么稳健;在开发集(dev set)中,如果由于标签错误导致的错误率占比较大,则应该考虑去纠正标签错误。
dev set和test set必须严格服从相同的分布,而train set的分布可以有稍微的不同。
如果你要构建机器学习应用系统,一般可以先建立一个简单的系统,然后采取前面提到的各种方法进行迭代,除非是你经验特别丰富的领域或者学术界有很多参考文献的领域(这个时候你可以直接建立一个复杂的系统)4. train set和dev/test set不匹配的问题
如果你获得了两个分布不同的数据集,一种看似可行的方案是可以把它们混合后随即排列,再用来进行train/dev/test划分。这种方案可能会出现问题,例如当我们关心的那个分布的数据集(记为A,相应地不太关心的数据集记为B)比较小时,会出现dev set中A的比例很小的情况。而dev set是用来选择、迭代模型的,应该对我们关心的数据集更加侧重。因此可以考虑,train set中包含所有的B以及少量的A,而dev set和test set包含剩余的A。
当train set与dev set的分布不一样,而两者的错误率相差很大时,不能贸然地下结论说模型的variance很大。此时可以将train set进一步划分为train set和train-dev set,这两个set分布一样,可以用来检验模型的泛化能力。5. 从多个任务中学习
如果你训练好了一个识别猫的网络,想用这个网络进一步得到识别医学影像的网络,可以用少量医学影像的数据来训练该网络的最后一层和输出层,或者用很多医学影像的数据训练网络的所有参数,此时训练识别猫的阶段成为预训练(pre-training),更新网络参数的阶段叫做微调(fine tuning)。
迁移学习(transfer learning)可以把一个拥有大量数据的问题模型,迁移到一个先对之下仅有很少数据的问题模型中。
迁移学习是有先后顺序的,而多任务学习(multi-task learning)在一开始就尝试让一个神经网络同时做几件事。比如在一张图片中识别是否有车、行人、红绿灯、交通标示牌等。这要比训练多个单独的网络(每个网络解决一个问题)的效果要好。损失函数的形式:而且你在标注图片的时候,哪怕图片里面只标了部分任务的标签,多任务学习也可以正常进行下去,因为$(5-1)$只对0或者1的标签进行统计,没有标记的任务可以不统计。
目标检测就是多任务学习的一个例子。总体而言,多任务学习比迁移学习的场景要少一些。6. 端到端(end-to-end)学习
端到端学习就是省略了传统的多阶段过程,但是需要大量的数据。如果只有中等的数据,可以考虑折中一下,分阶段进行。