创建机器学习项目的注意事项


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来综合评价一个分类器,我们希望分类器的这两个指标都很高。
    采用 F1 F 1 score来衡量分类器的性能,可以兼顾Precision和Recall。它是Precision和Recall的调和平均数:
    F1=21P+1R=2PRP+R(2-1) (2-1) F 1 = 2 1 P + 1 R = 2 ⋅ P ⋅ R P + R

    更为一般地,定义 Fβ F β score:
    Fβ=(1+β2)PR(β2P)+R(2-2) (2-2) F β = ( 1 + β 2 ) ⋅ P ⋅ R ( β 2 ⋅ P ) + R

    一个好的验证机和单一量化评估指标可以提高迭代的效率
    如果有多个指标(例如准确率和运行时间),选择其中一个加以优化,并使其他指标满足一个阈值,有时候是一个合理的策略。

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)在一开始就尝试让一个神经网络同时做几件事。比如在一张图片中识别是否有车、行人、红绿灯、交通标示牌等。这要比训练多个单独的网络(每个网络解决一个问题)的效果要好。损失函数的形式:

1mi=1mj=14L(y^(i)j,y(i)j)(5-1) (5-1) 1 m ∑ i = 1 m ∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) )

而且你在标注图片的时候,哪怕图片里面只标了部分任务的标签,多任务学习也可以正常进行下去,因为 (51) ( 5 − 1 ) 只对0或者1的标签进行统计,没有标记的任务可以不统计。
目标检测就是多任务学习的一个例子。总体而言,多任务学习比迁移学习的场景要少一些。

6. 端到端(end-to-end)学习

端到端学习就是省略了传统的多阶段过程,但是需要大量的数据。如果只有中等的数据,可以考虑折中一下,分阶段进行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值