理解梯度下降:从梯度到多步迭代更新

理解梯度下降:从梯度到多步迭代更新



文章目录


引言

梯度下降是一种常用的优化算法,用于寻找多元函数的最小值点。它基于一个简单的想法:沿着函数增长最快方向的反方向(即函数减少最快的方向)更新参数,逐步逼近函数的最小值。本文将详细介绍梯度的概念、梯度下降的基本原理以及一个使用梯度下降进行多步迭代更新的具体例子。


梯度

梯度是一个向量,它表示了多元函数在某一点上方向导数的最大值及其方向。梯度提供了函数增长最快的方向以及该方向上的增长率。

定义

对于一个多元函数 f ( x 1 , x 2 , ... , x n ) f(x_1, x_2, \ldots, x_n) f(x1,x2,...,xn),其在点 ( x 1 , x 2 , ... , x n ) (x_1, x_2, \ldots, x_n) (x1,x2,...,xn) 处的梯度是一个向量,定义为所有偏导数组成的向量:

∇ f ( x 1 , x 2 , ... , x n ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , ... , ∂ f ∂ x n ) \nabla f(x_1, x_2, \ldots, x_n) = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right) ∇f(x1,x2,...,xn)=(∂x1∂f,∂x2∂f,...,∂xn∂f)

每个分量 ∂ f ∂ x i \frac{\partial f}{\partial x_i} ∂xi∂f 表示函数 f f f 关于变量 x i x_i xi 的偏导数,即函数在 x i x_i xi 方向上的增长速率。

梯度的性质

  1. 方向:梯度指向函数增长最快的方向。
  2. 大小:梯度的模长给出了函数沿该方向的增长率。
  3. 正交性:梯度向量与函数的等值线(在二维情况下为等高线)正交。

梯度下降

梯度下降是一种常用的优化算法,用于寻找多元函数的最小值点。它的基本思想是沿着梯度的反方向(即函数减少最快的方向)更新参数,逐步逼近函数的最小值。

梯度下降步骤

  1. 初始化参数:选择初始参数值。
  2. 计算梯度:在当前参数值下计算目标函数的梯度。
  3. 更新参数:沿着梯度的反方向更新参数,更新公式如下:

θ : = θ − α ∇ f ( θ ) \theta := \theta - \alpha \nabla f(\theta) θ:=θ−α∇f(θ)

  • 其中 θ \theta θ 表示参数向量,
  • α \alpha α 是学习率,决定了每次更新步长的大小,
  • ∇ f ( θ ) \nabla f(\theta) ∇f(θ) 是目标函数 f f f 在当前参数 θ \theta θ 下的梯度。
  1. 重复步骤2和3,直到满足停止条件(例如梯度足够小或达到最大迭代次数)。

在梯度下降算法中,我们实际上利用梯度的每个分量来更新相应的参数。这意味着,对于每个参数 θ i \theta_i θi,我们都会利用对应的偏导数 ∂ f ∂ θ i \frac{\partial f}{\partial \theta_i} ∂θi∂f 来更新该参数。


示例:多步更新

假设我们有一个二元函数 f ( x , y ) = x 2 + 2 x y + y 2 f(x, y) = x^2 + 2xy + y^2 f(x,y)=x2+2xy+y2,并且我们想要使用梯度下降来找到它的最小值。

函数定义

我们的目标是最小化函数 f ( x , y ) = x 2 + 2 x y + y 2 f(x, y) = x^2 + 2xy + y^2 f(x,y)=x2+2xy+y2。

计算梯度

首先,我们需要计算函数 f ( x , y ) f(x, y) f(x,y) 的梯度:

∂ f ∂ x = 2 x + 2 y \frac{\partial f}{\partial x} = 2x + 2y ∂x∂f=2x+2y
∂ f ∂ y = 2 x + 2 y \frac{\partial f}{\partial y} = 2x + 2y ∂y∂f=2x+2y

因此,梯度向量为:

∇ f ( x , y ) = ( ∂ f ∂ x , ∂ f ∂ y ) = ( 2 x + 2 y , 2 x + 2 y ) \nabla f(x, y) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) = (2x + 2y, 2x + 2y) ∇f(x,y)=(∂x∂f,∂y∂f)=(2x+2y,2x+2y)

