引用
梯度下降法简介
梯度下降法是一种最优化算法,用于最快搜索极大值。线性回归最小二乘法的误差函数(损失函数)为最小二乘法线性回归指标,为此需要最小化误差函数以获得最优回归系数。因此,我们可以利用梯度下降法沿梯度回归负方向探寻回归系数。
梯度下降法求解函数极值流程
梯度下降过程计算方法:
只有1个变量x的条件下:
x:=x−α∗dy/dx
举例说明:
利用梯度下降法求函数 y=1/2∗x2−2∗x 的最小值
1. 设置参数α=0.9,ϵ=0.01,x0=−4;
2. 当前位置(−4,16)求导dy/dx=(−4)−2=−6;
3. 修改位置:x′=x−α∗dy/dx=(−4)−0.9∗(−6)=1.4,对应位置为(1.4,−1.82);
4. Δx=x′−x=−α∗dy/dx=−(0.9)∗(−6)=5.4,迭代次数n=1;
5. 当前位置为(1.4,−1.82)求导dy/dx=(1.4)−2=−0.6;
6. 修改位置:x′=x−α∗dy/dx=(1.4)−0.9∗(−0.6)=1.94,对应位置为(1.94,−1.9982);
7. Δx=x′−x=−α∗dy/dx=−(0.9)∗(−0.6)=0.54,迭代次数n=2;
8. 当前位置为(1.94,−1.9982)求导dy/dx=(1.94)−2=−0.06;
9. 修改位置:x′=x−α∗dy/dx=(1.94)−0.9∗(−0.06)=1.994,对应位置为(1.994,−1.999982);
10. Δx=x′−x=−α∗dy/dx=−(0.9)∗(−0.06)=0.054,迭代次数n=3;
11. 当前位置为(1.994,−1.999982),求导dy/dx=(1.994)−2=−0.006;
12. 修改位置:x′=x−α∗dy/dx=(1.994)−0.9∗(−0.06)=1.9994,对应位置为(1.9994,−1.99999982);
13. Δx=x′−x=−α∗dy/dx=−(0.9)∗(−0.006)=0.0054<ϵ,迭代次数n=3,停止;
matlab脚本
syms x b
y=1/2*x^2-2*x;
grad=diff(y,x);
alpha=0.9;
eps=0.01;
x0=-4;
N=20;
x_=zeros(1,N);
x_(1)=x0;
delta=1;
i=1;
while (i<N|delta>eps)
grad0=subs(grad,x,x_(1,i));
x_(1,i+1)=x_(1,i)-alpha*grad0;
delta=-alpha*grad0;
i=i+1;
end
有若干变量x的条件下:
xj:=xj−α∗dy/dxj ,j=1~n
举例说明:
利用梯度下降法求函数 y=2∗(x1−2)2+(x2−4)2 的最小值
matlab脚本代码
syms x1 x2
y=2*(x1-2)^2+(x2-4)^2;
grad=[diff(y,x1) diff(y,x2)];
alpha=0.05;
eps=1e-3;
x0=[0,0];
N=100;
x=zeros(2,N);
x(:,1)=x0;
delta=[1;1];
i=1;
while (i<N|delta>eps)
grad0=subs(grad,[x1,x2],x(:,i)');
x(:,i+1)=x(:,i)-alpha*grad0';
delta=-alpha*grad0';
i=i+1;
end
y_=subs(y,[x1,x2],x(:,end)');
disp(x);
disp(y_);
PS:梯度下降法,方向导数求极值:方向导数太复杂,还在学习。