机器学习之优化算法
一、SGD
算法SGD在第 k 个训练迭代的更新:
Require: 学习率 ϵk
Require: 初始参数 θ
while 停止准则未满足 do
从训练集中采包含 m 个样本{x(1), . . . , x(m)} 的小批量,其中 x(i) 对应目标为y(i)。
计算梯度估计:gˆ ← + 1/m ∇θ ∑i L(f(x(i); θ), y(i))
应用更新:θ ← θ ϵgˆ
end while
SGD 算法中的一个关键参数是学习率。在实践中,需要随着时间的推移逐渐降低学习率,因此我们将第 k 步迭代的学习率记作 ϵk。
一般会线性衰减学习率直到第 τ 次迭代:
ϵk = (1-α)ϵ0 + αϵτ
其中 α = kτ 。在 τ 步迭代之后,一般使 ϵ 保持常数。
学习率可通过试验和误差来选取,通常最好的选择方法是监测目标函数值随时间变化的学习曲线。使用线性策略时,需要选择的参数为 ϵ0,ϵτ,τ。通常 τ 被设为需要反复遍历训练集几百次的迭代次数。通常 ϵτ 应设为大约 ϵ0 的 1%。
主要问题是如何设置 ϵ0。若 ϵ0 太大,学习曲线将会剧烈振荡,代价函数值通常会明显增加。温和的振荡是良好的,容易在训练随机代价函数(例如使用 Dropout 的代价函数)时出现。如果学习率太小,那么学习过程会很缓慢。如果初始学习率太低,那么学习可能会卡在一个相当高的代价值。通常,就总训练时间和最终代价值而言,最优初始学习率会高于大约迭代 100 次左右后达到最佳效果的学习率。因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不能太大导致严重的震荡。
SGD 及相关的小批量亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖训练样本数目的多寡。即使训练样本数目非常大时,它们也能收敛。
二、动量
动量方法旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。
从形式上看,动量算法引入了变量 v 充当速度角色——它代表参数在参数空间移动的方向和速率。速度被设为负梯度的指数衰减平均。
算法 使用动量的SGD:
Require: 学习率 ϵ,动量参数 α
Require: 初始参数 θ,初始速度 v
while 没有达到停止准则 do
从训练集中采包含 m 个样本 {x(1), . . . , x(m)} 的小批量,对应目标为 y(i)。
计算梯度估计:g ← 1/m ∇θ ∑i L(f(x(i); θ), y(i))
计算速度更新:v ← αv ϵg
应用更新:θ ← θ + v
end while
步长取决于梯度序列的大小和排列。当许多连续的梯度指向相同的方向时,步长最大。如果动量算法总是观测到梯度 g,那么它会在方向 g 上不停加速,直到达到最终速度。
三、Nesterov 动量
Nesterov 动量中,梯度计算在施加当前速度之后。因此,Nesterov 动量可以解释为往标准动量方法中添加了一个校正因子。
算法 使用Nesterov 动量的SGD
Require: 学习率 ϵ,动量参数 α
Require: 初始参数 θ,初始速度 v
while 没有达到停止准则 do
从训练集中采包含 m 个样本 {x(1), . . . , x(m)} 的小批量,对应目标为 y(i)。
应用临时更新:θ˜ ← θ + αv
计算梯度(在临时点):g ← 1/m ∇θ˜∑i L(f(x(i); θ˜), y(i))
计算速度更新:v ← αv-ϵg
应用更新:θ ← θ + v
end while
在随机梯度的情况下,Nesterov动量没有改进收敛率。
四、AdaGrad
AdaGrad 算法,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根 。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上
有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。
AdaGrad 算法:
五、RMSProp
RMSProp 算法 修改 AdaGrad 以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。
RMSProp 算法:
使用 Nesterov 动量的 RMSProp 算法:
六、 Adam
首先,在 Adam 中,动量直接并入了梯度一阶矩(指数加权)的估计。 其次,Adam 包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计。 RMSProp 也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像 Adam,RMSProp 二阶矩估计可能在训练初期有很高的偏置。
Adam 通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。
Adam 算法: