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

相关文章
相关标签/搜索