机器学习算法和一般优化算法不同的一点是, 机器学习算法的目标函数通常可以分解为训练样本上的求和。 机器学习中的优化算法在计算参数的每一次更新时通常基于使用整个代价函数中仅仅一部分项来估计代价函数的期望值。
例如, 最大似然估计问题可以在对数空间中分解成每个样本的总和:
最大化这个总和等价于最大化训练集在经验分布上的期望:
优化算法用到的目标函数J 中的大多数性质也是训练集上的期望。例如,最常
用的性质是梯度:
准确计算这个期望的计算量非常大,因为需要在整个数据集上的每个样本上评估模型。在实践中,我们可以从数据集中随机采样少量的样本,然后计算这些样本上的平均值。
回想一下, n 个样本的均值的标准误差是 σ/√n,其中 σ 是样本值真实的标准差。分母 √n 表明使用更多样本来估计梯度的方法的回报是低于线性的。比较两个假想的梯度计算,一个基于 100 个样本,另一个基于 10, 000 个样本。后者的计算量多于前者的 100 倍,但却只降低了 10 倍的均值标准误差。如果能够快速计算出梯度估计值,而不是缓慢计算准确值,那么大多数优化算法会收敛地更快(就总的计算量而言,而不是指更新次数)。
另一个从小数目样本中获得梯度的统计估计的动机是训练集的冗余。在最坏的情况下, 训练集中所有的 m 个样本可以是彼此相同的拷贝。基于采样的梯度估计可以使用单个样本计算出正确的梯度,而比原来的做法少花了 m 倍时间。实践中,我们不太可能真的遇到这种最坏情况,但我们可能会发现大量样本都对梯度做出了非常相似的贡献。
使用整个训练集的优化算法被称为batch (
batch
) 或
确定性
(
deterministic
) 梯度算法,因为它们会同时在大
batch
中处理所有的样本。这个术语可能有点令人困惑,因为这个词 “
batch
’’ 也经常被用来描述
minibatch
随机梯度下降算法中用到的
minibatch
样本。通常,术语 “
batch
梯度下降’’ 指使用全部训练集,而术语"
batch
"单独出现时指一组样本。例如,我们普遍使用术语 “
batch
大小’’ 表示
minibatch
的大小。
每次只使用单个样本的优化算法有时被称为
随机
(
stochastic
) 或者
在线
(
online
)
算法。术语 “在线’’ 通常是指从连续产生样本的数据流中抽取样本的情况,而不是从一个固定大小的训练集中遍历多次采样的情况。
minibatch
大小通常由以下几个因素决定:
• 更大的batch会计算更精确的梯度估计,但是回报却是小于线性的。
• 极小batch通常难以充分利用多核架构。这促使我们使用一些绝对最小batch,低于这个值的小batch处理不会减少计算时间。