随机梯度下降SGD算法实现_什么是梯度下降法

随机梯度下降SGD算法实现_什么是梯度下降法随机梯度下降算法(Stochasticgradientdescent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。梯度下降:这个算法我在之前的博文LogisticRegression的数学推导过程以及Python实现中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

随机梯度下降算法(Stochastic gradient descent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。

梯度下降:

这个算法我在之前的博文Logistic Regression的数学推导过程以及Python实现 中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设在逻辑斯蒂回归中,预测函数为 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + … + {\theta _n}{x_n} hθ(x)=θ0+θ1x1+θ2x2+...+θnxn,我们用平方损失函数可以得到这个函数的损失函数: J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ) − y ) 2 J(\theta ) = \frac{1}{2}\sum\limits_{i = 1}^m {
{
{({h_\theta }(x) – y)}^2}}
J(θ)=21i=1m(hθ(x)y)2

我们的目标就是最小化函数的损失函数,我们就对每一个 θ i {\theta _i} θi 超参数求偏导,就可以得到当前这一轮的梯度,然后损失函数向梯度的反方向进行更新,不断这样进行迭代更新,就可以得到超参数的全局最优解。运用链式求导方法,数学过程可以表示成:
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) x j \frac{\partial }{
{\partial {\theta _j}}}J(\theta ) = \frac{\partial }{
{\partial {\theta _j}}}\frac{1}{2}{({h_\theta }(x) – y)^2} = ({h_\theta }(x) – y) \cdot \frac{\partial }{
{\partial {\theta _j}}}({h_\theta }(x) – y) \\= ({h_\theta }(x) – y) \cdot \frac{\partial }{
{\partial {\theta _j}}}(\sum\limits_{i = 0}^n {
{\theta _i}{x_i}} – y) = ({h_\theta }(x) – y){x_j}
θjJ(θ)=θj21(hθ(x)y)2=(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj

这是每一轮迭代的梯度,我们加上 l e a r n i n g learning learning r a t e rate rate α \alpha α,就可以得到完整的梯度下降的公式:
θ j : = θ j − α ( h θ ( x ) − y ) x j {\theta _j}: = {\theta _j} – \alpha ({h_\theta }(x) – y){x_j} θj:=θjα(hθ(x)y)xj
这个过程就像是在一个山脉中寻找一个最低的山谷,我们用学习率为 α \alpha α 的步长一步步地向山谷的大致方向移动,我们每一步只能向山谷的方向靠近,每一步都在进步,整个过程可以参考下面的动图(图片来自知乎-量子位):
GD
在图中可见,小球从山顶从不同的方向梯度滚下山,这就是梯度下降的过程。但是梯度下降算法每一步的更新都需要计算所有超参数的梯度,迭代速度必然会很慢,我们有没有比较快速的梯度下降算法呢,这里就可以用到我们的随机梯度下降算法
这个算法的流程就是在每次更新的时候使用一个样本进行梯度下降,所谓的随机二字,就是说我们可以随机用一个样本来表示所有的样本,来调整超参数 θ \theta θ ,算法的公式如下所示:
L o o p Loop Loop {

f o r for for i i i i n in in r a n g e ( m ) : range(m): range(m): {

θ j : = θ j  +  α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) {\theta _j}: = {\theta _j}{\text{ + }}\alpha ({y^{(i)}} – {h_\theta }({x^{(i)}}))x_j^{(i)} θj:=θj + α(y(i)hθ(x(i)))xj(i)
}
}
因为这个样本是随机的,所以每次迭代没有办法得到一个准确的梯度,这样一来虽然每一次迭代得到的损失函数不一定是朝着全局最优方向,但是大体的方向还是朝着全局最优解的方向靠近,直到最后,得到的结果通常就会在全局最优解的附近。这种算法相比普通的梯度下降算法,收敛的速度更快,所以在一般神经网络模型训练中,随机梯度下降算法 SGD 是一种非常常见的优化算法。
这就是大家在训练神经网络模型中常见的随机梯度下降SGD算法,希望可以帮助大家在理解优化算法上有所帮助,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195362.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sdio接口是什么_如何理解api接口

    sdio接口是什么_如何理解api接口运用SD卡第一步,认识SDIO接口做毕业设计需要用到大量的音频文件,一般的存储器满足不了存储要求,故选择SD卡作为存储器件。在这里记录一下自己的学习经历,学习一个新的IC,无非是要么根据时序图写出Read和Write函数,要么是根据通信总线和IC相关操作指令去完成Read和Write函数。只有能与对应IC“说话”,我们才能去开发它更多地可能性。这里以原子探索者为例,为大家介绍一下SD卡相关知识。…

    2022年10月3日
    5
  • django mysqlclient_MySQL无法安装

    django mysqlclient_MySQL无法安装mac系统安装mysqlclient时,会报错OSError:mysql_confignotfound解决办法在项目路径下输入以下内容PATH="$PATH":/usr

    2022年7月31日
    5
  • Java 的下载安装教程[通俗易懂]

    Java 的下载安装教程[通俗易懂]Java17的下载安装教程说明:本文介绍的是Windows下安装Java的方法。对于Linux下Java的安装,可见笔者的另一篇博客:在Linux操作系统中安装Java:https://blog.csdn.net/wangpaiblog/article/details/120093325笔者的安装环境:JDK17Windows10教育版安装Java就是安装JDK。Java有三大分支,这里选择的是JavaSE。关于

    2022年6月4日
    54
  • a4文档打印成a3双面_a4文档如何打印成a3

    a4文档打印成a3双面_a4文档如何打印成a3
    打印设置选择纸张为A3,页面设置时,选择拼页,然后按照4,1;2,3;顺序对文档进行拼页打印即可!不错的方法!要记住哦!

    2025年9月19日
    9
  • 汉字输入法演变

    汉字输入法演变摘自百度知道:https://zhidao.baidu.com/question/371212542972360284.html由于汉字有数以万计,电脑键盘不可能为每一个汉字而造一个按键。因此,人们需要替汉字编码(检索出汉字的代码),用数个键来输入一个汉字。中文输入法的发展过程,是“万码奔腾”的过程,在30年间出现了上千种编码方法。最早的汉字输入法,一般认为是从70年代末期或者8…

    2022年7月26日
    5
  • 怎么git 自己建的服务器_如何搭建自己的git服务器「建议收藏」

    怎么git 自己建的服务器_如何搭建自己的git服务器「建议收藏」前几天在服务器亲自搭建git服务器,之前只是我自学了git的知识,在网上找了很多资料,重装了很多次,都不知道怎么使用,最后自己研究了好几遍,终于把git服务器搭建起来了。但是不知道我这种方法对不对,分享出来,希望大家指正。安装git$yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develperl-dev…

    2022年9月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号