所谓Machine Learning Strategy就是如何调整学习的策略,来达到更好的准确率。Andrew提到这一门课(Structuring Machine Learning Projects)的两周的内容,通常是一些机器学习项目的经验之谈,在学校的课程中通常不会有提及。
Orthogonalization
Orthogonalization,译作正交化,类似coding时候的解耦(decouple)。通过一些正交化的调整策略来修正相关条件下的模型准确率。一般有下面4中策略:
When a supervised learning system is design, these are the 4 assumptions that needs to be true and orthogonal.
- Fit training set well in cost function
- If it doesn’t fit well, the use of a bigger neural network or switching to a better optimization algorithm might help.
- Fit development set well on cost function
- If it doesn’t fit well, regularization or using bigger training set might help.
- Fit test set well on cost function
- If it doesn’t fit well, the use of a bigger development set might help
- Performs well in real world
- If it doesn’t perform well, the development test set is not set correctly or the cost function is not evaluating the right thing.
Andrew也提到之前提到的一种regularization的方法——early stopping,就不是一种正交化的调整策略。他同时想做好第1和第2点。
Setting up your goal
做一个机器学习的项目,通常是下面这个过程,Idea->Code->Experiment->Idea,不断的迭代得到最终优化的模型。
Single real number evaluation metric
如果针对一个测试有两个指数型指标,这就很难取舍。这会降低上面这个循环的效率,甚至最终的模型准确度。所以这里才会提出单一评价标准。例如下面的例子:
Precision: Of all the images we predicted y=1, what fraction of it have cats?
Recall: Of all the images that actually have cats, what fraction of it did we correctly identifying have cats?
这两个指标当然都是越大越好,那如何评定Classifier A和B?
之前的一篇博文Machine Learning (2) - Neural Network中关于skewed data的一节中,有提到F1-score。这里就是通过F1-score来整合precision和recall来得到一个统一的标准。
F1-score
这个算法又称为”Harmonic Mean”。
计算Precision和Recall的”均值“只是一个例子,通常我们要自己思考出如何能产生一个易于评估的单一指数标准。
Satisficing and Optimizing
这里指,检验试验结果的指标,通常可以分成两类,即Satisficing和Optimizing。
Satisficing类指标指的是只要达到一定的阈值,再优化也不太会影响试验结果的优劣。例如,运行时间达到100ms即可,80ms和90ms的运行时间差别,并不能带来什么改善。
Optimizing类指标指的就是一些数值类的指标,例如准确率,一点点改善都会影响试验结果的评判。
下面是一个具体的例子:
Train/dev/test distributions
在做机器学习项目时,通常需要对样本数据进行分割。而不是将所有的样本都用于训练。上一章提到要对试验结果进行评估,而这个评估就是在dev或者test set上进行的。所以有一个合适的dev/test set对模型的迭代以及项目的推进,有着至关重要的影响。
- Training set: 迭代得到各个模型参数(W, b, , )
- Development (dev) set: 在一轮循环中验证training结果的正确性,以便下一轮调整模型(包括超参数的调整,是否采用正则化,网络结构的调整等等)
- Test set: 在所有循环结束后,来验证最终模型的正确性。
如何分割?
在样本数据不太多(数千数万的级别)的时候,一般如下分割:
Guide Line
同一分布
分割样本数据的时候必须保证training,dev,test set均来自于同一种分布。
反映最终应用场景
dev/test set必须反应最终模型的应用场景。
例如cat detector,训练,测试都是采用网络上清晰度很高的图片,但使用时发现用户上传的很多都是清晰度不高的照片,那识别率肯定是不能令人满意的。这就是dev/test set和最终应用不符。改进的办法就是,要么可以多采用一些真实的用户数据,或者采用data augmentation来人工添加噪声,让原本清晰的图片变成模糊的。总而言之,就是改进训练集和测试开发集再进行训练。
如果有特别不想要的指标怎么办?
比如cat detector会误将色情图片识别为猫咪,这个是不可接受的,不管模型精度有多高。解决方法就是修改metric:
Error:
if is non-porn, if is porn.
最终的优化方向
为什么以人类表现作为分水岭?
因为人类在自然感知(Natural Perception)方面已经很擅长了。而在模型未达到人类表现的时候,你可以通过各种工具来改善你的学习模型。但当模型达到或者超过人类表现的时候,这些工具就失效了。因为这些工具也是通过人类感知来制造的。
什么是Avoidable Bias?
- 通常用人类表现来近似贝叶斯最优误差。
- If | human-level error - training error | | training error - development error |, focus on bias (avoidable bias) reduction technique
- If | human-level error - training error | | training error - development error |, focus on variance reduction technique
超过人类表现后怎么办?
答案是,没办法或者没有好的办法。因为超过人类表现,所有的改善模型表现的工具可能都会失效。所以要想前进一步都很困难。Andrew在教程中也没有给出明确的方向应该怎么做。我们通常用人类表现来近似贝叶斯最佳误差。当模型表现已经超过一组人类的推断准确率的时候,就没办法再用原先的值来近似贝叶斯误差了。
总结