本文主要参考文献如下:
1、吴恩达CS229课程讲义。
2、(美)S.Chatterjee等,《例解回归分析》(第2章),机械工业出版社。
3、周志华. 《机器学习》3.2.清华大学出版社。
4、(美)P.Harrington,《机器学习实战》人民邮电出版社。
1、代价函数
我们先考虑只有单个数据对的情况,即 x = [ 1 , x 1 , x 2 , … , x n ] {\bf x}=[1,x_1,x_2,\ldots,x_n] x=[1,x1,x2,…,xn]为输入的属性向量,其中 n n n为属性的个数, y y y为与 x \bf x x对应的输出函数值。我们希望能够用 x \bf x x的线性函数来预测 y y y的值,即
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n = ∑ j = 1 n θ j x j = θ T x , (1) \tag{1} \begin{aligned} h_{\theta}({\bf x})&=\theta_0+\theta_1x_1+\theta_2x_2+\ldots+\theta_nx_n\\ &=\sum_{j=1}^{n}\theta_jx_j\\ &={\bm \theta}^{\rm T}{\bf x}, \end{aligned} hθ(x)=θ0+θ1x1+θ2x2+…+θnxn=j=1∑nθjxj=θTx,(1)这里, θ = [ θ 0 , θ 1 , … , θ n ] T {\bm \theta}=[\theta_0,\theta_1,\ldots,\theta_n]^{\rm T} θ=[θ0,θ1,…,θn]T为参数向量。显然,我们希望通过选择合适的参数 θ {\bm \theta} θ,使得 h θ ( x ) h_{\bm \theta}({\bf x}) hθ(x)能够尽量接近 y y y的值。
那么如何来定义“接近”的程度呢?采用的就是cost function(代价函数)。常用的一种cost function的定义,就是均方值
J ( θ ) = 1 2 [ h θ ( θ ) − y ] 2 (2) \tag{2} J(\bm \theta)=\frac{1}{2}[h_{\theta}({\bm \theta})-y]^2 J(θ)=21[hθ(θ)−y]2(2)我们推广到有 m m m个数据对的情况,此时的代价函数为
J ( θ ) = 1 2 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] 2 . (3) \tag{3} J(\bm \theta)=\frac{1}{2m}\sum_{i=1}^{m}[h_{\theta}({
{\bf x}^{(i)}})-y^{(i)}]^2. J(θ)=2m1i=1∑m[hθ(x(i))−y(i)]2.(3)
严格来说,根据第一部分,这里的分母的 m m m应该为 m − 1 m-1 m−1。
2、梯度下降法
多元函数 J ( θ ) J(\bm \theta) J(θ)的值会随着 θ \bm \theta θ的改变而改变。我们希望能够尽快找到使 J ( θ ) J(\theta) J(θ)最小的 θ \bm \theta θ,那么 θ \bm \theta θ应该往哪个方向变化, J ( θ ) J(\bm \theta) J(θ)的值能够下降得更快呢?
首先我们看”方向”这个词的含义。这里的方向,其实就是指每个参数, θ j \theta_j θj,第一是变大还是变小(正 or 负),第二是变得快还是慢。以下图一维的情况来看,显然A点切线斜率比B点的大,因此下降得更快,而C点 θ 1 \theta_1 θ1得值应该增大,而非减小。想象下如果换成多维情况,其实就是看每个参数应该变大还是变小,应该以多快速率变化(在学习率 α \alpha α一定的情况下)。如果想象从山顶往山下走(两个参数的情况),显然两个参数的正负和变化快慢,决定了下山路线的方向。
梯度下降法实际上就是选择下降最快方向的方法,即
θ j : = θ j − α ∂ J ( θ ) ∂ θ j j = 0 , 1 , … , n . (4) \tag{4} \theta_j:=\theta_j-\alpha\frac{\partial J(\bm \theta)}{\partial \theta_j}\quad j=0,1,\ldots,n. θj:=θj−α∂θj∂J(θ)j=0,1,…,n.(4)
注意梯度下降法的特点:
- 梯度(切线斜率)越大,下降越快; 梯度越小,下降越慢。
- 如果到了局部最优点(斜率为0),则不再变化。
- 所有 θ j \theta_j θj的值要同时更新。
3、线性回归的梯度下降
回到我们的问题上来。我们是想找到(3)中代价函数的最小值,因此到我们设置好 θ \bm \theta θ的初始值之后,就开始用(4)更新 θ \theta θ值,逐渐逼近最优点。因此我们需要求得梯度,即
∂ J ( θ ) ∂ θ j = 1 2 m ∂ ∂ θ j ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] 2 = 1 2 m ∂ ∂ θ j ∑ i = 1 m [ ∑ j = 1 n θ j x j ( i ) − y ( i ) ] 2 = 1 m ∑ i = 1 m [ ∑ j = 1 n θ j