最速下降法及案例分析(含MATLAB代码)
这里介绍的主要是二维的案例
- 一、最速下降法的背景与应用
- 二、最速下降法的基本原理
- 最速下降法案例分析
- 四、最速下降法与梯度下降法的区别
- 五、 最速下降法的缺点
- 案例分析的代码
一、最速下降法的背景与应用
最速下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(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);
来自百度百科 ↩︎
来自知乎作者为“一土木蒙” ↩︎
来自CSDN的作者CoderMan_1012 ↩︎
最速下降法及案例分析(含MATLAB代码)相关推荐
- 浣熊优化算法(COA)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...
- 灰狼优化(GWO)算法(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 文献[1]中的灰狼优化(Grey Wolf Optimizer, ...
- 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)
四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...
- 二、生理信号处理 ——1.心电信号(含Matlab代码及数据)
本文适合快速了解心电信号,并能够进行数据的滤波处理. 一. 心电数据预处理(消除工频干扰.基线漂移) * 心电数据及rdmat函数见文章底部 1. 导入心电数据 ## 心电图导入及读取 clc; [T ...
- matlab去除大跳变,一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码)...
一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 文章目录 前言 一.MATLAB代码 二.结果示例 总结 前言 方法 ...
- 灰狼优化(GWO)算法的8种中文变体(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...
- COI实验室技能:常见的图像增强算法(含MATLAB代码)
COI实验室技能:常见的图像增强算法(含MATLAB代码) 成像系统采集到的图片有时不一定具有很好的图像质量,往往需要进行一些图像增强的操作.本文主要整理了几种常见的图像增强算法,包括:同态滤波. ...
- 回声消除AEC算法(含Matlab代码)
基于自适应滤波器的回声消除AEC算法(含Matlab代码) 摘要 自适应滤波器 声学回波抵消 AEC算法解析 LMS算法 NLMS算法 VSNLMS算法 APLMS算法 LMS-Newton算法 PF ...
- 基于主要成分分析的人脸二维码识别系统-含Matlab代码
目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...
- 多尺度结构元素形态学边缘检测算法的研究-含Matlab代码
目录 一.引言 二.数学形态学理论概述 三.实验验证 四.参考文献 五.Matlab代码获取 一.引言 使用数字图像处理技术来解决计算机视觉.人工智能.生物遥感器视觉等领域所涉及到的图像问题时,最重要 ...
最新文章
- deepsort原理快速弄懂——时效比最高的
- UML从需求到实现---类图(2)
- Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现
- win8: hello gril
- TClientDataSet[3]: 手动建立数据集
- 微软应用商店_微软自家的软件也放弃Windows 10
- 根据状态转移写状态机-三段式
- infoseccrypto_java下载_關於php接ICBC的支付接口的解決方案
- centos7升级openssh
- axis2 默认端口_使用axis2创建webservice
- 七步从AngularJS菜鸟到专家(4和5):指令和表达式
- 生成式对抗网络GAN生成手写数字
- 正则表达式 四则运算 java_利用正则表达式判断四则运算表达式是否合法
- 写给初学者:电气制图规范和图纸识读方法——第四期
- Scrapy创建项目报错Scrapy – no active project,Unknown command解决办法
- mysql graler_安装Linux后常用的操作以及踩坑记录
- ei会议论文含金量高吗?
- 红色墙绘设计公司营销网站织梦模板
- Tensorflow slim库
- 论文精读——HOG特征提取