机器学习策略总结

内容是对吴恩达老师深度学习课程的第三课机器学习策略内容的总结。

为什么要机器学习策略?

当你尝试优化一个深度学习系统时,如果你做出了错误的选择,你完全有可能白费 6 个月的时间,往错误的方向前进,在 6 个月之后才意识到这方法根本不管用。曾经一些团队花了 6 个月时间收集更多数据,却在 6个月之后发现,这些数据几乎没有改善他们系统的性能。

什么是正交化?

我们在优化系统时,只控制或优化某一个维度,调整这个维度的时候不影响其他的维度。

多个优化指标时,如何处理?

可以把一个指标设置为需要尽量优化的,另外几个指标设置为需要满足的。

开发/测试/训练集的数据划分原则是什么?

开发集以及评估指标,真的就定义了你要瞄准的目标,训练集、开发集、测试集数据要尽量瞄准目标,保障数据与目标检测对象同分布,因为各种原因同分布的目标数据很少时,要优先分配给开发和测试数据。

训练、开发、测试数据集的大小如何设置?

数据量小于1万时,按照60/20/20的量分配给训练/开发/测试集是相当合理的。
数据量大于1 百万个时,98%作为训练集, 1%开发集, 1%测试集可能更合理。

什么是训练集、开发集、验证集?

1)训练集(train set) —— 用于模型拟合的数据样本。训练的是普通参数,而不是超参数。
2)验证集(development set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。
在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点或者在神经网络中选择隐藏层神经元的数量;
在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。
测试集 —— 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
验证集选择了代价函数最小的一个模型。虽然在这个模型上代价很小,但并不代表在其他数据上代价也小。所以需要一个完全没有经过训练的测试集来再最后测试模型的准确率。

什么时候应该改变开发测试集和指标?

你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。
比如查全率查准率都忽略了对方,而f1指标则结合了两者。
比如你的图片分类中,虽然你的错误率低,但是会把一部分色情图片也分类成了猫。可以通过放大色情图片的权重来解决这个问题。
比如你在分类时,算法b的结果更好,但是实际上线后,a的效果更好。原因可能是因为训练数据都是清晰照片,而实际数据可能都是模糊的,这个时候应该在训练数据中添加模糊数据。

贝叶斯最优错误率是什么?

贝叶斯最优错误率一般认为是理论上可能达到的最优错误率。

为什么算法超过人类表现后会变得越来越难以提升?

一个原因是人类水平在很多任务中离贝叶斯最优错误率已经不远了。
第二个原因是,只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用了。
只要你的机器学习算法比人类差,你就可以从让人帮你标记数据,你可以让人帮忙或者花钱请人帮你标记例子,这样你就有更多的数据可以喂给学习算法。

2.1怎样进行误差分析?

找一组错误样本,做个表格,看错误比例最高的比例是哪类数据

2.2数据标注错误怎么办?

训练集,事实证明,深度学习算法对于训练集中的随机错误是相当健壮的(robust)

  • 随机错误:健壮
  • 系统错误:不健壮

统计因为标签错误所占的百分比

是否需要纠正标签错误?

  • 看是否严重影响开发集评估能力

如何修正?

  • 开发集和测试集同时修正
  • 同时检查正确和错误的样本

2.3快速搭建系统,并进行迭代才是最好的开始

尽快开始搭建系统,可以知道错误出现在哪里,从而决定如何去改进,并快速迭代。

2.4在不同的分布上进行训练并测试

案例1:猫分类,10,000张用户图片+200,000爬虫图片,如何分配

  • 方案1:200k爬虫图片平均分配到训练/开发/测试集上。(不推荐)
  • 方案2:200k爬虫图片全部放到训练集上。(推荐)

案例2:语音激活汽车后视镜:其他渠道收集50万录音,实际场景收集2万条录音

  • 方案1:2万条实际场景数据全部做开发和测试集,50万其他渠道数据用于训练。(可行)
  • 方案2:1万条用于开发/测试集,51万条用于训练。(可行)

2.5因mismatched data造成的偏差和方差怎么解决?

训练集误差是1%,你的开发集误差是 10%,一定是方差问题吗?可能是方差,也可能是mismatched data造成的,哪个影响更大?

  • 设立train-dev数据集,来源训练集,但是不参与训练。如果train-dev表现好,则是mismatched data造成的影响,否则是方差造成的影响。

2.6data mismatch问题定位如何解决?

弄清楚开发集和训练集到底有什么不一样

尽量使得训练集和验证集/测试集分布一致

  • 收集更多类似你的开发集和测试集的数据

  • 人工合成数据

    • 要避免小数据合成到大数据造成的过拟合

2.7迁移学习

做法:最后一层权重拿掉,赋随机值,在新的标签数据上重新训练

适用场景:有相同输入,迁移前模型的训练数据量很大,目标模型可用训练的数据少。

预训练:将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果

微调:使用之前保存下来的模型的参数来作为下一个任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。

2.8多任务学习

往往一次解决多个问题比一次解决一个问题准确率更高

与softmax的区别是什么?

  • softmax是每个样本只有一个标签,这个标签可能是多个。
  • 多任务是每个样本可能有多个标签

多任务学习什么时候有意义呢?

  • 训练的一组任务,可以共用低层次特征
  • 每个任务数据量差不多,总数据量比单任务数据量大很多(不一定)
  • 神经网络要足够大,太小了可能降低性能

2.9端到端的学习

例子:语音识别(传统:MFCC、音位)

反例:人脸识别(分两步效果更好)

反例:从孩子手部的 X 光照片判断孩子年龄

2.10是否要用端到端学习

优点:所需手工设计的组件少,真的只是让数据说话

缺点

  • 需要大量的数据
  • 排除了可能有用的手工设计组件

例子:自动驾驶

  • 深度学习:从传感器或图像输入到检测行人和车辆
  • 路径规划软件:知道其他车辆和行人的位置或者动向,选择一条车要走的路
  • 控制算法:精确的决策确定方向盘应该精确地转多少度,油门或刹车上应该用多少力
机器学习策略.png

你可能感兴趣的:(机器学习策略总结)