1. 程式人生 > 其它 >圖文解析:梯度下降原理與實現

圖文解析:梯度下降原理與實現

圖文解析:梯度下降原理

 

一、基本原理


二、 梯度下降程式碼實現


梯度下降法函式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