每个分量代表函数关于相应变量的偏导数,即增长速率。

初始化参数

假设我们选择初始点 ( x 0 , y 0 ) = ( 1 , 2 ) (x_0, y_0) = (1, 2) (x0,y0)=(1,2)。

选择学习率

为了简化起见,我们选择学习率 α = 0.1 \alpha = 0.1 α=0.1。

迭代更新

现在,我们来执行几轮梯度下降迭代:

  1. 第0步 :初始点 ( x 0 , y 0 ) = ( 1 , 2 ) (x_0, y_0) = (1, 2) (x0,y0)=(1,2)。

  2. 第1步:计算梯度并更新参数。

    • 梯度 ∇ f ( 1 , 2 ) = ( 2 ∗ 1 + 2 ∗ 2 , 2 ∗ 1 + 2 ∗ 2 ) = ( 6 , 6 ) \nabla f(1, 2) = (2*1 + 2*2, 2*1 + 2*2) = (6, 6) ∇f(1,2)=(2∗1+2∗2,2∗1+2∗2)=(6,6)。

    • 更新参数: ( x 1 , y 1 ) = ( 1 , 2 ) − 0.1 ⋅ ( 6 , 6 ) = ( 1 − 0.6 , 2 − 0.6 ) = ( 0.4 , 1.4 ) (x_1, y_1) = (1, 2) - 0.1 \cdot (6, 6) = (1 - 0.6, 2 - 0.6) = (0.4, 1.4) (x1,y1)=(1,2)−0.1⋅(6,6)=(1−0.6,2−0.6)=(0.4,1.4)。

    • 在这一步中,我们分别利用了 ∂ f ∂ x = 6 \frac{\partial f}{\partial x} = 6 ∂x∂f=6 和 ∂ f ∂ y = 6 \frac{\partial f}{\partial y} = 6 ∂y∂f=6 来更新参数 x x x 和 y y y。

  3. 第2步:再次计算梯度并更新参数。

    • 梯度 ∇ f ( 0.4 , 1.4 ) = ( 2 ∗ 0.4 + 2 ∗ 1.4 , 2 ∗ 0.4 + 2 ∗ 1.4 ) = ( 3.6 , 3.6 ) \nabla f(0.4, 1.4) = (2*0.4 + 2*1.4, 2*0.4 + 2*1.4) = (3.6, 3.6) ∇f(0.4,1.4)=(2∗0.4+2∗1.4,2∗0.4+2∗1.4)=(3.6,3.6)。

    • 更新参数: ( x 2 , y 2 ) = ( 0.4 , 1.4 ) − 0.1 ⋅ ( 3.6 , 3.6 ) = ( 0.4 − 0.36 , 1.4 − 0.36 ) = ( 0.04 , 1.04 ) (x_2, y_2) = (0.4, 1.4) - 0.1 \cdot (3.6, 3.6) = (0.4 - 0.36, 1.4 - 0.36) = (0.04, 1.04) (x2,y2)=(0.4,1.4)−0.1⋅(3.6,3.6)=(0.4−0.36,1.4−0.36)=(0.04,1.04)。

    • 在这一步中,我们同样利用了 ∂ f ∂ x = 3.6 \frac{\partial f}{\partial x} = 3.6 ∂x∂f=3.6 和 ∂ f ∂ y = 3.6 \frac{\partial f}{\partial y} = 3.6 ∂y∂f=3.6 来更新参数 x x x 和 y y y。

  4. 第3步:继续计算梯度并更新参数。

    • 梯度 ∇ f ( 0.04 , 1.04 ) = ( 2 ∗ 0.04 + 2 ∗ 1.04 , 2 ∗ 0.04 + 2 ∗ 1.04 ) = ( 2.16 , 2.16 ) \nabla f(0.04, 1.04) = (2*0.04 + 2*1.04, 2*0.04 + 2*1.04) = (2.16, 2.16) ∇f(0.04,1.04)=(2∗0.04+2∗1.04,2∗0.04+2∗1.04)=(2.16,2.16)。

    • 更新参数: ( x 3 , y 3 ) = ( 0.04 , 1.04 ) − 0.1 ⋅ ( 2.16 , 2.16 ) = ( 0.04 − 0.216 , 1.04 − 0.216 ) = ( − 0.176 , 0.824 ) (x_3, y_3) = (0.04, 1.04) - 0.1 \cdot (2.16, 2.16) = (0.04 - 0.216, 1.04 - 0.216) = (-0.176, 0.824) (x3,y3)=(0.04,1.04)−0.1⋅(2.16,2.16)=(0.04−0.216,1.04−0.216)=(−0.176,0.824)。

    • 在这一步中,我们利用了 ∂ f ∂ x = 2.16 \frac{\partial f}{\partial x} = 2.16 ∂x∂f=2.16 和 ∂ f ∂ y = 2.16 \frac{\partial f}{\partial y} = 2.16 ∂y∂f=2.16 来更新参数 x x x 和 y y y。

  5. 第4步:再次计算梯度并更新参数。

    • 梯度 ∇ f ( − 0.176 , 0.824 ) = ( 2 ∗ ( − 0.176 ) + 2 ∗ 0.824 , 2 ∗ ( − 0.176 ) + 2 ∗ 0.824 ) = ( 1.296 , 1.296 ) \nabla f(-0.176, 0.824) = (2*(-0.176) + 2*0.824, 2*(-0.176) + 2*0.824) = (1.296, 1.296) ∇f(−0.176,0.824)=(2∗(−0.176)+2∗0.824,2∗(−0.176)+2∗0.824)=(1.296,1.296)。

    • 更新参数: ( x 4 , y 4 ) = ( − 0.176 , 0.824 ) − 0.1 ⋅ ( 1.296 , 1.296 ) = ( − 0.176 − 0.1296 , 0.824 − 0.1296 ) = ( − 0.3056 , 0.6944 ) (x_4, y_4) = (-0.176, 0.824) - 0.1 \cdot (1.296, 1.296) = (-0.176 - 0.1296, 0.824 - 0.1296) = (-0.3056, 0.6944) (x4,y4)=(−0.176,0.824)−0.1⋅(1.296,1.296)=(−0.176−0.1296,0.824−0.1296)=(−0.3056,0.6944)。

    • 在这一步中,我们利用了 ∂ f ∂ x = 1.296 \frac{\partial f}{\partial x} = 1.296 ∂x∂f=1.296 和 ∂ f ∂ y = 1.296 \frac{\partial f}{\partial y} = 1.296 ∂y∂f=1.296 来更新参数 x x x 和 y y y。

