梯度下降算法

梯度下降算法

梯度下降算法的基本思想简介:

梯度下降算法(欧式范数的最速下降法)。梯度下降法的基本思想可以类比为一个下山的过程。
假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了。

梯度下降算法思想的具体步骤:

  1. 选定初始点 x 1 x^1 x1和给定精度 ϵ > 0 \epsilon>0 ϵ>0,令 k = 1 k=1 k=1
  2. ∥ ∇ f ( x k ) ∥ < ϵ \parallel\nabla f(x^k)\parallel<\epsilon f(xk)<ϵ停止梯度下降算法, x ∗ = x k x^*=x^k x=xk,否则 d k = − ∇ f ( x k ) d^k=-\nabla f(x^k) dk=f(xk)
  3. x k x^k xk处沿 d k d^k dk方向作线性搜索, x k + 1 = x k + α d k x^{k+1}=x^k+\alpha d^k xk+1=xk+αdk,k=k+1,转步骤2.

例题:用最速下降法求解无约束问题
m i n { f ( x ) = x 1 2 2 + x 2 2 } min\lbrace f(x)=\cfrac{x_1^2}{2}+x_2^2\rbrace min{f(x)=2x12+x22}

求解matlab代码附上:
本代码精度设置为 1 0 − 5 10^{-5} 105

clc,clear
%%设定初始值
jingdu=1e-5%精度要求
x=[2 1];%初始点
%%梯度
fun_diff=[x(1),2*x(2)];
%%目标函数
fun=fun_ob(x)
%%梯度下降主循环
syms a%步长
while ((fun_diff(1)^2+fun_diff(2)^2)^0.5) > jingdu
    %%梯度
    fun_diff=[x(1),2*x(2)];
    d=fun_diff*-1;
    %一元线性搜索函数
    k=fun_ob(x+a*d);
    a_num=solve(diff(k));%求步长
    x=x+a_num*d;
end
x,fun_ob(x)
function [a]=fun_ob(x)
    a=(x(1)^2)/2+x(2)^2;
end

在这里插入图片描述
其函数图像如下:
在这里插入图片描述

并附上动态观察代码:

clc,clear
x1=-10:0.01:10
x2=-10:0.01:10
[x1,x2]=meshgrid(x1,x2)
x3=(x1.^2)/2+x2.^2;

%%设定初始值
jingdu=1e-5%精度要求
x=[10 10];%初始点
%%梯度
fun_diff=[x(1),2*x(2)];
%%目标函数
fun=fun_ob(x)
%%梯度下降主循环
syms a%步长
while ((fun_diff(1)^2+fun_diff(2)^2)^0.5) > jingdu
    %%Draw
    mesh(x1,x2,x3);
    grid on
    hold on
    plot3(x(1),x(2),fun,'r*')
    pause(0.1)
  
    hold off
    %%梯度
    fun_diff=[x(1),2*x(2)];
    d=fun_diff*-1;
    %一元线性搜索函数
    k=fun_ob(x+a*d);
    a_num=solve(diff(k));%求步长
    x=x+a_num*d;
    fun=fun_ob(x)
end
x,fun_ob(x)
function [a]=fun_ob(x)
    a=(x(1)^2)/2+x(2)^2;
end

附上求解结果对应位置:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HuiNux13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值