这里介绍的主要是二维的案例

  • 一、最速下降法的背景与应用
  • 二、最速下降法的基本原理
    • 最速下降法案例分析
  • 四、最速下降法与梯度下降法的区别
  • 五、 最速下降法的缺点
  • 案例分析的代码

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

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

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

对于给定的函数f(x)f(x)f(x)由泰勒展开得:f(x)=f(x0)+∇f(x)(x−x0)+∇f(x)(x−x0)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)(x−x0​)+2!∇f(x)(x−x0​)​+...(1)取它的第二阶展开,则f(x)≈f(x0)+∇f(x)(x−x0)(2)f(x)\approx f(x_0)+\nabla f(x)(x-x_0) \tag{2}f(x)≈f(x0​)+∇f(x)(x−x0​)(2)

如上图所示∇f\nabla f∇f为梯度方向,−∇f-\nabla f−∇f为负梯度方向(反向梯度)。所以我们就有x−x0=−α∗∇f(x0)(3)x-x_0=-\alpha *\nabla f(x_0)\tag{3}x−x0​=−α∗∇f(x0​)(3)那么就得到迭代公式xk+1=xk−α∗∇f(xk),(α>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)=x2f(x)=x^2f(x)=x2,∇f(x)=2x\nabla f(x)=2x∇f(x)=2x,x0=10,α=0.2x_0=10,\alpha=0.2x0​=10,α=0.2由迭代公式(4)有:

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

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

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

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

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

五、 最速下降法的缺点

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

案例分析的代码

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)>elx0=x1;x1=x0-n*2*x0;k=k+1;            %k为迭代次数
end
xd=2*x1
k
%%%%%%%%%%%%%%%%%%%%%%下面是给图像标箭头
while abs(2*x1)>elx0=x1;x1=x0-n*2*x0;k=k+1;            %k为迭代次数
end
xd=2*x1
k
x11(1)=10;
for i=1:kx11(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:kPlotLineArrow(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 ↩︎

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

  1. 浣熊优化算法(COA)(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  2. 灰狼优化(GWO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 文献[1]中的灰狼优化(Grey Wolf Optimizer, ...

  3. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)

    四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...

  4. 二、生理信号处理 ——1.心电信号(含Matlab代码及数据)

    本文适合快速了解心电信号,并能够进行数据的滤波处理. 一. 心电数据预处理(消除工频干扰.基线漂移) * 心电数据及rdmat函数见文章底部 1. 导入心电数据 ## 心电图导入及读取 clc; [T ...

  5. matlab去除大跳变,一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码)...

    一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 文章目录 前言 一.MATLAB代码 二.结果示例 总结 前言 方法 ...

  6. 灰狼优化(GWO)算法的8种中文变体(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  7. COI实验室技能:常见的图像增强算法(含MATLAB代码)

    COI实验室技能:常见的图像增强算法(含MATLAB代码)   成像系统采集到的图片有时不一定具有很好的图像质量,往往需要进行一些图像增强的操作.本文主要整理了几种常见的图像增强算法,包括:同态滤波. ...

  8. 回声消除AEC算法(含Matlab代码)

    基于自适应滤波器的回声消除AEC算法(含Matlab代码) 摘要 自适应滤波器 声学回波抵消 AEC算法解析 LMS算法 NLMS算法 VSNLMS算法 APLMS算法 LMS-Newton算法 PF ...

  9. 基于主要成分分析的人脸二维码识别系统-含Matlab代码

    目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...

  10. 多尺度结构元素形态学边缘检测算法的研究-含Matlab代码

    目录 一.引言 二.数学形态学理论概述 三.实验验证 四.参考文献 五.Matlab代码获取 一.引言 使用数字图像处理技术来解决计算机视觉.人工智能.生物遥感器视觉等领域所涉及到的图像问题时,最重要 ...

最新文章

  1. deepsort原理快速弄懂——时效比最高的
  2. UML从需求到实现---类图(2)
  3. Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现
  4. win8: hello gril
  5. TClientDataSet[3]: 手动建立数据集
  6. 微软应用商店_微软自家的软件也放弃Windows 10
  7. 根据状态转移写状态机-三段式
  8. infoseccrypto_java下载_關於php接ICBC的支付接口的解決方案
  9. centos7升级openssh
  10. axis2 默认端口_使用axis2创建webservice
  11. 七步从AngularJS菜鸟到专家(4和5):指令和表达式
  12. 生成式对抗网络GAN生成手写数字
  13. 正则表达式 四则运算 java_利用正则表达式判断四则运算表达式是否合法
  14. 写给初学者:电气制图规范和图纸识读方法——第四期
  15. Scrapy创建项目报错Scrapy – no active project,Unknown command解决办法
  16. mysql graler_安装Linux后常用的操作以及踩坑记录
  17. ei会议论文含金量高吗?
  18. 红色墙绘设计公司营销网站织梦模板
  19. Tensorflow slim库
  20. 论文精读——HOG特征提取

热门文章

  1. python之词频统计
  2. python处理xps文件_如何在Windows 10系统中处理XPS文件
  3. 浅谈电力巡检机器人功能及特点
  4. 使用zlog实现日志记录
  5. 在ArcGIS使用Modelbuilder创建拓扑检查模型
  6. Postman写接口文档
  7. 深入了解FileNet
  8. matlab飞机高度控制,基础知识 | 飞行中的各种高度(三)
  9. java中三大版本javaSE、javaEE个javaME
  10. java架构师是做什么的 java架构师的工作内容