2024-06-15-Optimizing Algorithms
Mini-batch Gradient descent
背景
当训练的数据集规模十分庞大时,即使我们采用向量化加速并利用并行计算,进行一次梯度下降的训练耗时依然很高。为了优化算法的执行速度,我们考虑将训练集划分为规模更小的 mini-batch 的集合,在遍历 mini-batch 的过程中实现梯度下降。
实施
- 分割
将初始样本集分割为若干个大小一定的 mini-batch,mini batch 的数量为 t
进而,我们有:
- 原理
相比与每次执行梯度下降遍历整个大的训练集,采用 mini-batch 的方法,我们每次计算一个 mini-batch 时即可实现一次梯度下降,这个过程也被称为一次 epoch.
梯度下降的步骤与之前在整个训练集上进行完全相同,只是将训练规模减小
分析
Noise in Cost Function Curve
由于我们每次梯度下降所采用的 mini-batch 不同,且单个 mini-batch 无法代表整个训练集的整体情况,所以当我们尝试绘制出 cost function 关于某个 mini-batch 的曲线时会发现曲线并非严格递减,而是会有很多噪声,但整体成递减趋势
参数选择: mini-batch 大小
- t = 1
即为完整的batch gradient descent,执行一次迭代所需的时间太长 - t = m
即为stochastic gradient descent,一方面由于每次执行的样本集太小导致噪声过大(最终结果也只会在最优值附近震荡),且丧失了向量化带来的并行计算优势 - 中间情况:
需选择合适的样本集大小来平衡噪声与训练速度
[!Important] 选择注意事项
- 如果训练集较小,直接采取 batch gradient descent 即可
- 考虑到电脑内存设置,mini-batch 大小最好为 2 的幂次,64-512 比较常见
- 选择的 mini-batch 要符合 CPU,GPU 内存设置
指数加权平均 (Exponentially weighted averages)
原理
核心参数:
将递推表达式展开为原始参数的表达式我们可以得到:
$$ v_{t} = \sum_{i=1}^{t}(1-\beta)\beta ^{t-i}\theta_{i} $$
代码中实现:
1
2
v = 0
v := beta*v + (1-beta)*theat_i
这种实现可以大量节省内存
对参数 理解
原理:
所以当我们考察前
[!Important]
的影响
- 随着
增大,指数加权平均更趋向于更多数据点的平均值,所绘制出的移动均线更平缓,但对剧烈变化的反应不灵敏 - 随着
减小,指数加权平均更趋向于更少数据点的平均值,所绘制出的移动均线噪声更多,但对剧烈变化的反应灵敏
偏差修正 (bias correction)
由于我们将加权指数均值的初始值设置为 0,所以这种估计方式在开始阶段存在比较大的误差(开始数据点权重很小),如果我们想要减少偏差,可以采用偏差修正的手段
优化算法
动量梯度下降 (Gradient Descent With Momentum)
核心想法
通过对 dW 与 db 采用指数加权平均的手段对其进行梯度下降时的更新,从而减缓梯度下降时在纵轴上的波动程度,进而可以考虑采取更大的学习率来加速梯度下降
物理直观:
通过计算指数平均保持之前梯度下降的速度,dw 则充当进行进一步梯度下降的加速度
实现
$$
\begin{align}
& v_{dw} = \beta v_{dw} + (1-\beta)dw
& v_{db} = \beta v_{db} + (1-\beta)dv
&dw = w -\alpha v_{dw}
&db = b - \alpha v_{db} \
\end{align} $$
RMSprop(Root Mean Square Prop)
核心想法
一方面减缓 Cost Function 在梯度下降时在某一个方向的振幅,从而能够使用更高学习率逼近最小值,同时保持另一个方向的学习速度不减
实现
注意下述平方操作均为 element-wise
注意
- 为了与动量梯度下降的
区分,我们常用 - 为了保持数值稳定性,我们常在
中加上小量 防止分母为 0
Adam 优化算法
Adaptive Moment Estimation
将动量均值下降与 RMSprop 相结合
实现
初始化:
结合动量均值下降与 RMSprop:
偏差修正:
将两者结合进行梯度下降:
超参数选取
需要在优化时调整 常取 0.9 常取 0.99 不重要
学习率衰减 (learning rate decay)
核心想法
实现
有几种常见的公式:
$$
\begin{align}
& \alpha = \frac{1}{1+decayrateepoch-num}\alpha_{0}
& \alpha = \frac{k}{\sqrt{ epoch-num }}*\alpha_{0}
& \alpha = 0.95^{epoch-num}\alpha_{0}
& discrete \ decay
\end{align}
$$
局部最优问题 (The problem of local optima)
人们常用低维空间中的直觉认为
Local Optima: