机器学习02-梯度下降

第二课由线性回归的损失函数引出梯度下降(gradient descent)的算法。

1.回顾线性回归:

假设: \( h_\theta(X)=\theta^TX \)

损失函数: \( L(\theta)=\frac{1}{2}\sum_{i=1}^{m}{(\theta^Tx^{(i)}-y^{(i)})}^2 \)

在假设中\( \theta \)为\( (n+1)*1 \)的向量,\( n \)且表示解释变量的个数,\( X \)是非随机变量;在损失函数中,\( m \)表示样本数量。而损失函数之所以选择实际值与预测值二阶平方和,除了数学上比一阶或更高阶更便利之外,也有其他可用概率解释的原因,将在第三课介绍。

2.梯度下降

想象你在一座山上,正在寻找一条下山的路。这时你环望四周,找到一个最低点并向最低点的方向迈出一步;接着再环望四周,朝最低点方向迈出一步… Imgur

如图所示,一步一步的走到最低点。 把上述的过程转化为数学语言便是: \[ \theta_j^{t+1} = \theta_j^{t}- \alpha \frac {dL(\theta)} {d\theta_j} \]

又:\[ \frac{dL(\theta)} {d\theta_j} = \frac{ d\frac{1}{2}\sum_{i=1}^m (\theta^Tx^{(i)}-y^{(i)})^2 } {d\theta_j}= \sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})x_j^{(i)} \]

故: \[ \theta_j^{t+1}=\theta_j^{t}-\alpha \sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})x_j^{(i)} \]

其中\( \alpha \)称为*学习速度(learning rate)*,可以看作迈出步子的大小;\( \frac{dL(\theta)}{d\theta_j} \)表示迈出步子的方向。

任意给出一组\( \theta \)向量的初始值,并用上式迭代直到收敛。在迭代过程中,\( \alpha \)也是可变的,并且逐渐缩小,保证当距离目的地越来越近时迈出的步子越来越小,否则可能走过头。

上述算法成为批梯度下降(batch gradient descent),原因在于每次迭代都需要全部数据集 的参与,这使得当样本量很大时算法效率较低。针对这个问题提出另一种增量梯度下降(incremental gradient descent)算法,具体过程如下:

for i=1:m {
\[ \theta_j=\theta_j-\alpha* (h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \qquad(j=0,1,2,3...n) \] }

其中\( x^{(i)} \)和\( y^{(i)} \)代表第\( i \)组样本。在增量梯度下降算法中,对每个样本迭代一次且每个样本只需迭代一次,其效率在数据量很大的情况下比批梯度下降高。可惜的是,对每个样本分别迭代得到的结果不一定是全部样本的最优解,只能保证它的最终结果在最优解附近。

另一个问题如上图中左右两部分所示,当选择不同的起始点时,最后的结果可能不同。对于某个函数而言可能存在多个极小值点使得一介偏导为0,所有极小值中的最小值称为全局最优解,其他极小值称局部最优解。不过对于线性回归中的损失函数而言,一个二次函数通常是漂亮的碗状,没有除全局最优解之外的局部解。

3.正规方程组

事实上,对于\( h_\theta(X)=\theta^TX \)这种最简单的假设形式而言,我们可以找出参数\( \theta \)的显示表达,使得损失函数最小。正如梯度下降算法中所提到的,当算法收敛时,\( \frac {dL(\theta)} {d\theta_i} \)应该等于0,同时这也是数学分析里的定理。由此可得如下的正规方程组: \[ \textrm{normal equation:} \left\{ \begin{array}{ll} \sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)}) =0 \\ \sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})x_1^{(i)} =0 \\ \sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})x_2^{(i)} =0 \\ \qquad \vdots \qquad \vdots \qquad \vdots \\ \sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})x_n^{(i)} =0 \end{array} \right. \]

把\( h_\theta(X)=\theta^TX \)代入正规方程组中,转化为矩阵形式便可得到: \[ X^T(X\theta-Y)=0 \] 即:\[ \theta=(X^TX)^{-1}X^TY \] 其中, \[ X= \left( \begin{array}{X} 1 & x_1^{(1)} & x_2^{(1)} & x_3^{(1)} & \ldots \\ 1 & x_1^{(2)} & x_2^{(2)} & x_3^{(2)} & \ldots \\ 1 & x_1^{(3)} & x_2^{(3)} & x_3^{(3)} & \ldots \\ 1 & x_1^{(4)} & x_2^{(4)} & x_3^{(4)} & \ldots \\ \vdots & \vdots & \vdots &\vdots & \ddots \end{array} \right) \qquad \theta= \left( \begin{array}{\theta} \theta_0 \\ \theta_1 \\\theta_2 \\ \theta_3 \\ \vdots \end{array} \right) \qquad Y= \left( \begin{array}{y} y_0 \\ y_1 \\y_2 \\ y_3 \\ \vdots \end{array} \right) \] \( x_j^{(i)} \)表示第\( i \)个样本第\( j \)个变量的值。