最速下降法及案例分析(含MATLAB代码)

一、最速下降法的背景与应用

最速下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。1

二、最速下降法的基本原理

对于给定的函数 f ( x ) f(x) f(x)泰勒展开得 f ( x ) = f ( x 0 ) + ∇ f ( x ) ( x − x 0 ) + ∇ f ( x ) ( x − x 0 ) 2 ! + . . . (1) f(x)=f(x_0)+\nabla f(x)(x-x_0)+\frac{\nabla f(x)(x-x_0)}{2!}+... \tag{1} f(x)=f(x0)+f(x)(xx0)+2!f(x)(xx0)+...(1)取它的第二阶展开,则 f ( x ) ≈ f ( x 0 ) + ∇ f ( x ) ( x − x 0 ) (2) f(x)\approx f(x_0)+\nabla f(x)(x-x_0) \tag{2} f(x)f(x0)+f(x)(xx0)(2)

在这里插入图片描述

如上图所示 ∇ f \nabla f f为梯度方向, − ∇ f -\nabla f f为负梯度方向(反向梯度)。所以我们就有 x − x 0 = − α ∗ ∇ f ( x 0 ) (3) x-x_0=-\alpha *\nabla f(x_0)\tag{3} xx0=αf(x0)(3)那么就得到迭代公式 x k + 1 = x k − α ∗ ∇ f ( x k ) , ( α > 0 ) (4) x_{k+1}=x_k-\alpha *\nabla f(x_k),(\alpha>0)\tag{4} xk+1=xkαf(xk),(α>0)(4)
其中 α \alpha α称为学习率。也可以理解为步长, α \alpha α的不同,会导致迭代次数不同,收敛速度就不同。

最速下降法案例分析

下面取一个例子 f ( x ) = x 2 f(x)=x^2 f(x)=x2, ∇ f ( x ) = 2 x \nabla f(x)=2x f(x)=2x, x 0 = 10 , α = 0.2 x_0=10,\alpha=0.2 x0=10,α=0.2由迭代公式(4)有:

x k {x_k} xk x k + 1 = x k − α ∗ ∇ f ( x k ) x_{k+1}=x_k-\alpha *\nabla f(x_k) xk+1=xkαf(xk) ∇ f ( x k ) \nabla f(x_k) f(xk)
x 1 x_1 x1 x 1 = x 0 − α ∗ ∇ f ( x 0 ) = 6 x_1=x_0-\alpha *\nabla f(x_0)=6 x1=x0αf(x0)=6 ∇ f ( x 1 ) \nabla f(x_1) f(x1)=12
x 2 x_2 x2 x 2 = x 1 − α ∗ ∇ f ( x 1 ) = 3.6 x_2=x_1-\alpha *\nabla f(x_1)=3.6 x2=x1αf(x1)=3.6 ∇ f ( x 2 ) \nabla f(x_2) f(x2)=7.2
x 3 x_3 x3 x 3 = x 2 − α ∗ ∇ f ( x 2 ) = 2.16 x_3=x_2-\alpha *\nabla f(x_2)=2.16 x3=x2αf(x2)=2.16 ∇ f ( x 3 ) \nabla f(x_3) f(x3)=4.32

按照这样迭代下去,只要给定一个精度值 ϵ \epsilon ϵ,使得 ∇ f ( x k ) \nabla f(x_k) f(xk)< ϵ \epsilon ϵ,就可以了。如下图,它是越来越靠近最低点的。
在这里插入图片描述

通过观察下这个图可以看到,学习率 α \alpha α取的不同,迭代次数也会不同,选择合适的学习率,收敛速度会更快

在这里插入图片描述

四、最速下降法与梯度下降法的区别

最速下降法与梯度下降法的主要区别在最速下降法有学习率 α \alpha α,而梯度下降法没有(就是 α \alpha α恒等等于1,是不变的),梯度下降法默认负梯度方向就是目标函数值下降最快的方向。即 △ x = − ∇ f ( x ) \triangle x=-\nabla f(x) x=f(x),故每次都将自变量沿着负梯度方向移动单位步长,目标函数值就会逐渐收敛。但是收敛速度非常大的程度地依赖于其Hessian矩阵的条件数2

五、 最速下降法的缺点

某点的负梯度方向,通常只是在该点附近才具有这种最速下降的性质。在一般情况下,当用最速下降法寻找极小点时,在开始几步目标函数下降较快;但在接近极小点时,收敛速度长久不理想了在这里插入图片描述
通过上面案例分析也可以清晰的看到,在开始时都是收敛比较快(图像上的点比较稀疏),而在靠近极小值时,收敛比较慢。从图像是上看密密麻麻的。如果当目标函数的等值 线为比较扁平的椭圆时,那收敛就更慢了。所以,在实用中常用最速下降法和其他方法联合应用,在前期使用最速下降法,而在接近极小值点时,可以改用收敛较快的其他方法。
还有就是最速下降法只能得到局部最优,也就是说当你的函数有多个极值时。函数值是否最小与于初始值 x 0 x_0 x0的选举有关

案例分析的代码

clear,clc
%f=x^2;%df=2*x;
x0=15;                %初始值
el=0.0001;            %设置精度
n=0.9;                %学习率
x1=x0-n*2*x0;         
k=1;
while abs(2*x1)>el
    x0=x1;
    x1=x0-n*2*x0;
    k=k+1;            %k为迭代次数
end
xd=2*x1               
k
%%%%%%%%%%%%%%%%%%%%%%下面是给图像标箭头
while abs(2*x1)>el
    x0=x1;
    x1=x0-n*2*x0;
    k=k+1;            %k为迭代次数
end
xd=2*x1               
k
x11(1)=10;
for i=1:k
    x11(i+1)=x11(i)-n*2*x11(i);
end
x11
y=x11.^2
scatter(x11,y,'k')
hold on
t=-10:0.01:10;
y1=t.^2;
plot(t,y1,'b')
for i=1:k
    PlotLineArrow(gca,[x11(i),x11(i+1)],[y(i),y(i+1)],'g','r')
end

下面是画箭头的m.文件3

function PlotLineArrow(obj, x, y, markerColor, lineColor)
% 绘制带箭头的曲线
% 绘制散点图
plot(x, y, 'o', 'Color', markerColor, 'MarkerFaceColor', markerColor);
% 获取 Axes 位置
posAxes = get(obj, 'Position');
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 获取 Axes 范围
limX = get(obj, 'Xlim');
limY = get(obj, 'Ylim');
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
% 转换坐标
xNew = posX + (x - minX) / (maxX - minX) * width;
yNew = posY + (y - minY) / (maxY - minY) * height;
% 画箭头
annotation('arrow', xNew, yNew, 'color', lineColor);

  1. 来自百度百科 ↩︎

  2. 来自知乎作者为“一土木蒙” ↩︎

  3. 来自CSDN的作者CoderMan_1012 ↩︎

  • 5
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值