图文解析:梯度下降原理
一、基本原理
二、 梯度下降代码实现
梯度下降法函数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