梯度下降常见算法 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 简介的主要内容,如果未能解决你的问题,请参考以下文章

批量梯度下降BGD随机梯度下降SGD和小批量梯度下降MBGD对比

SGD/BGD/MBGD使用python简单实现

常见优化器

深度学习中的优化算法之MBGD

Pytorch中常见的优化算法介绍

梯度下降法的三种形式BGDSGD以及MBGD