梯度下降法中,为什么在负梯度方向函数值下降最快

以下内容整理于高数课本以及李宏毅老师的视频:

我们想要利用梯度下降来求得损失函数的最小值。也就是每次我们更新参数,当前的损失函数总比上一次要小。

假设只有两个参数θ1和θ2,上图是损失函数的等值线,红色点是初始值当前的状态。以红色点为圆心画圆,在这个圆的范围内,我们想要找到一个损失函数更小的值。如下图:

这样我们就更新了一次参数,损失函数值变小了。再进行相同的操作,以当前点为圆心,画圆,再找一个圆内范围的最小值。如下图:

这样我们进行了第二次参数更新,损失函数又变小了。接着我们再进行同样的操作,就会很容易找到损失函数最小值附近的点。

总体思想是这样,但是具体要怎么操作呢,在一个圆的范围内,哪个方向的点才是我们想要的值最小的点呢?首先从泰勒公式说起:

一元泰勒公式。

二元泰勒公式。

泰勒公式是用来利用一个函数在某点的信息描述该点附近点的取值信息。

前面假设只有两个参数θ1和θ2,假设当前参数的取值点为(a, b),如上图,将损失函数L在(a, b)点一阶展开,u表示损失函数对θ1的偏导,v表示损失函数对θ2的偏导,也就是说向量(u, v)即是现在的梯度方向。损失函数L在(a,b)附近的取值信息可由上图最下面的式子表示。我们想要的就是在这个附近取一个最小值。

如上图,做法是以当前点(a, b)为圆心,半径为d(假设这个d足够小)画圆,那么该点的附近范围就是满足这样的参数取值(θ1,θ2), 且(θ1 - a) ^2 + (θ2 - b)^2 <= d^2。也就是在这个小圆圈范围内。

将θ1 - a 记作Δθ1, θ2 - b记作Δθ2, 我们的目标就是找到最优的θ1和θ2,使得上面的损失函数L最小。上图中的s是常数,不用管, 也就是让 u * Δθ1 + v * Δθ2最小,它可以看成是两个向量的内积,即向量(u, v)和向量(Δθ1, Δθ2)最小。这里先说出结论,最小的情况是(Δθ1, Δθ2)与(u, v)反向,下面详细解释。

要想u * Δθ1 + v * Δθ2最小,也就是两个向量的内积最小。考虑内积的直观意义:两个向量的内积等于向量1在向量2上面的投影乘以向量2的长度。投影可正可负,当两向量夹角大于90度时,投影是负的,投影可以表示为正负号乘以投影的长度

,比如左图v在u上面的投影就等于红色线段的长度。要想(Δθ1, Δθ2)与(u, v)内积最小(这里的u,v和上面那个小例子中的u, v没关系,是上面图中圆圈中的(u,v)向量),因为(u,v)的长度是一定的,那么只需要(Δθ1, Δθ2)在(u,v)上的投影最小就可以了。投影最小,首先保证是负号,也就是二者向量夹角大于90度,接下来只要投影长度最大就行,因为有负号。(Δθ1, Δθ2)的投影长度是小于等于(Δθ1, Δθ2)向量的长度的,像上面那个小例子中的v。要求投影长度最大,那么肯定是与(u,v)反向的时候最大,这时候投影长度就等于(Δθ1, Δθ2)向量的长度。如下图所示:

此时我们可以得出这样的结论:当向量(Δθ1, Δθ2)是与(u,v)反向的时候,损失函数L取最小值。上图中的就像是一个步长,它可以伸展到圆的边界上去。前面说(u, v)是梯度方向,那么(Δθ1, Δθ2)则是负梯度方向。又因为Δθ1 = θ1 - a,Δθ2 = θ2 - b,可以推出上图中的梯度下降公式。

这种方法要求我们画的圆圈范围足够小,从上可知(步长,学习率)的大小是和圆圈半径成正比的,所以也要足够小,理论上,无穷小时,上面式子才成立。至此我们可以得出结论,每一次参数更新,沿着负梯度方向,损失函数值下降最快。

 

