zoukankan      html  css  js  c++  java
  • 梯度下降法、随机梯度下降法、小批量梯度下降法

    本文以二维线性拟合为例,介绍批量梯度下降法、随机梯度下降法、小批量梯度下降法三种方法,求解拟合的线性模型参数。

    需要拟合的数据集是 $(X_1, y_1), (X_2, y_2)..., (X_n, y_n)$,其中$X^i=(x_1^i, x_2^i)$,表示2个特征,$y^i$是对应的回归值。

    拟合得到的函数是 $h_{ heta_1, heta_2}(X)$,尽可能使${h_{{ heta _1},{ heta _2}}}(X) approx y$。

    损失函数是$J( heta_1, heta_2) = sumlimits_{i = 1}^n {{{({h_{ heta_1, heta_2} }({x_i}) - {y_i})}^2}}$。

    损失函数是我们的性能评价指标,损失函数越小,代表我们得到函数$h_{ heta_1, heta_2}(X)$越能够拟合该数据集。

    由于负梯度(函数的导数即为梯度)的方向是局部下降最快的地方,所以为了最小化损失函数,我们沿着损失函数的负梯度方向来调整参数。

    1 批量梯度下降法(Batch Gradient Descent)

    批量梯度下降法每次更新参数$ heta$都要计算所有的样本数,求全局最优,所以训练开销很大,算法描述如下:

    1. 初始化$ heta_1, heta_2$,设置学习率$alpha$和终止条件$varepsilon$

    2. 计算$ heta_1, heta_2$的梯度(偏导数),判断是否都小于终止条件$varepsilon$,若小于输出参数$ heta_1, heta_2$,若不小于,重复第三步。

    3. 更新$ heta_1, heta_2$

    $ heta_1 = heta_1 - alpha(frac{partial }{{partial { heta _1}}}J({ heta _1},{ heta _2}))$

        $ = { heta _1} - alpha sumlimits_{i = 0}^n {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

    $ heta_2 =  heta_2 - alpha(frac{partial }{{partial { heta _2}}}J({ heta _1},{ heta _2}))$

        $ = { heta _2} - alpha sumlimits_{i = 0}^n {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_2}^i} $

    批量梯度法稳定地下降,速度较慢。

    2 随机梯度下降法(Stochastic Gradient Descent)

    随机梯度下降法原理上与批量梯度下降法类似,不同的是更新参数$ heta$时,不是计算所有的样本数,而是随机计算一个样本。

    加快了每次迭代的计算速度,但是收敛不稳定,更新公式如下:

    ${ heta _1} = { heta _1} - alpha ({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1^i}$

    随机梯度法快速下降,但同时也有更大幅度的波动。

    3 小批量梯度下降法(Mini-batch Gradient Descent)

    小批量梯度下降法是批量梯度下降法和随机梯度下降法的一种平衡,对于$n$个样本,每次随机用$m$个样本,进行批量梯度更新。

    是对速度和稳定性进行了折中,更新公式如下:

    ${ heta _1} = { heta _1} - alpha sumlimits_{i = 0}^x {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

     小批量梯度法较快速下降,有小幅波动。

    参考:

    1. http://sofasofa.io/tutorials/python_gradient_descent/index.php

  • 相关阅读:
    MySQL中 Data truncated for column 'xxx'解决方法
    JAVA中循环删除list中元素的方法总结
    Java 键盘输入数字(空格隔开) 将数字存入数组
    linux查看服务器并发连接数
    解决 httpclient 下 Address already in use: connect 的错误
    知识点--实际开发中软引用或弱引用的使用场景
    无序hashset与hashmap让其有序
    bool的值分别为0,1;那哪个代表true哪个代表false?
    jquery-ui autocomplete在模态框(model)中,出不来
    vue-Treeselect实现组织机构(员工)下拉树的功能
  • 原文地址:https://www.cnblogs.com/yijuncheng/p/9846315.html
Copyright © 2011-2022 走看看