梯度下降法及matlab实现
2017-11-20 13:42
1016 查看
梯度下降法又称为最速下降法,是求解无约束优化问题最简单和最古老的方法之一。对无约束最优化问题:minx∈Rnf(x)梯度下降法是负梯度方向dk=−∇f(xk)
取负梯度的原因:设f(x)在xk附近连续可微,dk为搜索方
向向量,gk=∇f(xk). 由泰勒展开式得
f(xk+αdk)=f(xk)+αgTkdk+o(α),α>0.
目标函数f(x)在xk处沿方向dk下降的变化率:
limα→0f(xk+αdk)−f(xk)α=limα→0αgTkdk+o(α)α=gTkdk=∥gk∥∥dk∥cos(θ¯k)
其中θ¯k是gk与dk的夹角。显然, 对于不同的方向dk, 函数变化率取决于它与gk夹角的余弦值.要使变化率最小,只cos(θ¯k)=−1, 即θ¯k=π 时才能达到。
梯度下降法:
step1: 选取初始点x0∈Rn, 容许误差0<ϵ≪1. 令k:=1.
step2: 计算gk=∇f(xk). 若∥gk∥≤ϵ, 停算, 输出xk作为近似最优解.
step3: 取方向dk=−gk.
step4: 由线搜索技术确定步长因子αk.
step5: 令xx+1=xk+αkdk, k=k+1, 转step1.
matalb代码如下:
取负梯度的原因:设f(x)在xk附近连续可微,dk为搜索方
向向量,gk=∇f(xk). 由泰勒展开式得
f(xk+αdk)=f(xk)+αgTkdk+o(α),α>0.
目标函数f(x)在xk处沿方向dk下降的变化率:
limα→0f(xk+αdk)−f(xk)α=limα→0αgTkdk+o(α)α=gTkdk=∥gk∥∥dk∥cos(θ¯k)
其中θ¯k是gk与dk的夹角。显然, 对于不同的方向dk, 函数变化率取决于它与gk夹角的余弦值.要使变化率最小,只cos(θ¯k)=−1, 即θ¯k=π 时才能达到。
梯度下降法:
step1: 选取初始点x0∈Rn, 容许误差0<ϵ≪1. 令k:=1.
step2: 计算gk=∇f(xk). 若∥gk∥≤ϵ, 停算, 输出xk作为近似最优解.
step3: 取方向dk=−gk.
step4: 由线搜索技术确定步长因子αk.
step5: 令xx+1=xk+αkdk, k=k+1, 转step1.
matalb代码如下:
function [x,val,k]=grad(fun,gfun,x0) % 功能: 用最速下降法求解无约束问题: min f(x) %输入: x0是初始点, fun, gfun分别是目标函数和梯度 %输出: x, val分别是近似最优点和最优值, k是迭代次数. maxk=5000; %最大迭代次数 rho=0.5;sigma=0.4; k=0; epsilon=1e-5; while(k<maxk) g=feval(gfun,x0); %计算梯度 d=-g; %计算搜索方向 if(norm(d)<epsilon), break; end m=0; mk=0; while(m<20) %Armijo搜索 if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d) mk=m; break; end m=m+1; end x0=x0+rho^mk*d; k=k+1; end x=x0; val=feval(fun,x0);
相关文章推荐
- 线性回归与梯度下降(附Matlab实现)
- 利用梯度下降法实现线性回归的算法及matlab实现
- 线性回归梯度下降matlab实现
- 机器学习小组知识点4&5:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版
- 基于MATLAB和C#编程实现二元函数梯度下降法求极小值
- 在matlab中实现梯度下降法
- 梯度下降法实现softmax回归MATLAB程序
- 梯度下降法的matlab实现
- Matlab梯度下降及正规方程实现多变量的线性回归
- 梯度下降Gradient Descent matlab实现
- 梯度下降(Gradient Descent)简析及matlab实现
- 共轭梯度下降及matlab简单实现
- 基于matlab的梯度下降法实现线性回归
- 斯坦福机器学习3:线性回归、梯度下降和正规方程组的matlab实现
- 梯度下降Python实现
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比[转]
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
- 梯度下降C++实现
- 梯度下降实现案例(含python代码)
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比