下面来自高数课本:

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 最速梯度下降法是一种优化算法,用于在函数梯度方向上寻找函数的最小。在Matlab,可以使用以下代码实现最速梯度下降法: ```matlab function [x, fval] = steepestDescent(f, x0, maxiter, tol) % f为目标函数,x0为初始点,maxiter为最大迭代次数,tol为容差 x = x0; alpha = 1e-3; % 步长 for k = 1 : maxiter g = gradient(f, x); % 计算梯度 if norm(g) < tol % 判断是否满足容差 break; end d = -g; % 计算方向 x = x + alpha * d; % 更新x end fval = f(x); % 计算最小 ``` 其,`gradient`函数用于计算函数梯度,`norm`函数用于计算向量的二范数。使用时,需要将目标函数`f`以函数句柄的形式传入,例如: ```matlab f = @(x) x(1)^2 + 2*x(2)^2; x0 = [1, 1]; maxiter = 1000; tol = 1e-6; [x, fval] = steepestDescent(f, x0, maxiter, tol); ``` ### 回答2: 最速梯度下降法(Steepest Descent Method)是一种优化算法,用于求解无约束优化问题。该方法基于梯度反向方向进行迭代,以寻找函数的最小点。 在Matlab,可以使用以下步骤实现最速梯度下降法: 1. 定义目标函数:首先,根据具体问题定义目标函数。例如,假设需要优化的函数为f(x),其x为自变量。 2. 初始化参数:定义初始x0,以及其他必要的参数,如学习率alpha和停止准则。 3. 计算梯度:计算目标函数f(x)关于自变量x的梯度。可以使用matlab的gradient函数或自定义函数。 4. 梯度下降迭代:重复下述步骤,直到满足停止准则: a. 计算下降方向:将梯度数作为下降方向,即delta_x = -gradient。 b. 更新变量:根据学习率alpha和下降方向delta_x,更新自变量x:x = x + alpha * delta_x。 c. 重新计算梯度:计算更新后的自变量x的梯度。 5. 输出结果:迭代过程,根据需要记录迭代次数、目标函数和自变量。 最速梯度下降法的优点是简单易实现,缺点是可能会陷入局部最小点。为了避免这个问题,可以结合其他优化算法进行改进,如牛顿法或共轭梯度法。 在使用最速梯度下降法时,需要根据具体问题进行参数的选择和调优。此外,还可考虑加入正则化项、设置合适的学习率衰减策略等,以提高优化效果和迭代速度。 ### 回答3: 最速梯度下降法(also known as 最速下降法、最陡下降法、Steepest Descent Method)是一种最基本的迭代优化算法,用于求解无约束优化问题。该方法通过在每一步选择在当前点的梯度方向上进行迭代,来逐步逼近最优解。 在MATLAB,可以使用以下步骤实现最速梯度下降法: 1. 初始化变量:设定初始点x0、学习率α(也称为步长)、迭代停止条件等。 2. 计算梯度:使用目标函数梯度函数gradient()计算当前点的梯度梯度表示函数在某一点的变化率,并指向函数增长最快方向。 3. 更新变量:使用以下公式更新变量x:x = x - α * gradient。其,α是学习率,用于控制每一步迭代更新的大小。通常需要选择合适的学习率,以保证算法能够快速收敛且不会超调。 4. 判断停止条件:在每一步迭代后,可以通过检查变量的新旧之间的差异、函数以及梯度的范数等来判断是否满足停止条件。常见的停止条件包括函数的相对误差小于某一阈梯度的范数小于某一阈、达到一定的迭代次数等。 5. 重复步骤2-4,直到满足停止条件。 需要注意的是,最速梯度下降法在求解大规模问题时可能会收敛速度较慢,容易陷入局部最优解。因此,在实际应用,可以结合其他方法进行改进,例如采用合适的学习率调度策略、引入二次方向等。 总之,最速梯度下降法是一种简单直观的优化算法,可用于求解无约束优化问题。在MATLAB,可以通过设置初始点、学习率和迭代停止条件,并使用梯度函数和更新变量的公式来实现该算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值