梯度下降常见算法 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
原文地址:https://www.cnblogs.com/xuwanwei/p/13197002.html