假设你正在训练一个识别人脸的神经网络,目前的正确率达到了90%。接下来你想让正确率更高一些,你应该做什么呢?你可能的选择有以下:
1. 收集更多的数据。
2. 收集更多的反面数据。
3. 用梯度下降训练更长的时间。
4. 使用Adam算法来替代梯度下降算法。
5. 加大或者减少神经网络的规模,包括层数和神经元个数。
6. 使用dropout或者L2正则化。
7. 改变激励函数,从sigmoid改成ReLu。
8. 使用batch-norm来归一化神经网络。
9. …

我们如何在这众多的可能提高正确率方法里根据当时情况来做出正确的选择就是机器学习策略需要解决的问题。

什么是正交化

如果我们说两个指标是正交化的,那么就是说它们之间是独立的,互不影响的。我们举两个例子:

投影仪的调节

投影仪上一般都有调节宽度,高度,梯度,旋转的独立按钮,它们分别控制自己所属的图像属性,并且彼此正交,你改变宽度的时候,高度不会改变。同样,你改变梯度的时候,画面不会旋转。这几个控制属性,彼此是正交的。如果它们彼此之间不是正交的,你改变一个属性会影响另一个,那么将会很难调节。

汽车的控制

一个运动中的汽车,主要由三个属性来控制,方向,加速,减速。它分别对应方向盘,油门和刹车。这几个控制器它们也是正交的。彼此不影响的,这才让我们控制汽车变得方便和有的放矢。

机器学习策略的正交化

在谈机器学习策略的正交化之前,我们先要定义一些机器学习我们想要调节的属性,就行汽车的方向,加速和减速一样。
我们可以给验证机器学习表现定义以下4个指标:
1. 在训练集上的表现。
2. 在开发集上的表现。
3. 在测试集上的表现。
4. 在真实用户场景下的表现。

然后有了这4个指标,我们就可以把我们的调节策略放到这4个指标下边。并且按照上边的顺序依次验证效果,如果效果不佳则调整相对应的策略。这样就可以排除策略之间的相互影响。

大概的说,如果在训练集上表现不佳,那么我们的模型就是欠拟合,我们需要增加feature或者加大网络深度或者神经元个数。如果在开发集上表现不好,那么我们应该加入正则化,可以用L2正则化,或者dropout。如果测试集上表现不好,那么我们可能需要收集更多的数据。如果在真实用户场景下表现不好,我们可能需要重新设计我们的cost function。等等。

更详细的,我们定义一些问题:
1. 如何划分训练集,开发集合测试集。
2. 如何评价不同阶段的表现。
3. 如何把不同的策略放到不同的阶段。

这些问题我们在接下来的文章会涉及到。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: