梯度下降(Gradient descent)

梯度下降算法的定位

梯度下降算法是一种求解局部最小值的算法,在线性模型和非线性模型中都可以用。

在用某个模型对数据进行拟合时,会用损失函数(或者叫错误函数等等)去评估拟合的准确性,这个时候往往要找到损失函数的最小值,即求出达到最佳拟合效果时各参数的值。求函数的最小值时往往用到梯度下降法。

从二维空间的线性回归说起

假设平面上有n个点: (x1, y1), (x2, y2), …, (xn, yn).
现在要找出一条直线去拟合这些点(即找出x和y的线性关系)。

首先要构造一个损失函数去评估拟合的好坏,最小二乘法是最常见的方法(其实就是用误差的平方和去构造损失函数)。
设拟合函数为y^=mx+b(y^xy)\hat{y}=mx+b (\hat{y}为x对应的y的估计值),则损失函数为:
E=i=1n(mxi+byi)2E=\sum_{i=1}^{n}(mx_i+b-y_i)^2

下面有两种方法去求参数m和b:
1,传统的统计学方法:求m和b的值使得E最小。

要求函数的最小值,首先想到的就是求导数,令导数等于零(这个例子是奏效的,应该能够证明这个函数是凸函数,用其它先验知识也能知道它的形状)。

于是分别求m和b的偏导数,令其等于零:
Em=2i=1n(mxi+byi)xi=0\frac{\partial E}{\partial m}=2\sum_{i=1}^{n}(mx_i+b-y_i)x_i=0
Eb=2i=1n(mxi+byi)=0\frac{\partial E}{\partial b}=2\sum_{i=1}^{n}(mx_i+b-y_i)=0

解得:
m=xyxˉyˉx2xˉ2m=\frac{\overline{xy}-\bar{x}\bar{y}}{\overline{x^2}-\bar{x}^2}

b=x2yxyxˉx2xˉ2b=\frac{\overline{x^2}\overline{y}-\overline{xy}\bar{x}}{\overline{x^2}-\bar{x}^2}

2,用梯度下降的方法去求m和b
随便设定一个初始的m和b值,同时learning rate (α\alpha)也需要提前设置。

不妨设m0=b0=0,α=0.0001m_0=b_0=0, \alpha = 0.0001
经过一次迭代,m0b0m_0和b_0分别变成m1b1m_1和b_1
m1=m0αEm0m_1=m_0-\alpha\frac{\partial E}{\partial m_0}
b1=b0αEb0b_1=b_0-\alpha\frac{\partial E}{\partial b_0}
m0b0m_0和b_0都已知的情况下,Em0Eb0\frac{\partial E}{\partial m_0}和\frac{\partial E}{\partial b_0}很容易求出来。
。。。
经过N(比如10000,一般要人为设置次数)次这样的迭代,就会得到mNbNm_N和b_N的值,不出意外,这里的mNbNm_N和b_N跟传统的解法得到的值基本一样。

拓展到多维空间的线性回归

假设在n+1维空间,有m个点:(x11, x12, …, x1n, y1), (x21, x22, …, x2n, y2), …, (xm1, xm2, …, xmn, ym)

用最小二乘法去构造损失函数:
E=i=1m(w1xi1+w2xi2+...+wnxin+byi)2E=\sum_{i=1}^{m}(w_1x_{i1}+w_2x_{i2}+ ... +w_nx_{in} +b-y_i)^2
(向量写法为E=i=1m(wTxi+byi)2E=\sum_{i=1}^{m}(w^Tx_i+b-y_i)^2)

对每一个系数分别求导数为:
Ew1=2i=1m(wTxi+byi)xi1\frac{\partial E}{\partial w_1}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{i1}
Ew2=2i=1m(wTxi+byi)xi2\frac{\partial E}{\partial w_2}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{i2}

Ewn=2i=1m(wTxi+byi)xin\frac{\partial E}{\partial w_n}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{in}
Eb=2i=1m(wTxi+byi)\frac{\partial E}{\partial b}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)
写成梯度的形式为:
E=(Ew1,Ew2,...,Ewn,Eb)T\nabla E=(\frac{\partial E}{\partial w_1}, \frac{\partial E}{\partial w_2}, ..., \frac{\partial E}{\partial w_n}, \frac{\partial E}{\partial b})^T
梯度实际上就是对多变量函数的每一个变量求偏导数,再按一定的顺序组成向量或者矩阵。

接下来,和二维空间中一样,对每一个变量分别进行迭代,直到得到理想的结果。

再拓展到非线性模型

对于非线性模型,迭代方法与线性模型一样,用一般的公式来展示比较麻烦,因此举一个例子比较容易理解。

假如有如下的非线性方程组:
梯度下降(Gradient descent)
与之相关的函数为:
梯度下降(Gradient descent)
构造损失函数:
梯度下降(Gradient descent)
迭代前初始化参数:
梯度下降(Gradient descent)
开始进行迭代:
梯度下降(Gradient descent)
梯度下降(Gradient descent)

Reference

Gradient Descent: All You Need to Know
Why do we subtract the slope * a in Gradient Descent?
Gradient descent from wikipedia