图文解析:梯度下降原理与实现

图文解析:梯度下降原理

 

一、基本原理


 

二、 梯度下降代码实现


 

梯度下降法函数function [k ender]=steepest(f,x,e),需要三个参数f、x和e,其中f为目标函数,x为初始点,e为精度。输出也为两个参数,k表示迭代的次数,ender表示找到的最低点。 

复制代码
 1 function [k ender]=steepest(f,x,e)
 2 %梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]
 3 syms x1 x2 m; %m为学习率
 4 d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向
 5 flag=1;  %循环标志
 6 k=0; %迭代次数
 7 while(flag)
 8     d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
 9     d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
10     nor=norm(d_temp); %范数
11     if(nor>=e)
12         x_temp=x+m*d_temp;            %改变初始点x的值
13         f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数
14         f_temp=subs(f_temp,x2,x_temp(2));
15         h=diff(f_temp,m);  %对m求导,找出最佳学习率
16         m_temp=solve(h);   %求方程,得到当次m
17         x=x+m_temp*d_temp; %更新起始点x
18         k=k+1;
19     else
20         flag=0;
21     end
22 end
23 ender=double(x);  %终点
24 end
复制代码

 

转载:https://zhuanlan.zhihu.com/p/38525412

 

posted @   Tsingke  阅读(261)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2018-05-26 如何在Android Studio中添加注释模板信息?
点击右上角即可分享
微信分享提示