Structuring Machine Learning Projects总结

来源:互联网 发布:netstat 端口状态 编辑:程序博客网 时间:2024/06/08 02:56

这门课程主要讲述了一些分析分析问题的方法和解决的策略,让你快速判断问题的症结和改进的方向


正交化

正交化是指,当出现某个问题时,我们使用的解决方法只针对这个问题,而不影响其他方面

问题

解决方法

训练集误差大

更大的网络

更好的优化算法

……

开发集误差大

正则化

更多的数据

……

测试集误差大

更大的开发集,退回到上一步

真实应用时误差大

改变开发集或损失函数


单一指标

使用单一指标来对比系统的好坏,更加方便

Precision

Recall

F1 score


(还有一些其他的指标可翻阅西瓜书)

设置评估指标时,如果对各个方面的错误容忍度不一样,可以加上权重

一定要先设置指标,然后再去想优化方法


训练集、开发集、测试集的划分

开发集和测试集一定要来自同一分布

划分比例可以参考前一篇文章


选择调优方向

人类最好的误差接近贝叶斯误差,训练集误差和贝叶斯误差的差距为可避免误差,开发集(测试集)误差为方差,根据可避免误差和方差的关系,决定先调优哪个方面。


误差分析

以分类为例,设置一张表格,人工分析所有开发集上错误分类的数据,标注每一个数据的特殊点,统计每个类别错分的占比,决定是否需要单独针对某一类做改进,如下图(截图于网易云课堂)


因错误标签导致的错误分类,影响较小时可以不修正

若要修正,注意以下三点:

1.要同时改变开发集和测试集,以保证他们来自同一分布

2.对错误分类进行修正后,也要对正确分类进行修正,因为有可能是运气好分对的(通常不这么做,工作量太大)

3.对训练集也进行修正(通常不这么做,工作量太大)


对不同分布的数据进行训练

有时,需要对不同分布的数据进行训练。例如目标数据集数量太少,而和他相似的数据集却很多。

方法1:讲所有数据集随机打乱,再划分训练集、开发集、测试集(不推荐)

方法2:开发集、测试集来源于目标数据集,并把目标数据集的一部分和其他数据集作为训练集

使用方法2时偏差分析:将训练集随机打乱,并分为训练集和训练-开发集,人类水平误差和训练集误差作为可避免误差的评估,训练集误差和训练-开发集误差作为方差的评估,训练-开发集误差和开发集误差作为数据不匹配误差的评估,开发集误差测试集误差作为过拟合的评估。


(截图于网易云课堂)

对于数据不匹配问题:首先人工分析数据的区别,然后让训练数据更接近目标数据或者收集更多相似数据。(人工合成数据,注意合成时可能会出现只合成了一小部分类别的情况)


迁移学习

对于任务相似,且目标数据较少或者想加快训练速度时,有效。

注意改变网络的最后几层


多任务学习

每个任务的数据量差不多,且可以共用一些低级特征。

网络一定要够大


端到端学习

可以简化网络结构,不需要手工设计许多组件,免去人类的先验知识,直接学习输入到输出的映射。

如果数据量较少,或直觉上感觉到这种映射关系极为复杂,就不要用端到端学习。


上一篇:Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization总结

下一篇:To Be Continued

原创粉丝点击