结论

经过四次迭代后,我们得到了一个新的点 ( x 4 , y 4 ) = ( − 0.3056 , 0.6944 ) (x_4, y_4) = (-0.3056, 0.6944) (x4,y4)=(−0.3056,0.6944)。如果我们继续迭代,最终将会收敛到函数的最小值点,也就是 ( x , y ) = ( 0 , 0 ) (x, y) = (0, 0) (x,y)=(0,0)。

相关推荐
鸽芷咕13 分钟前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
FL162386312919 分钟前
AI健身体能测试之基于paddlehub实现引体向上计数个数统计
人工智能
黑客-雨22 分钟前
构建你的AI职业生涯:从基础知识到专业实践的路线图
人工智能·产品经理·ai大模型·ai产品经理·大模型学习·大模型入门·大模型教程
子午24 分钟前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
大耳朵爱学习42 分钟前
掌握Transformer之注意力为什么有效
人工智能·深度学习·自然语言处理·大模型·llm·transformer·大语言模型
TAICHIFEI43 分钟前
目标检测-数据集
人工智能·目标检测·目标跟踪
qq_15321452641 小时前
【2023工业异常检测文献】SimpleNet
图像处理·人工智能·深度学习·神经网络·机器学习·计算机视觉·视觉检测
洛阳泰山1 小时前
如何使用Chainlit让所有网站快速嵌入一个AI聊天助手Copilot
人工智能·ai·llm·copilot·网站·chainlit·copliot
儿创社ErChaungClub1 小时前
解锁编程新境界:GitHub Copilot 让效率翻倍
人工智能·算法
乙真仙人1 小时前
AIGC时代!AI的“iPhone时刻”与投资机遇
人工智能·aigc·iphone