梯度下降常见算法 BGD, SGD, MBGD 简介
Posted xuwanwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梯度下降常见算法 BGD, SGD, MBGD 简介相关的知识,希望对你有一定的参考价值。
参考文献
An overview of gradient descent optimization algorithms
梯度下降 GD(Gradient Descent)
-
梯度方向是函数变化率最大的方向,是函数增长最快的方向。
- 梯度的反方向是函数减少的最快方向。
-
ex: 从山上走到谷底
-
(x_j^{(i+1)} = x_j^{(i)}-eta cdot frac{partial f}{partial x_j}(x^{(i)})), 对(i>0). 表示第j个参数,第i次迭代。
- 其中(eta)为learning rate
-
常见变形有:BGD,SGD,MBGD等等
BGD(Batch Gradient Descent)
- 对整个训练集计算损失函数对参数的梯度:( heta = heta - eta cdot riangledown _{ heta}J( heta))
- 对于非凸函数得局部极小值和鞍点处,会停止更新,不会震荡。
- 缺点:训练集可能有相似的样本,整个训练集都算一次就会很慢且有冗余。
for i in range ( nb_epochs ):
params_grad = evaluate_gradient ( loss_function , data , params )
params = params - learning_rate * params_grad
SGD (Stochastic Gradient Descent)
- 一次只进行一次更新,没有冗余,比较快,可以新增样本。
- 缺点:
- 噪声比BGD多,不是每次迭代都向着整体最优的方向。
- 更新频繁,cost function可能严重震荡。
- 对于非凸函数,容易困在局部极小值或鞍点处,来回震荡。
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
MBCG(Mini-Batch Gradient Descent)
- 每次利用一小批的样本,利用n个样本进行计算。
- BCG和SGD每个epoch都会扫过整个数据集,而MBCG每个epoch只处理一个batch_size(一般50~256)的数据。
- 优点:降低参数更新时的方差,收敛更稳定。
- 缺点:
- 不能保证很好的收敛性。
- 对于非凸函数,容易困在局部极小值或鞍点处,来回震荡。
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
以上是关于梯度下降常见算法 BGD, SGD, MBGD 简介的主要内容,如果未能解决你的问题,请参考以下文章