梯度下降法

来源:互联网 发布:淘宝聊天自动生成 编辑:程序博客网 时间:2024/06/05 11:34

引用

线性回归
梯度下降法,方向导数求极值


梯度下降法简介

梯度下降法是一种最优化算法,用于最快搜索极大值。线性回归最小二乘法的误差函数(损失函数)为最小二乘法线性回归指标,为此需要最小化误差函数以获得最优回归系数。因此,我们可以利用梯度下降法沿梯度回归负方向探寻回归系数。


梯度下降法求解函数极值流程

Created with Raphaël 2.1.0设置参数(学习速率α、截止条件ε、迭代次数k)当前位置x处梯度(求导)梯度下降修改位置为xΔx<ε or 迭代次数=k结束yesno

梯度下降过程计算方法:

只有1个变量x的条件下:

x:=xαdy/dx

举例说明:

利用梯度下降法求函数y=1/2x22x的最小值
1. α=0.9,ϵ=0.01,x0=4
2. 4,16dy/dx=(4)2=6
3. x=xαdy/dx=(4)0.9(6)=1.41.4,1.82
4. Δx=xx=αdy/dx=(0.9)(6)=5.4n=1
5. 1.41.82dy/dx=(1.4)2=0.6
6. x=xαdy/dx=(1.4)0.9(0.6)=1.941.94,1.9982
7. Δx=xx=αdy/dx=(0.9)(0.6)=0.54n=2
8. 1.941.9982dy/dx=(1.94)2=0.06
9. x=xαdy/dx=(1.94)0.9(0.06)=1.9941.994,1.999982
10. Δx=xx=αdy/dx=(0.9)(0.06)=0.054n=3
11. 1.9941.999982dy/dx=(1.994)2=0.006
12. x=xαdy/dx=(1.994)0.9(0.06)=1.99941.9994,1.99999982
13. Δx=xx=αdy/dx=(0.9)(0.006)=0.0054<ϵn=3

matlab脚本

syms x by=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(x12)2+(x24)2的最小值

matlab脚本代码

syms x1 x2y=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;endy_=subs(y,[x1,x2],x(:,end)');disp(x);disp(y_);

PS:梯度下降法,方向导数求极值:方向导数太复杂,还在学习。

原创粉丝点击