zoukankan      html  css  js  c++  java
  • 梯度下降常见算法 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
    
  • 相关阅读:
    使用JS完成首页轮播图效果
    使用JS完成注册表单的数据校验
    网上商城------表单校验
    网上商城-----注册功能的实现
    网上商城-----环境配置
    博客还是搬到csdn吧~
    【【【超高仿】】】迅雷播放器教程 -- 总结(14)
    duilib进阶教程 -- 总结 (17)
    duilib进阶教程 -- 改进List控件 (16)
    duilib进阶教程 -- 设置资源路径 (15)
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/13197002.html
Copyright © 2011-2022 走看看