本文关于吴恩达老师机器学习笔记~
在下图线性回归预测问题中,假设预测函数为下面的线性预测函数:
h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1x hθ(x)=θ0+θ1x
我们把 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 称为模型参数,那 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 应该如何选择才能使 h(x) 尽可能的拟合数据?
在线性回归问题,我们要解决的是一个最小化问题
m i n i m i z e θ 0 , θ 1 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 minimize_{\theta_0,\theta_1}\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2 minimizeθ0,θ12m1i=1∑m(hθ(x(i))−y(i))2
其中,m 为训练集样本数, 1 2 m \frac{1}{2m} 2m1只是为了使式子更直白一些
现在我们把问题变成找到能使训练集中预测值和真实值的差的平方的 1 2 m \frac{1}{2m} 2m1最小的 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1值
定义代价函数:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
代价函数也称平方误差(代价)函数,对大多数线性回归问题使用这个函数都是合理的。
为了可视化代价函数 J ,我们把假设函数简化为 h ( x ) = θ 1 x h(x) = \theta_1x h(x)=θ1x,则要解决的问题就变成
m i n i m i z e θ 1 J ( θ 1 ) = m i n i m i z e θ 1 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = m i n i m i z e θ 1 1 2 m ∑ i = 1 m ( θ 1 x ( i ) − y ( i ) ) 2 minimize_{\theta_1}J(\theta_1) = minimize_{\theta_1}\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2 = minimize_{\theta_1}\frac{1}{2m}\sum_{i=1}^m(\theta_1x^{(i)} - y^{(i)})^2 minimizeθ1J(θ1)=minimizeθ12m1i=1∑m(hθ(x(i))−y(i))2=minimizeθ12m1i=1∑m(θ1x(i)−y(i))2
为了得到使得代价函数最小的 θ 1 \theta_1 θ1 的值,我们画以下两幅图,左边是以 x 为参数的假设函数,右边是以 θ 1 \theta_1 θ1 为参数的代价函数
当 θ 1 \theta_1 θ1 = 1,即 h(x) = x,预测值与真实值完全重合,J(1) = 0
当 θ 1 \theta_1 θ1 = 0.5,即 h(x) = 0.5x,J(0.5) = 1 2 ∗ 3 ( 0. 5 2 + 1 2 + 1. 5 2 ) = 0.58 \frac{1}{2 * 3}(0.5^2 + 1^2 + 1.5^2) = 0.58 2∗31(0.52+12+1.52)=0.58
…
把 θ 1 \theta_1 θ1 的值带进假设函数和代价函数,即可得到右边的图,可以看到,当 θ 1 = 1 \theta_1 = 1 θ1=1 时,代价函数最小,即此时数据的拟合程度最好
现在我们回到 h ( x ) = θ 0 + θ 1 x h(x)= \theta_0 + \theta_1x h(x)=θ0+θ1x , 当 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 取不同的值时,得到的代价函数如图
也可以用等高线图来表示以上图像,其中的轴为 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,图中的同个椭圆形上的 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)的值相同
一种可以找到使得代价函数最小的 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值的算法
数学定义:
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0,\theta_1) ~~~~~~(for~ j = 0~ and~j = 1 ) θj:=θj−α∂θj∂J(θ0,θ1) (for j=0 and j=1)
关于公式的细节问题:
提出问题:
为了解释上面的问题,我们用一个简单的例子,假设只有一个参数 θ \theta θ,则关于 θ \theta θ 的代价函数如下图所示
α \alpha α又有什么意义, α \alpha α 的大小对结果有何影响?
当 θ \theta θ 到达局部最优时,下一步梯度下降会怎么样?
当 θ \theta θ 到达局部最优时,导数项为 0, θ 1 : = θ 1 − α d d θ 1 J ( θ 1 ) = θ 1 − 0 = θ 1 \theta_1 := \theta_1 - \alpha \frac{d}{d\theta_1}J(\theta_1) = \theta_1 - 0 = \theta_1 θ1:=θ1−αdθ1dJ(θ1)=θ1−0=θ1,相当于梯度下降算法什么都没做,解始终保持在局部最优点。
当 θ \theta θ 远离局部最优点时,代价函数曲线比较抖,即导数比较大,每次更新迈的步子就比较大。随着 θ \theta θ 逐渐靠近局部最优点,曲线趋于平缓,导数比较小,每次更新迈的步子就越来越小,因此就算学习率不变,梯度下降法可以收敛到局部最优点。
将梯度下降算法应用于最小化平方误差代价函数
为了应用梯度下降算法,写好梯度下降代码,关键步骤是导数项 ∂ ∂ θ j J ( θ 0 , θ 1 ) \frac{\partial}{\partial \theta_j} J(\theta_0,\theta_1) ∂θj∂J(θ0,θ1),因此,我们需要弄清楚这个偏导数项是什么。
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \frac{\partial}{\partial \theta_j} J(\theta_0,\theta_1) = \frac{\partial}{\partial \theta_j}\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2 = \frac{\partial}{\partial \theta_j}\frac{1}{2m}\sum_{i=1}^m(\theta_0 + \theta_1x^{(i)} - y^{(i)})^2 ∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2=∂θj∂2m1i=1∑m(θ0+θ1x(i)−y(i))2
当 j = 0 时
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1) = \frac{\partial}{\partial \theta_0}J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}^m(\theta_0 + \theta_1x^{(i)} - y^{(i)}) = \frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)}) ∂θj∂J(θ0,θ1)=∂θ0∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))=m1i=1∑m(hθ(x(i))−y(i))
当 j = 1 时,
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) x ( i ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1) = \frac{\partial}{\partial \theta_1}J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}^m(\theta_0 + \theta_1x^{(i)} - y^{(i)})x^{(i)} = \frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x^{(i)} ∂θj∂J(θ0,θ1)=∂θ1∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))x(i)=m1i=1∑m(hθ(x(i))−y(i))x(i)
算出代价函数的斜率后,把他们代回梯度下降算法中
θ 0 = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_0 = \theta_0 - \alpha\frac{\partial}{\partial \theta_0}J(\theta_0,\theta_1) = \theta_0 - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)}) θ0=θ0−α∂θ0∂J(θ0,θ1)=θ0−αm1i=1∑m(hθ(x(i))−y(i))
θ 1 = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \theta_1 = \theta_1 - \alpha\frac{\partial}{\partial \theta_1}J(\theta_0,\theta_1) = \theta_1 - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x^{(i)} θ1=θ1−α∂θ1∂J(θ0,θ1)=θ1−αm1i=1∑m(hθ(x(i))−y(i))x(i)
不断重复这个过程,直到 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 收敛
梯度下降算法有时被称为Batch梯度下降法,每更新一次梯度都要遍历一次数据集