今天看到了深度学习中第一节老师讲的梯度下降算法,所以自己尝试了一下,代码如下
clear
clc
x=[1,2,3,4,5,6];
% y=[1,1.5,3.3,3.8,4.4,5.8]; y=x
y=[5.2,7.1,9.3,11.5,13.2,14.9]; %用于拟合 y=2x+3,最终tmpw,tmpb接近2,3
syms w b
tmp=(y-(b+w*x)).^2;
L=sum(tmp);
k=1;
tmpw=1;
tmpb=1;
tw=diff(L,w); %求导函数
tb=diff(L,b);
while(k<500)
k
if(k==1)
sw=subs(tw,[w,b],[1,1]);
sb=subs(tb,[w,b],[1,1]);
else
sw=subs(tw,[w,b],[tmpw,tmpb]);
sb=subs(tb,[w,b],[tmpw,tmpb]);
end
tmpw=tmpw-0.01*sw;
tmpb=tmpb-0.01*sb;
k=k+1;
end
vpa(tmpw) % 分数转成小数
vpa(tmpb)
第一次学理解可能不到位,有错误希望大家指出