【梯度下降法】详解优化算法之梯度下降法(原理、实现)

【梯度下降法】详解优化算法之梯度下降法(原理、实现)梯度下降法 Gradientdesc 简称 GD 是一阶最优化算法 要使用梯度下降法找到一个函数的局部极小值 必须向函数上当前点对应梯度 或者是近似梯度 的反方向的规定步长距离点进行迭代搜索 如果相反地向梯度正方向迭代进行搜索 则会接近函数的局部极大值点 这个过程则被称为梯度上升法 梯度下降法是迭代法的一种 可以用于求解最小二乘问题 线性和非线性都可以 在求解机器学习算法的模型参数 即无约束优化问题时 梯度下降法和最小二乘法是最常采用的方法 在求解损失函数的最小值时 可以通过梯度下降法来迭代求解

  • 【梯度下降法】详解优化算法之梯度下降法(原理、实现)本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
  • 【梯度下降法】详解优化算法之梯度下降法(原理、实现)​个人主页:有梦想的程序星空
  • 【梯度下降法】详解优化算法之梯度下降法(原理、实现)​个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • 【梯度下降法】详解优化算法之梯度下降法(原理、实现)​如果文章对你有帮助,欢迎【梯度下降法】详解优化算法之梯度下降法(原理、实现)关注【梯度下降法】详解优化算法之梯度下降法(原理、实现)点赞【梯度下降法】详解优化算法之梯度下降法(原理、实现)收藏【梯度下降法】详解优化算法之梯度下降法(原理、实现)订阅。

1、梯度下降法的介绍

梯度下降法(Gradient descent,简称GD)是一阶最优化算法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点,这个过程则被称为梯度上升法。

梯度下降法是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降法和最小二乘法是最常采用的方法。在求解损失函数的最小值时,可以通过梯度下降法来迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种常用梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

【梯度下降法】详解优化算法之梯度下降法(原理、实现)

2、梯度下降法的原理

举例说明,将下山的人看作J(w),即表示目标函数,目的地是最低点。而中间如何到达最低点则是需要解决的问题。

【梯度下降法】详解优化算法之梯度下降法(原理、实现)

在当前位置求偏导,即梯度,正常的梯度方向类似于上山的方向,是使值函数增大的,下山最快需使J(w)最小,从负梯度求最小值,这就是梯度下降。梯度上升是直接求偏导,梯度下降则是梯度上升的负值。由于不知道怎么下山,于是需要走一步算一步,继续求解当前位置的偏导数。这样一步步的走下去,当走到了最低点,此时我们能得到一个近似最优解。

可以看出梯度下降有时得到的是局部最优解,如果损失函数是凸函数,梯度下降法得到的解就是全局最优解

【梯度下降法】详解优化算法之梯度下降法(原理、实现)

如果函数为一元函数,梯度就是该函数的导数:

\nabla f(x) = f'(x)

如果为二元函数,梯度定义为:

\nabla f({x_1},{x_2}) = \frac{​{\partial y}}{​{\partial {x_1}}}i + \frac{​{\partial y}}{​{\partial {x_2}}}j

梯度下降法公式:

{\theta _i} = {\theta _i} - \alpha \frac{​{\partial J({\theta _0},{\theta _1}, \cdots ,{\theta _n})}}{​{\partial {\theta _i}}}

求解步骤:

(1)确定当前位置的损失函数的梯度,对于{\theta _i},其梯度表达式为:

\frac{​{\partial J({\theta _0},{\theta _1}, \cdots ,{\theta _n})}}{​{\partial {\theta _i}}}

