Machine Learning Yearning - Andrew NG
链接(1~12章):
https://gallery.mailchimp.com/dc3a7ef4d750c0abfc19202a3/files/Machine_Learning_Yearning_V0.5_01.pdf
链接(第13章):
https://gallery.mailchimp.com/dc3a7ef4d750c0abfc19202a3/files/Machine_Learning_Yearning_V0.5_02.pdf
链接(第14章):
https://gallery.mailchimp.com/dc3a7ef4d750c0abfc19202a3/files/Machine_Learning_Yearning_V0.5_03.pdf
本文有转载:http://blog.csdn.net/u014380165/article/details/73611858
MLY--1. Why Machine Learning Strategy
这一章主要是抛砖引玉,指出在你的深度学习模型遇到问题的时候,你需要选择合适的方法解决,那么一般都有哪些方法呢?作者列举了以下几个:
1、获取更多的数据。
2、增加训练样本的多样性。
3、增加迭代次数。
4、试试更深、更宽的网络,比如增加层数,卷积核个数,参数等等。
5、试试更小的网络。
6、加正则项,比如L2正则项。
7、改变你的网络结构,比如激活方式,卷积核个数等。
个人感悟:增加训练样本的多样性可以这么理解:假如你要做猫狗分类,那么不同种类、不同姿势、睡觉的吃饭的等等的猫,各种各样都来一些,对提升你的算法效果是有帮助的。是否要增加迭代次数可以根据你的loss情况进行判断,当你的loss还没趋于平稳的时候,而且模型不太过拟合时,可以增加迭代次数。经验而言需要把你的全部数据跑几十遍才能达到不错的效果。更深的网络可以通过增加层数达到,比如像ResNet-152,当然原本简单增加层数的时候会遇到梯度衰减严重难以训练的情况,所以有了ResNet网络来解决这个问题。更宽的网络主要是通过增加某些层的卷积核的个数,一个卷积核相当于提取了一种特征,卷积核越多,特征越丰富,当然也增加了计算量。正则项一般是在过拟合的时候使用,简单讲就是限制权值的大小,L2是将权值的平方和加入到目标函数中,最后会使得权值趋于平滑,还有一种正则项是L1,可以使得权值趋于稀疏,即许多项为0。改变网络结构一般是比较细的调整,比如激活从ReLU改为pReLU,某层卷积核的大小的改变等等,一般小改的效果不会太明显。
MLY--2. How to use this book to help your team
MLY--3. Prerequisites and Notation
这一章也没什么重要内容,就是说如果你对机器学习不是很了解,可以看看这个链接:http://ml-class.org
MLY--4. Scale drives machine learning progress
其实深度学习(或者叫神经网络)在几十年前就有了,但是为什么现在才开始这么火?作者提到两个主要因素:
1、足够的数据
2、足够的计算能力
虽然现在数据有很多,但是传统的机器学习算法,比如逻辑回归,随着数据量的增加,其效果会遇到明显的瓶颈,此时如果采用不同深度的神经网络来训练,效果基本随着网络深度的增加而增加。如下图:
为什么会这样?因为在小数据上,可以人工构造特征,一般而言在小数据集上构造的特征还是十分有效的,但是随着数据集的增加,人工构造特征会愈加困难。
MLY--5. Your development and test sets
一般而言,在开展深度学习项目的时候,都会将数据分成三部分:训练集,验证集,测试集。你的模型在训练集上训练,然后用验证集来验证其效果,根据验证集的结果进行模型优化。作者强调你的测试集一定要和真实的数据有相同分布。
个人感悟:有些人可能觉得直接分成训练集和测试集就行了,为什么还要加一个验证集。其实应该这么理解,验证集也是一个测试集,用来测试你的模型的泛化能力。而测试集一般是指线上的环境。一般而言我们拿到数据,可以分成训练集和验证集,要随机分,这样训练集和验证集才能有相似的分布,然后就在这两个数据集上不断训练和优化我们的模型。最后将模型应用到实际场景中,这实际场景其实就是我们的测试集,因为实际场景中数据一般会比我们之前收集的数据更多样,所以模型表现不如线下验证集是正常的,因为你一开始拿到的数据不可能十全十美,这时需要将这些数据再加到我们的训练集和验证集中,再训练和优化,直到迭代到下一个版本。如此不断重复。总之记住:训练集,验证集,测试集要尽可能具有相同分布。
MLY--6. Your dev and test sets should come from the same distribution
跟第五章类似,强调验证集和测试集要有相同的分布,否则你可能在验证集上训练出一个非常好的模型,但是在测试集上表现非常差。
MLY--7. How large do the dev/test sets need to be?
这一章主要讲验证集和测试集需要多大比较合适?如果你的验证集只要100个样本,那么你的准确率提高的最小单位是1%,而不可能是0.1%,除非你的验证集增加到1000个样本。测试集样本也需要大到能足够表达你的模型效果才行,但是一般也不建议太大。
个人感悟:我觉得对于验证集和测试集的划分没有硬性规定,一般我将数据集分成训练:验证=9:1。
MLY--8. Establish a single-number evalution metric for your team to optimize
主要是讲模型的评价标准。最好能用一个评价标准(比如准确率)来判断模型优劣,而不是用多个标准(比如precision和recall)。主要是因为多个标准不好比较算法的效果。比如这个图:
其实如果要兼顾precision和recall,可以采用F1 score。
MLY--9. Optimizing and satisficing metrics
在权衡算法效果和速度的时候,除了可以用类似Accuracy-0.5*RunningTime的方式来比较,还可以采用其他方式,比如:假如可以接受的运行时间是100ms,那么就在这个限制条件下寻找准确率最高的算法。当然,如果你有多个限制条件,比如模型大小,运行时间,算法效果等,那可以在挨个满足条件的前提下找到最好的。还有一个例子是false positive rate和false negative rate,比如你希望在false positive rate为0的前提下降低你的false negative rate。
MLY--10. Having a dev set and metric speeds up iterations
当你拿到一个问题的时候,你要思考这个问题要用什么样的方式解决,然后把这个方式用代码表达出来,最后根据实验结果去思考之前的解决方式是否还有改进的地方,不断迭代。作者给出的这个图非常形象
MLY--11. When to change dev/test sets and metrics
作者提到在开始一个项目的时候,最好在一周内就能定义出验证集和测试集以及评价标准,而不是花太长的时间去制定和思考。后期当你发现你之前定义的验证集和测试集存在缺陷的时候,就应该尽快修改。这里有三个需要注意的点,如果你有这三种情况,那么就需要修改你的验证集了。
1、实际的数据分布和你验证集的数据分布不同。
2、在验证集上过拟合了。
3、你的评价标准和模型的优化方向不一致。比如你的一个图像分类算法,模型A的准确率比模型B的准确要高,但是有时候模型A容易漏判一些特殊图像,这是不能容忍的,而模型B不会,因此准确讲模型B的效果要比模型A要好。怎么改进呢?可以通过对漏判一些特殊图像做惩罚,而不仅仅用准确率来表征模型优劣。
MLY--12. Takeaways: Setting up development and test sets
1、你的验证集和测试集要尽可能从你实际应用场景的数据中获取。验证集和测试集不一定要跟你的训练数据有相同分布。(这点我认为最好还是训练集和验证集有相似的分布,如果训练数据和验证数据分布太大,你可能训练多次都难以得到好的效果,)
MLY--14. Evaluating multiple ideas in parallel during error analysis
将错误分类的图像在一张表格里面列出了,并comments可能的原因,然后分析原因,改进算法及预处理或者便签问题。可以通过分析挑选出各个优化类别的优先训练,各个击破来提高模型效果;
表格格式可以参考如下:
Machine Learning Yearning - Andrew NG的更多相关文章
- 学习笔记之Machine Learning by Andrew Ng | Stanford University | Coursera
Machine Learning by Andrew Ng | Stanford University | Coursera https://www.coursera.org/learn/machin ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 10) Large Scale Machine Learning & Application Example
本栏目来源于Andrew NG老师讲解的Machine Learning课程,主要介绍大规模机器学习以及其应用.包括随机梯度下降法.维批量梯度下降法.梯度下降法的收敛.在线学习.map reduce以 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 8) Clustering & Dimensionality Reduction
本周主要介绍了聚类算法和特征降维方法,聚类算法包括K-means的相关概念.优化目标.聚类中心等内容:特征降维包括降维的缘由.算法描述.压缩重建等内容.coursera上面Andrew NG的Mach ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 7) Support Vector Machines
本栏目内容来源于Andrew NG老师讲解的SVM部分,包括SVM的优化目标.最大判定边界.核函数.SVM使用方法.多分类问题等,Machine learning课程地址为:https://www.c ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&Recommender Systems
这部分内容来源于Andrew NG老师讲解的 machine learning课程,包括异常检测算法以及推荐系统设计.异常检测是一个非监督学习算法,用于发现系统中的异常数据.推荐系统在生活中也是随处可 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 4) Neural Networks Representation
Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 神经网络一直被认为是比较难懂的问题,NG将神经网络部分的课程分为了 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Linear Regression
Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 在Linear Regression部分出现了一些新的名词,这些名 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 3) Logistic Regression & Regularization
coursera上面Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 我曾经使用Logistic Regressio ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Introduction
最近学习了coursera上面Andrew NG的Machine learning课程,课程地址为:https://www.coursera.org/course/ml 在Introduction部分 ...
随机推荐
- mysql,给每一条数据的某一个字段生成不同的随机数
UPDATE t_article ta-- 利用LEFT JOIN的方式进行关联修改 LEFT JOIN(-- 先通过查询的方式给每一条数据生成对应的10-500之间随机数 SELECT articl ...
- RelativeLayout与LinearLayout的比较
转自:http://blog.csdn.net/onepiece2/article/details/26396287 RelativeLayout 是相对布局在页面上相对于页面坐标进行布局设置.比如可 ...
- dmesg 时间转换脚本
https://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable perl脚本 #!/usr/bin/perl use ...
- Linux-进程、进程组、作业、会话、控制终端详解
一.进程 传统上,Unix操作系统下运行的应用程序. 服务器以及其他程序都被称为进程,而Linux也继承了来自unix进程的概念.必须要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 ...
- 使用QQ互联登录应用
QQ登录集成插件简介 互联网应用越来越多,通常每一个应用都会要求用户注册登录,粗略估记一下,QQ,微博,微信,银行帐号.邮箱,招聘网站账户,淘宝帐号,支付宝帐号,公司OA帐号....粗略算一下,十几个 ...
- js闭包避免内存泄漏 减少内存使用 避免对象无法回收注意事项
闭包 如果闭包的作用域中保存着一个 HTML 元素,则该元素无法被销毁.(下面代码来自高程) 闭包是 JavaScript 开发的一个关键方面:匿名函数可以访问父级作用域的变量. function a ...
- emqtt-benchmark发送指令
- Android studio 使用心得(一)—android studio快速掌握快捷键
大家都是从eclipse转过来了,所以早就熟悉了eclipse那一套快捷键. File—>settings—>keymap–>选择eclipse就搞定 话是这么说,但是自动化提示的变 ...
- 消息成功失败回调demo
) )); try {// ListenableFuture<ResponseEntity<String>> future = restTemplate.postForEnti ...
- codility上的问题(34) Fluorum 2014
好久没写codility的题了.一来没时间,二来有的题目不太好分析.这个题比較有意思,我还没有给出很严格的证明.