本文关于吴恩达老师机器学习笔记~
代价函数
代价函数的数学定义
在下图线性回归预测问题中,假设预测函数为下面的线性预测函数:
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)
关于公式的细节问题:
- α \alpha α : 学习率,表示梯度下降时,我们迈出多大的步子,若 α \alpha α 很大,则梯度下降很迅速,反之则反之
- 同时更新
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1。如图,左边为正确的做法,先计算出
t
e
m
p
0
,
t
e
m
p
1
temp0,temp1
temp0,temp1 的值,再同时把新的值赋给
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1 。
而右边计算出 temp0 后,先赋给 θ 0 \theta_0 θ0 再计算 t e m p 1 temp1 temp1,这时计算 temp1 时代价函数代入的是新的 θ 0 \theta_0 θ0,会产生与左边不同的 temp1 的值。
为什么梯度下降算法起作用
提出问题:
- α \alpha α 有什么作用
- 偏导数有什么作用
- 为什么把学习率跟偏导数放在一起
为了解释上面的问题,我们用一个简单的例子,假设只有一个参数 θ \theta θ,则关于 θ \theta θ 的代价函数如下图所示
- 随机取最低点右边的一个点, d d θ 1 J ( θ 1 ) ≥ 0 \frac{d}{d\theta_1}J(\theta_1) \geq 0 dθ1dJ(θ1)≥0 ,而 $\alpha $ 恒大于 0,因此新的 θ \theta θ 值总比原先的值小, θ \theta θ 向使得 J ( θ ) J(\theta) J(θ) 最小的方向移动
- 随机取最低点左边的一个点, d d θ 1 J ( θ 1 ) ≤ 0 \frac{d}{d\theta_1}J(\theta_1) \leq 0 dθ1dJ(θ1)≤0 ,而 $\alpha $ 恒大于 0,因此新的 θ \theta θ 值总比原先的值大, θ \theta θ 向使得 J ( θ ) J(\theta) J(θ) 最小的方向移动,这就是导数项的意义
α \alpha α又有什么意义, α \alpha α 的大小对结果有何影响?
- 当 α \alpha α 很小,梯度下降每一次迈的步子很小,下降缓慢
- 当 α \alpha α 很大,梯度下降每一次迈的步子很大,下降迅速,但是当 θ \theta θ 接近具有最优点时,会因为 a l p h a 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梯度下降法,每更新一次梯度都要遍历一次数据集