首页 > 代码库 > [NN] 随机VS批训练

[NN] 随机VS批训练

本文翻译节选自1998-Efficient BackProp, Yann LeCun et al..

4.1 随机VS批训练

每一次迭代, 传统训练方式都需要遍历所有数据集来计算平均梯度. 批训练也同样. 但你也可以使用随机训练的方法: 每次随机选择一个样本$\{Z^t, D^t\}$. 使用它来计算对应的梯度从而更新权值:

$W(t+1) = W(t) - \eta \frac{\partial E^t}{\partial W}$ (11).

这种估计梯度的方式是有噪的, 可能不会每次迭代权值都会精确地沿着正确的梯度下降. 恰恰是这种噪声使得随机训练有如下的优势:

1. 随机训练比批训练快

2. 随机训练结果更好

3. 随机训练可以用来追踪变化

随机训练在大数据集上往往比批训练更快. 为何? 我们举个简单的例子: 如果一个大小为1000的训练集恰好由10个完全一样的子集组成. 在1000个样本中求取的平均梯度和仅仅计算前100个的平均梯度是一样的. 因此批训练浪费了很多时间. 另一方面, 随机梯度将一个epoch视为在大小为100的训练集训练10次. 在实际中, 样本很少在数据集中出现超过1次, 但通常会有很多相似的特征聚合在一起. 在音素分类中, 所有音素/ae/的特征都会包含有相同的信息. 正是这种冗余, 导致了批训练的慢速.

随机训练的结果往往更好是由于权值更新中的噪声. 非线性网络通常有多个深度不同的局部最小值. 训练的目的是找到其中的一个. 批训练会找到权值初始值附近的一个最小值. 在随机训练中, 权值更新中的噪声会导致权值跳转到另一个, 并且有可能是更好的一个解. 这可以参考文献[15,30].

当建模的函数随时间变化时随机训练的方式会更有用. 一个常见的工业应用场景就是数据的分布随着时间的变化而变化(机器随使用时间而老化). 如果训练机不能检测到这种变化并随着它改变, 它就不能正确地学习到数据, 泛化误差也会变大. 使用批训练, 这些变化就无从检测, 学习到的结果也会很差. 使用随机训练, 如果恰当地进行处理的话(见4.7), 它就能够跟踪这些变化, 并产生较好的估计结果.

尽管随机训练有一些优势, 批训练也有如下的几个优点, 使得我们有时也不得不使用它:

1. 收敛条件已经被证明

2. 许多加速训练的方法仅对批训练有效

3. 权值动态特性和收敛速率的理论分析更加简单

这些优点使得我们可以忽略那些使随机训练更好的噪声. 这种噪声, 对于找到更好的局部最佳解非常关键, 同时也避免了最小值的全收敛(full convergence). 和收敛到确切的最小值不同, 收敛进程根据权值的波动而减慢(stall out). 波动的大小取决于随机更新的噪声幅度. 在局部最小值波动的方差和学习速率成比例[28,27,6]. 为了减小波动, 有两种方法: 一是减小学习速率; 二是使用一个自适应的批大小. 在[13,30,36,35]的理论中, 学习速率的最佳退火步骤的形式为:

$\eta \sim \frac{c}{t}$ (12)

 其中$t$是模式的数量, $c$是一个常量. 

另一种去除噪声的方法是使用"最小批", 即从一个最小的批尺寸开始, 随着训练进行不断增大这个尺寸. Moller使用过这种方法[25], Orr讨论过用这种方法解决线性问题[31]. 然而, 批尺寸增加的速率和批中放置的输入和学习速率一样非常难以确定. 在随机学习中的学习速率的大小可以参考最小批的大小.

注意, 移除数据中的噪声的问题可能在一些人看来并不重要, 因为噪声有助于泛化. 实际情况却是在噪声生效之前, 过训练已经发生.

批训练的另一个优点就是你可以使用二阶的方法来加速学习过程. 二阶方法通过估计梯度和误差平面的曲率来加速学习. 给定曲率, 你就可以大致估计实际最小值的位置.

尽管批更新的好处很多, 随机训练仍然被更多人青睐, 尤其是处理大数据集的时候, 因为它更快.

[NN] 随机VS批训练