本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
为进一步具体掌握梯度下降法,本文展示一个梯度下降法求解二元函数最小值的例子。
本文先用手算展示梯度下降算法每一步的过程和结果,再展示matlab的实现代码,
通过本实例更进一步了解梯度下降算法的具体实现细节
问 题
求为何值时,
取得最小值
易知道,对于本问题,y在 x1=2, x2 =3 处取得最小值0
目标
通过梯度下降算法寻找最小解
看结果是否与我们预期一致(x1=2, x2 =3)
下面是梯度下降算法实际的操作过程
梯度下降算法实例-梯度公式计算
先计算函数在x处的梯度
由 ,
有
梯度下降算法实例-参数设定
然后给x设置一个初始值
现设初始值为,
此时
梯度下降算法实例-迭代过程
在设置好梯度下降算法的相关参数后,就开始对x进行迭代就可以了
下面是整个梯度算法的迭代过程
迭代1:
计算梯度 :
更新x :
查看 y值 :
迭代2:
计算梯度 :
更新x :
查看 y值 :
...............
...............
...............
迭代40:
计算梯度 :
更新x :
查看 y值 :
梯度下降算法实例-求解结果
第40次迭代时, 中的元素都极小,
这说明此时x已经处在一个比较平缓的位置,
我们退出迭代 ,
以 作为最终结果,
此时函数值
易知,与预期的 x= [2,3] , y=0 几乎一致。
下面展示使用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
代码运行结果如下:
第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