Deep Learning.ai学习笔记_第三门课_结构化机器学习项目

目录

第一周 机器学习策略(1)

第二周 机器学习策略(2)

 

目标:学习一些机器学习优化改进策略,使得搭建的学习模型能够朝着最有希望的方向前进。

第一周 机器学习策略(1)

搭建机器学习系统的挑战:尝试和改变的东西太多,比如超参数。

 

什么是正交化?

正交化是协助调节搭建机器学习系统的方法之一,类比老式电视机的调节按钮,正交化指的是电视设计师设计这样的按钮,使得每个按钮都只调整一个性质,这样调整电视图像就很容易,就可以把图像跳到正中。

 

训练神经网络时,使用early stopping虽然可以改善过拟合,但是该功能没有那么正交化,因为他同时影响训练集的拟合和改善开发集的表现这两件事情。

 

单一数字评估指标

在搭建的学习模型选择优化过程中,最好把多个评估指数按照某一个公式标准转换为单一的评估指标,这样处理的效果是可以大大加快训练和选择的效率。

 

满足和优化指标

有时形成单一数字评估指标不太现实,这时选择多个指标中其中的某一个指标或者两个指标,作为评估当前学习模型是一种不错的选择。

 

训练/开发/测试集划分

开发集和测试集最好来自同一分布,如果不在同一分布会导致最终测试的结果不理想,甚至导致前期的工作白白浪费。

设立开发集以及评估指标,可以定义你要瞄准的目标,通过在同一分布中设立开发集和测试集,就可以瞄准最终团队所期望的目标。而设立训练集的方式会影响你逼近那个目标有多快。

 

随着时间的推移,当您继续训练算法时,可能模型越来越大,数据越来越多,但是性能无法超过某个理论上限,这就是所谓的贝叶斯最优错误率(Bayes optimal error)。所以贝叶斯最优错误率一般认为是理论上可能达到的最优错误率,就是说没有任何办法设计出一个x到y的函数,让它能够超过一定的准确度。

 

减少可避免偏差方法

如果你想用尽一切办法减少可避免偏差,我建议试试这样的策略:比如使用规模更大的模型,0这样算法在训练集上的表现会更好,或者训练更久。使用更好的优化算法,比如说加入momentum或者RMSprop,或者使用更好的算法,比如Adam。你还可以试试寻找更好的新神经网络架构,或者说更好的超参数。这些手段包罗万有,你可以改变激活函数,改变层数或者隐藏单位数,虽然你这么做可能会让模型规模变大。或者试用其他模型,其他架构,如循环神经网络和卷积神经网络。


减少方差方法

另外当你发现方差是个问题时,你可以试用很多技巧,包括以下这些:你可以收集更多数据,因为收集更多数据去训练可以帮你更好地推广到系统看不到的开发集数据。你可以尝试正则化,包括L2正则化,dropout正则化或者我们在之前课程中提到的数据增强。同时你也可以试用不同的神经网络架构,超参数搜索,看看能不能帮助你,找到一个更适合你的问题的神经网络架构。


第二周 机器学习策略(2)

错误分析

进行错误分析,你应该找一组错误样本,可能在你的开发集里或者测试集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,你可能会得到启发,归纳出新的错误类型。


深度学习算法对随机误差很健壮,但对系统性的错误就没那么健壮了。


对于第一个系统,建议搭建快速而粗糙的实现,然后用它做偏差/方差分析,用它做错误分析,然后用分析结果确定下一步优先要做的方向。


把数据分成训练、开发和测试集,在长期能给你带来更好的系统性能。


处理数据不匹配问题

做错误分析,或者看看训练集,或者看看开发集,试图找出,试图了解这两个数据分布到底有什么不同,然后看看是否有办法收集更多看起来像开发集的数据作训练。(收集更多数据,可以采用人工数据合成的方法来进行。 但当你使用人工数据合成时,一定要谨慎,要记住你有可能从所有可能性的空间只选了很小一部分去模拟数据。)

技术上,为了避免对测试集过拟合,要做错误分析,应该人工去看开发集而不是测试集。


迁移学习

如果你想从任务A学习并迁移一些知识到任务B,那么当任务A和任务B都有同样的输入x时,迁移学习是有意义的。 当任务A的数据比任务B多得多时,迁移学习意义更大。


多任务学习

多任务学习能让你训练一个神经网络来执行许多任务,这可以给你更高的性能,比单独完成各个任务更高的性能。


端到端学习

端到端深度学习做的是,你训练一个巨大的神经网络,输入就是一段音频,输出直接是听写文本。

当你的数据集较小的时候,传统流水线方法其实效果也不错,通常做得更好。你需要大数据集才能让端到端方法真正发出耀眼光芒。

优点:

首先端到端学习真的只是让数据说话。

所需手工设计的组件更少, 不需要花太多时间去手工设计功能,手工设计这些中间表示方式。

缺点:

可能需要大量的数据。

排除了可能有用的手工设计组件, 精心设计的人工组件可能非常有用,但它们也有可能真的伤害到你的算法表现。

 

 

参考资料:

1.http://www.ai-start.com

posted @ 2018-11-04 15:53  舞动的心  阅读(287)  评论(2编辑  收藏  举报