机器学习ML - Strategy
当我们在开发机器学习算法和训练时,我们发现自己的算法和训练模型达到了90%,但是没有办法继续提高算法的精确度。
下一步,我们该如何提高机器学习的算法精确度呢?
算法,数据,参数调优,还是该如何下手?
其实影响到算法的方面有很多,包括:
- 收集更多的数据(Collect More Data)
- 收集更多的交叉的数据集(Collect More diverse training set)
- 用更多的时间训练梯度下降算法(Train algorithm longer with gridient descent)
- 使用其他的梯度下降算法(Use Adam instead of gridient descent)
- 更大的神经网络(Bigger network)
- 更小的神经网路(Smaller network)
- 使用Dropout(try dropout)
- 添加L2 regularization(Add L2 regularization)
- 神经网络架构(network architechture)
- 激活函数(Activation function)
- 隐藏层的数量等等(Hidden unit)
- 调节超参数(adjust hyper-parameters)
下面,我们就开始介绍机器学习的算法(一)
- 正交化(Orthogonalization)
在理解正交化之前,我们先来举个例子
[图片上传失败...(image-4547a7-1521259894222)]
我们在修理电视出现的故障时,经常会使用电视机的调节按钮,将调节电视机显示屏幕的宽窄,高低,梯度等等。
- 第一个按钮,调整电视机的宽窄
- 第二个按钮,调整电视机的高低
- 第三个按钮,调整电视机的梯度
这样的话,我们就能很快的将电视机的显示调整完毕。
同样,对于汽车方向盘(来举例),我们可以调整X轴和Y轴的方向,来调整汽车前进的方向。
[图片上传失败...(image-d69faa-1521259894222)]
我们在机器学习的过程中,我们期望模型在Train,Dev,Test,Real World都能够正常运行,因此我们就需要进行以下四步操作。
Orthogonalization or orthogonality is a system design property that assures that modifying an instruction or component of an algorithm will not create or propagate side effects to other components of the system. It becomes easier to verify the algorithms independently from one another, it reduces testing and development time.
正交化是一种设计方法,它能够保证在修改一个指令/组建时,不会对其他的系统产生影响。这样就方便我们独立的去调节机器学习的算法,以便节省我们的时间。
When a supervised learning system is design, these are the 4 assumptions that need 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 if not set correctly or the cost function is not evaluating the right thing.
- 测试样本集可能没有设定好,或者损失函数没有评估好。
使用单一的指标来衡量评估效果
我们为什么使用单一的指标来衡量呢,其实很简单,如果我们使用多个指标来衡量一个算法的效果,很有可能导致我们根本无法从多个指标中选择出那个指标才是最好的。如果我们将多个指标合并,最终成为一个指标,那么我们就可以很直观的选择出最好的算法。F1 score就是我们需要选择的唯一指标。
[图片上传失败...(image-5085a6-1521259894222)]
Precision:机器识别后,将所有识别为1(Yes)的数据中,正确识别的概率。
Recall: 将所有正确的数据喂给算法,它能够正确识别的概率。
F1:Precision和Racall指标的平均值。我们使用以下公式。
满足和优化指标(Optimizing and satisficing)
我们在使用算法的同时,还需要注意一个指标,就是他的时间效率。也就是说,识别出一张图片需要的时间。
[图片上传失败...(image-7c9acc-1521259894222)]
Optimizing(优化指标):就是我们的算法最优的那一个指标。
Satisficting(满足指标):就是算法的运算速度指标。
设定训练,开发,测试集合(Setting up training,development,testing dataset)
训练,开发和测试集合的选择非常重要,我们在选择这些集合时,需要将他们的数据分布尽量的合理。避免我们训练了很久其中一个集合,然后,我们发现运用在实际生产中时,他的效果很差。
在传统的机器学习算法中,我们经常使用70-30,60-20-20来设定Train,Dev,Test的大小,但是在大数据时间,由于我们的计算机性能提升,大量的数据和算法,因此我们会将比例调整为98-1-1.这样,我们就能更好的训练模型。
但是,我们有时候,需要修改我们的训练,开发和测试集合。
举个例子:
我们去看到算法A和B,是对猫的识别。
[图片上传失败...(image-44f1ab-1521259894222)]
看这样图,我们会认识算法A是好的。
但是,我们发现,算法A经常把色*情图片提取出来,而算法B不会。
这样的话,我们就需要选择B。那么我们该如何评估呢?
我们设定错误函数
贝叶斯最优误差(Bayes Optimal error)
就是人类识别的最优误差,这个值很多时候会很小。
好的,让我们来总结一下:
[图片上传失败...(image-52cef7-1521259894222)]