BP神经网络

【实例】梯度下降算法实例与matlab代码

作者 : 老饼 发表日期 : 2022-10-23 18:29:35 更新日期 : 2024-06-05 07:46:32
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.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已经处在一个比较平缓的位置,
我们退出迭代 ,
以 作为最终结果,
此时函数值 
易知,与预期的 x= [2,3] , y=0 几乎一致。




  02. 梯度下降算法实例-matlab代码实现  



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



      matlab实现梯度下降算法     


使用matlab实现上述梯度下降算法实例的代码如下:
matlab2014b亲测已跑通
%%-------------------------------------------
% 本代码展示一个梯度下降法求函数最小解的DEMO
% 求解函数y= (x1-2)^2+(x2-3)^2
% 转载请说明本代码来自《老饼讲解神经网络》 www.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



    梯度下降算法实例matlab代码-运行结果    


第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





以上就是matlab求解梯度下降算法的实例与代码了~






 End 




联系老饼