MATLAB多元函数梯度下降法找最小值-梯度演示-绘制梯度方向

如果海森矩阵 在所有可能的参数值上都是正定 的,则该函数是凸的;函数将呈现为光滑的碗状,使得训练过程相对简单。存在单 一的全局最小值,不会有局部最小值或鞍点

沿着梯度方向,函数变化最快。

x,y点的更新:x和y每次更新一点点,z根据公式可以计算出一个新的坐标点,但新的z不一定落在f(x,y)上,除非x,y的变化非常非常小。为了演示梯度的方向,我们将变化调大一些。

原理:

如果进行梯度下降,可以找到全局最优点。

程序:梯度下降版

Matlab 复制代码
clear;
syms x y;
z= x^2+y^2; % 定义函数
u=linspace(-10,10,100);
v=linspace(-10,10,100);
[U,V]=meshgrid(u,v);
z_value = subs(z, {x, y}, {U, V}); 
plot3(U,V,z_value,'g')
xlabel('X')
ylabel('Y')
zlabel('Z')
hold on;
dz_dx=diff(z,x);
dz_dy=diff(z,y);
learning=0.01;
epoch = 200;
Init_x=10;
Init_y=10;
for i=1:epoch
    dzx=subs(dz_dx,{x,y},{Init_x,Init_y});
    dzy=subs(dz_dy,{x,y},{Init_x,Init_y});
    z1=subs(z, {x, y}, {Init_x,Init_y});
    New_x=Init_x-learning*dzx;
    New_y=Init_y-learning*dzy;
    New_z=z1-learning*dzy-learning*dzx;%绘制箭头使用
   
    
    x1=[Init_x New_x];
    y1=[Init_y New_y];
    Z1=[z1 New_z];
    if(mod(i,10)==0)
    plot3(x1,y1,Z1,'r-')
    scatter3(New_x,New_y,New_z,'b>')
    hold on;
    end
    Init_x=New_x;
    Init_y=New_y;
    
end

程序:显示梯度方向版

为了更好的让大家看每一次迭代的梯度方向,所以在这一版中绘制了梯度的方向。

Matlab 复制代码
clear;
syms x y;
z= x^2+y^2; % 定义函数
u=linspace(-10,10,100);
v=linspace(-10,10,100);
[U,V]=meshgrid(u,v);
z_value = subs(z, {x, y}, {U, V}); 
plot3(U,V,z_value,'g')
xlabel('X')
ylabel('Y')
zlabel('Z')
hold on;
dz_dx=diff(z,x);
dz_dy=diff(z,y);
learning=0.01;
epoch = 200;
Init_x=10;
Init_y=10;
for i=1:epoch
    dzx=subs(dz_dx,{x,y},{Init_x,Init_y});
    dzy=subs(dz_dy,{x,y},{Init_x,Init_y});
    z1=subs(z, {x, y}, {Init_x,Init_y});
    New_x=Init_x-learning*dzx;
    New_y=Init_y-learning*dzy;
    %New_z=z1-learning*dzy-learning*dzx;%绘制箭头使用
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%梯度方向绘制
    if(mod(i,10)==0)
    New_x1=Init_x-3;
    New_y1=Init_y-3;
    New_z1=z1-3*dzy-3*dzx;
    x1=[Init_x New_x1];
    y1=[Init_y New_y1];
    Z1=[z1 New_z1];
    plot3(x1,y1,Z1,'r-')
    scatter3(New_x1,New_y1,New_z1,'b>')
    hold on;
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Init_x=New_x;
    Init_y=New_y;
    
end
相关推荐
honeysuckle_luo20 分钟前
RandLA-net-pytorch 复现
人工智能·pytorch·python
_BugMan2 小时前
【大模型】理论基础(1):函数与神经网络
人工智能·深度学习·神经网络
AI模块工坊3 小时前
CVPR 即插即用 | PConv:重新定义高效卷积,一个让模型“跑”得更快、更省的新范式
人工智能·深度学习·计算机视觉·transformer
lzjava20243 小时前
Spring AI加DeepSeek实现一个Prompt聊天机器人
人工智能·spring·prompt
fanstuck4 小时前
AI辅助数学建模有哪些优势?
人工智能·数学建模·语言模型·aigc
一只安5 小时前
从零开发AI(不依赖任何模型)
人工智能·python
成长痕迹5 小时前
【Python与Matlab数据分析对比】
python·matlab·数据分析
11年老程序猿在线搬砖5 小时前
如何搭建自己的量化交易平台
大数据·人工智能·python·自动交易·量化交易系统
Elastic 中国社区官方博客5 小时前
Elasticsearch 开放推理 API 增加了对 Google 的 Gemini 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·googlecloud
周杰伦_Jay5 小时前
【实战|旅游知识问答RAG系统全链路解析】从配置到落地(附真实日志数据)
大数据·人工智能·分布式·机器学习·架构·旅游·1024程序员节