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
相关推荐
zhoupenghui1682 分钟前
【AI大模型应用开发】【项目实战】13.RAG智慧问答项目-(一)项目介绍&项目架构&项目环境配置
人工智能·docker·ai·milvus·rag·attu·rag智慧问答项目
神奇小汤圆11 分钟前
AI Coding 不只靠 Prompt:Agent 工程闭环如何接入 DevOps
人工智能
hongmai66688814 分钟前
ESP32-S2-MINI-2U-N4R2:一款为灵活部署而生的Wi-Fi MCU模组
人工智能·单片机·嵌入式硬件·物联网·智能家居
神奇小汤圆17 分钟前
AI Agent 替你写代码没问题,但这 3 类后端任务让它当场翻车
人工智能
lyy-独立开发者39 分钟前
主动推理-人工海马
人工智能
云栖梦泽在41 分钟前
Claude Code / Codex 使用卡顿怎么办?AI 编程 Agent 连接失败与网络排查思路
网络·人工智能·网络协议·chatgpt·性能优化
2zcode1 小时前
免费开源项目文档:基于MATLAB图像处理的药片检测与计数系统设计与实现
开发语言·图像处理·matlab
凡泰AI1 小时前
从个人用AI到企业用AI,如何为企业部署一套私有化Agent智能体运行时,将AI变成企业的基础设施
人工智能·ai·架构·agent·cio
蓝速科技1 小时前
蓝速科技三色灯光会议预约门牌深度评测
大数据·人工智能·科技
qq_408753391 小时前
用 AI 写小说实战:开源 Agent 从建书到出第一章
人工智能·aigc·开发工具