各种梯度下降法及其特点
目录
全量梯度下降/批梯度下降(BGD, Batch Gradient Descent)
就是正常的梯度下降
\[\omega = \omega-\lambda\frac{\partial J}{\partial\omega}
\]
特点
- 每次更新都会朝着正确的方向进行, 最后收敛于极值点, 凸函数收敛于全局极值点, 非凸函数可能会收敛于局部极值点
- 缺点: 学习时间长, 消耗内存大
随机梯度下降(SGD, Stochastic Gradient Descent)
SGD每一轮只用一条随机选取的数据
特点
优点
- 每一次的学习时间很快
- 如果目标函数有盆地区域, SGD会使优化的方向从当前局部极小值点跳到另一个更好的局部最小值点
- 最终收敛于一个较好的极值店甚至是全局极值点
缺点
- 每次更新可能并不会按照正确的方向进行, 参数具有高方差, 从而导致损害函数剧烈波动
小批量梯度下降(Mini-Batch Gradient Descent)
小批量梯度下降指的是从所有数据中选择一部分进行迭代
特点
优点
- 收敛速度比SGD更快, 更稳定
- 在最优解附近跳动不会太大, 容易得到更好的解
Momentum梯度下降法(动量梯度下降)
\[v = \lambda\frac{\partial J}{\partial\omega} +v * momemtum\\
\omega = \omega-v\\
momemtum介于0和1之间
\]
特点
- 减少震荡, 大方向不变, 从而保证了效率和正确的收敛
Adagrad梯度下降法
\[dw = \frac{\partial J}{\partial\omega}\\
grad\_squared += dw^2\\
\omega = \omega - \lambda * \frac{dw}{\sqrt{grad\_squared}}
\]
特点
- 把每一维度的梯度的平方和记录下来,每次学习率都除以这个和
- 每一维度的学习率不一样,而且都在不断减小
- 在梯度大的维度,减小下降速度.在梯度小的维度, 加快下降速度
- 让学习率适应参数
- 无需手动调整学习率
- 缺点: 在训练过程中, 累加的和会持续增长, 这回导致学习率变小以至于最终变得无限小, 那么Adagrad将无法取得额外的信息
Adadelta
\[dw = \frac{\partial J}{\partial\omega}\\
grad\_squared = \alpha * grad\_squared + (1 - \alpha) * dw^2\\
\omega = \omega - \lambda * \frac{dw}{\sqrt{grad\_squared}}
\]
特点
- 在Adagrad的基础上进行扩展, 以处理Adagrad学习率单调递减的问题
Adam
特点
\[dw = \frac{\partial J}{\partial \omega}\\
moment_1 = \beta_1 * moment_1 + (1-\beta_1) * dw\\
moment_2 = \beta_2 * moment_2 + (1-\beta_2) * dw^2\\
bias_1 = moment_1 \div (1-\beta_1^t)\\
bias_2=moment_2 \div (1-\beta_2^t)\\
w -= \lambda * bias_1\div\sqrt{bisa_2}\\
bias为偏差
\]
- 结合了Momentum和RMSprop的特点
- 自适应学习率
\(beta_1=0.9, beta_2=0.999, \lambda=1e-3或5e-4\)是许多模型的一个很好的起点
本人博客: https://xiaoxiablogs.top