Machine learning Year阅读笔记
Machine learning Year
01 Why Machine Learning Strategy
比如想开发一个图像分类的APP,识别图像中是否含有猫,通常可能有以下想法:
Your team has a lot of ideas, such as:
• Get more data: Collect more pictures of cats.
• Collect a more diverse training set. For example, pictures of cats in unusual positions; cats
with unusual coloration; pictures shot with a variety of camera settings; ….
• Train the algorithm longer, by running more gradient descent iterations.
• Try a bigger neural network, with more layers/hidden units/parameters.
Page 6 Machine Learning Yearning-Draft Andrew Ng• Try a smaller neural network.
• Try adding regularization (such as L2 regularization).
• Change the neural network architecture (activation function, number of hidden units, etc.)
• …
那么如何,快速准确的训却的选择合适的方向则是非常必要的,如果选择错误则可能浪费好几个月的时间,因此需要一个合适的策略来进行选择、开发。
02 How to use this book to help you team
阅读完这本书,应该可以为machine learning 项目选择合适的前进方向。
03 Prerequisites and Notation
这本书的阅读前提是对监督学习有所了解(主要是deep learning)
04 Scale drives machine learning progress
-
deep learning的思想已经很多年了,但是直到现在才获得突破性效果,具体有以下两个原因:
- 大量的数据
- 强大的计算能力(GPU)
-
基于图4.1与图4.2,想要获得一个good performance,需要 large NN + 大量数据
图4.1 small NN与传统方法随着数据量变化时候的效果提升
图4.2 不同规模的NN在数据量增加时候的性能提升
-
虽然很多资料表明结构很重要,且这里面确实有很多工作可以做,但是如今最可高的提升算法性能的方法仍然是
- 训练更大网络;
- 获取更多的数据
05 Your development and test sets
- 需要三类数据集: Training set, Dev set, Test set。其中,Dev set,Test set 决定了团队的努力方向,通常都会想各种方法使得算法在这两个数据集上取得很好的效果。也正因如此,应该保证这两个数据集尽可能的接近算法真实的应用场景!
06 Your dev and test sets should come from the same distribution
- 验证集需要和测试集来自同一分布,这是自然的。
- 当验证集和测试集来自同一分布时, 如果算法在验证集上表现好,而在测试集上表现不好,那么说明算法对验证集过拟合了。
- 如果验证集和测试集来自不同的分布(比如验证集是在美国拍的猫,测试集是在中国拍的猫),那么就会有多种可能
- 在验证集上过拟合了。
- 测试集的难度大于验证集。此时算法可能其实如预期一样做的很好,只是没反映出来,并且还有可能进一步提升。
- 测试集并不难,但是和验证集很不同,因此在验证集上好,但是在测试集上不好。此时再继续努力提升在验证集上的性能可能并没有什么意义。
- 作为具体的machine learning应用来说,还是尽量制作一个来自同一分布的数据集
07 How large do the dev/test sets need to be?
- 验证集、测试集需要够大,这样才能检测到微小的性能提升;但是不需要太大,太大就没有必要了。
08 Establish a single-number evaluation metric Establish a single-number evaluation metric
-
最好确立一个具有单一值评价指标。
比如,目标检测常用的precision和recall,同时关注这两个可能无法做出决定来判断模型的优劣,因为当改变检出阈值的时候通常一个会升高,另外一个会升高。但是通过F1 score )可能非常简单的判断出模型的优劣。但是这样做的前提是既重视precision又重视recall。如果你可能对某一个指标(precision/recall)有倾向性,那么可能需要额外注意一下那个指标。 -
综合多个评价指标
比如,猫的分类任务中,测试集有来源于不同国家的图像,可以分别在每个国家的数据集上进行测试,得到F1分数,然后取平均。
09 Optimizing and statisficing metrics
1.当涉及到多个评价指标,且无法融合时,确立一些指标的底线,然后去优化单个指标。
比如,猫的分类任务中,不仅要求分类的准确率,还要求执行的速度,很难合理的通过一个公式来合并这两个指标,但是可以先确定满足要求的最慢速度,然后再去优化准确率。
10 Having a dev set and metric speeds up iterations
- Maching Learning是一个高度的迭代过程,需要不断尝试idea,一定要有一个合理的dev/test 以及 符合实际业务需求的度量方式。
11 When to change dev/test sets and metrics
- dev/test 与主观感受不一致时(测试集表明分类器A好,人工测试表明分类器B好),需要改变二者。
- dev/test 与主观感受不一致的原因有以下:
- 实际场景的的数据分布于dev/test不同。比如,dev/test用的是成年猫,用户喜欢上传小奶猫。
- 过拟合了 。
- 度量算法的指标不符合实际业务需求。比如,分类器A的准确率确实高于B,但是A会偶尔把色情图像录入其中,这在实际中是不可接受的。
- 随着业务的发展改变 dev/test 是一种很常见的现象
12 Takeaways: Setting up development and test sets
- 选择正确的验证集,测试集;选择符合实际业务需求的度量方式;快速迭代,验证想法
13 Build your first system quickly, then iterate
- 刚开始建立一个AI系统的时候,一般很难以抉择如何下手。吴恩达给的建议是快速开始,然后改进迭代,思考合适的方向,不要想一开始就建立一个完美的系统。
14 Error analysis :Look at dev set examples to evaluate ideas
-
衡量改进的方向是否值得。当确定一个可以带来性能的提高的优化方向时,需要考虑
- 需要多大代价(时间/资源)来实现这个优化;
- 优化测试实现以后能够带来多大的效益;
比如,猫的分类器容易把一种类型的狗分类成猫,可以花两个月解决这一问题,可是你发现实际上这类狗的图像很少很少,哪怕把所有的这类狗的图像都给分类对,提升也不过是0.1%。此时,这个优化方向可能就不值得做。
15 Evaluating multiple ideas in parallel during error analysis
- 分析错误的最大原因。比如分类任务,专门分析被错误分类的图像,找到造成错误的最大原因,从此开始。
16 Cleaning up mislabeled dev and test set examples
- 我们的测试集/验证集中有的数据可能会被错误的标记,是否人工修正这些数据取决于这些数据对结果造成了多大的影响。比如发现了在dev中错误的预测结果中有1%是因为错误的标注,这时候修正这部分数据的效益可能并不大,可以不着急修正;如果发现错误的预测结果中有40%是因为错误的标注,这时候就需要着手去修正这部分的数据。
17 If you have a large dev set , split it into two subsets, only one of which you look at
- 比如有个数据量5000的dev set,预测的错误率为20%,也就是1000幅图。进行误差分析时,可能