梯度下降优化算法简单总结
本篇博客简要总结关于梯度的一些优化方法[1]
常见的三种基于梯度的优化框架
batch gradient
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_function, data, params)
params = params - learning_rate * params_grad
一次迭代对所有的data进行更新
缺点
- 数据量大,有时候根本无法将所有data丢进内存
- 会对重复的sample做冗余计算
好处:
对于convex function 可以保证一定能到 global opt,non-convex 能到 local opt
sgd
一次只2针对一个sample
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_grad
缺点
- 震荡(每个样本更新带来的方差大)
好处
- online learning
- faster
mini-batch gradient
for i in range(nb_epochs):
np.random.shuffle(data)
for batch in get_batches(data, batch_size=50):
params_grad = evaluate_gradient(loss_function, batch, params)
params = params - learning_rate * params_grad
- 可以减小sgd带来的震荡问题(batch 会使样本方差变小,观察了多个样本)
- 高效计算,更容易并行,会让硬件的吞吐量变大
一些问题:
- 如何选择合适的learning rate
- learning rate调度?优化过程中希望动态的调整learning rate
- 每个参数都用同样的learning rate?-> 稀疏数据
- local opt or saddle point
梯度迭代策略
momentum
对过往的速度做一个移动平均,减少震荡
$$
\begin{align}
v_t &= \gamma v_{t-1} + \eta \nabla_\theta J(\theta)\\\
\theta &= \theta - v_t
\end{align}
$$
nesterov accelerate gradient
在 momentum 的基础上,更新梯度并非相对于 $\theta$, 而是 $\theta - \gamma v_{t-1}$ 因为根据之前的信息,你已经知道了 $\theta$ 要往前走了,那我们可以先往前走一步在算法梯度
$$ v_t = \gamma v_{t-1} + \eta \nabla_\theta J(\theta - \gamma v_{t-1}) $$
adagrad
前面两种迭代策略都是在调整步幅,后面的方法在解决参数学习率同质化的问题
这个方法希望对那些很少被更新的参数走一个大的步幅,而对于经常更新的走一个小的步幅
$$
\begin{align}
\theta_{t+1,i} &= \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,ii} + \epsilon}} g_{t,i}\\\
i, & is\ the\ ith\ param\ of\ \theta \\\
G_{t,ii}&=\sum_k^t g_{k,i}^2
\end{align}
$$
缺点 一个致命的问题是,$G_t$ 每次加的都是一个正数,因此随着迭代的进行,很容易变得非常大,导致learning rate 很小,以至于梯度不会被更新
adam
也是一种自适应的learning raate的方式
它估计了迭代过程中的梯度的均值和方差
$$
\begin{align}
m_t&=\beta_1 m_{t-1} + (1-\beta_1) g_t\\
v_t&=\beta_2 v_{t-1} + (1 - \beta_2) g_t^2\\\
\hat{m_t}&=\frac{m_t}{1 - \beta_1^t} \\
\hat{v_t}&=\frac{v_t}{1- \beta_2^t} \\\
\theta_t&= \theta_{t-1} - \frac{\eta}{\sqrt{\hat{v_t}} + \epsilon} \hat{m_t}
\end{align}
$$
其中作者发现又有的估计会有bias 所以除以了一个修正项
参考文献
版权声明
本作品为作者原创文章,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
作者: taotao
仅允许非商业转载,转载请保留此版权声明,并注明出处