BP神经网络基础理论
梯度下降算法
【实例】梯度下降算法实例与代码
作者 : 老饼 日期 : 2022-10-23 18:29:35 更新 : 2022-10-23 19:23:48
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com


为进一步具体掌握梯度下降法,

本文展示一个梯度下降法求解二元函数最小值的例子。

先用手算展示每一步的过程和结果,再展示matlab的实现代码,

通过本实例更进一步了解梯度下降算法的具体实现细节




  问 题  


为何值时,
 取得最小值。
易知道,对于本问题,y在  x1=2,  x2 =3 处取得最小值0.
目标
通过梯度下降算法寻找最小解
看结果是否与我们预期一致(x1=2, x2 =3)



  01. 手算过程  


  下面是算法实际的操作过程  


   梯度公式计算   


先计算函数在x处的梯度
由  ,



   参数设定    


然后给x设置一个初始值
现设初始值为

此时 



     对x进行迭代   


下面是整个梯度算法的迭代过程

迭代1:
计算梯度 :
更新x :
查看 y值 :
迭代2:
 
计算梯度 :
更新x :
查看 y值 :
...............
...............
...............
迭代40:
 
计算梯度 :
更新x :
查看 y值 :


   求解结果   


第40次迭代时,
 都极小,我们退出迭代 ,
以 作为最终结果,
此时函数值 
易知,与预期的 x= [2,3] , y=0 几乎一致。




  02. 代码实现  


下面展示使用matlab如何编写代码实现以上梯度算法求解问题


  代 码 实 现  


matlab2014b亲测已跑通:

%%-------------------------------------------
% 本代码展示一个梯度下降法求函数最小解的DEMO
% 求解函数y= (x1-2)^2+(x2-3)^2
% 转载请说明本代码来自《老饼讲解神经网络》 bp.bbbdata.com
%%-------------------------------------------
x1 = 0 ;   % 初始化x1
x2 = 0 ;   % 初始化x2
for i = 1 :100
    %------计算梯度--------
    dx1 = 2*x1-4;          
    dx2 = 2*x2-6;
    
    %----- 往负梯度方向更新x------
    x1  = x1 - 0.1*dx1;    
    x2  = x2 - 0.1*dx2;
    
    disp(['第',num2str(i),'轮迭代:x=:[',num2str(x1),',',num2str(x2),'],y=',num2str((x1-2)^2+(x2-3)^2)])
    %----- 如果梯度过小,则退出迭代 --------
    if((abs(dx1)< 0.001)  & (abs(dx2)< 0.001))
        break
    end
end



    运行结果    


第1轮迭代:x=:[0.4,0.6],y=8.32                         
第2轮迭代:x=:[0.72,1.08],y=5.3248                 
第3轮迭代:x=:[0.976,1.464],y=3.4079             
第4轮迭代:x=:[1.1808,1.7712],y=2.181           
......
第39轮迭代:x=:[1.9997,2.9995],y=3.5889e-07
第40轮迭代:x=:[1.9997,2.9996],y=2.2969e-07





 End 










联系老饼