(2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即\alpha \frac{​{\partial J({\theta _0},{\theta _1}, \cdots ,{\theta _n})}}{​{\partial {\theta _i}}}

(3)确定是否所有的{\theta _i}梯度下降的距离都小于\varepsilon,如果小于\varepsilon则算法终止,当前所有的{\theta _i}

即为最终结果。否则进入第(4)步。

(4)更新所有的{\theta _i},更新表达式如下,更新完成后转入步骤(1):

{\theta _i} = {\theta _i} - \alpha \frac{​{\partial J({\theta _0},{\theta _1}, \cdots ,{\theta _n})}}{​{\partial {\theta _i}}}

【梯度下降法】详解优化算法之梯度下降法(原理、实现)

3、Python 代码实现

from sklearn.linear_model import SGDRegressor from sklearn.preprocessing import StandardScaler standardScaler = StandardScaler() X_train_sta = standardScaler.transform(X_train) X_test_sta = standardScaler.transform(X_test) sgd_reg = SGDRegressor(n_iter=) sgd_reg.fit(X_train_sta,y_train) sgd_reg.score(X_test_sta,y_test) #0.65798 

 4、几种常用的梯度下降法

 (1)全梯度下降算法(FG)

计算训练集所有样本误差,对其求和再取平均值作为目标函数。权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。因为在执行每次更新时,需要在整个数据集上计算所有的梯度,所以速度会很慢,同时,其在整个训练数据集上计算损失函数关于参数θ的梯度:

\theta = \theta - \eta \cdot {\nabla _\theta }J(\theta )

(2)随机梯度下降算法(SG)

由于FG每迭代更新一次权重都需要计算所有样本误差,而实际问题中经常有上亿的训练样本,故效率偏低,且容易陷入局部最优解,因此提出了随机梯度下降算法。其每轮计算的目标函数不再是全体样本误差,而仅是单个样本误差,即每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个设定的阈值。此过程简单,高效,通常可以较好地避免更新迭代收敛到局部最优解。其迭代形式为:

\theta = \theta - \eta \cdot {\nabla _\theta }J(\theta ;{x^{(i)}};{y^{(i)}})

其中,{x^{(i)}}表示一条训练样本的特征值,{y^{(i)}}表示一条训练样本的标签值。

但是由于,SG每次只使用一个样本迭代,若遇上噪声则容易陷入局部最优解。

(3)小批量梯度下降法

小批量梯度下降算法是FG和SG的折中方案,在一定程度上兼顾了以上两种方法的优点。每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重。被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理。特别的,若batch_size=1,则变成了SG;若batch_size=n,则变成了FG。其迭代形式为:

\theta = \theta - \eta \cdot {\nabla _\theta }J(\theta ;{x^{(i:i + n)}};{y^{(i:i + n)}})

关注微信公众号【有梦想的程序星空】,了解软件系统和人工智能算法领域的前沿知识,让我们一起学习、一起进步吧!

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

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

(0)
上一篇 2026年3月17日 下午4:48
下一篇 2026年3月17日 下午4:49


相关推荐

  • Web后端学习「建议收藏」

    Web后端学习「建议收藏」web后端一.cs/bs架构 CS/BS模式/客户端与浏览器模式 cs需要安装客户端,客户端向服务器请求,服务器响应数据返回。bs浏览器即可访问通过http协议3.web资源静态资源:人们浏览到的网页是一样的动态资源:不同人、时间可能都不一样4.web服务器将写好的web项目放入一个容器中,浏览器就通过这个容器来访问网页二.Tomcat1.TomCat安装与部署1.1TomCat目录结构 b…

    2022年6月16日
    36
  • kfold交叉验证k越大_内部交叉验证

    kfold交叉验证k越大_内部交叉验证交叉验证的原理放在后面,先看函数。设X是一个9*3的矩阵,即9个样本,3个特征,y是一个9维列向量,即9个标签。现在我要进行3折交叉验证。执行kFold=KFold(n_splits=3):其中KFold是一个类,n_split=3表示,当执行KFold的split函数后,数据集被分成三份,两份训练集和一份验证集。执行index=kFold.split(X=X):index是一个生成器…

    2026年2月2日
    6
  • autodock分子对接结果分析_分子对接公司

    autodock分子对接结果分析_分子对接公司分子对接#一、题目要求自己寻找一个受体+药物分子复合物体系(不同配体结合3-4个),然后拿复合物结构作为起始,做对接实验。软件自选,Dock,AutoDock…二、操作过程记录及结果1、软件下载与安装AutoDock下载安装进入AutoDock官网下载安装http://autodock.scripps.edu/downloads/autodock-r…

    2025年10月27日
    4
  • 大数据采集技术概述「建议收藏」

    大数据采集技术概述「建议收藏」大数据采集是指从传感器和智能设备、企业在线系统、企业离线系统、社交网络和互联网平台等获取数据的过程。数据包括RFID数据、传感器数据、用户行为数据、社交网络交互数据及移动互联网数据等各种类型的结构化、半结构化及非结构化的海量数据。不但数据源的种类多,数据的类型繁杂,数据量大,并且产生的速度快,传统的数据采集方法完全无法胜任。所以,大数据采集技术面临着许多技术挑战,一方面需要保证数据…

    2022年6月24日
    48
  • passive 属性详解

    passive 属性详解了解 passive 属性 这篇就够了 让页面滑动流畅得飞起的新特性 PassiveEvent

    2026年3月18日
    2
  • multipass的使用记录

    multipass的使用记录关于 multipass 官网 https multipass run 文档 https multipass run docs 介绍 UbuntuVMsond Multipasscan initlikeapub

    2026年3月18日
    2

发表回复

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

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