机器学习01-代价函数和梯度下降

本文关于吴恩达老师机器学习笔记~

文章目录

  • 代价函数
    • 代价函数的数学定义
    • 为什么使用代价函数
  • 梯度下降
    • 梯度下降的数学定义
    • 为什么梯度下降算法起作用
  • 线性回归的梯度下降

代价函数 代价函数的数学定义 在下图线性回归预测问题中,假设预测函数为下面的线性预测函数:
h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1x hθ?(x)=θ0?+θ1?x
我们把θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1? 称为模型参数,那θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1? 应该如何选择才能使 h(x) 尽可能的拟合数据?
机器学习01-代价函数和梯度下降
文章图片

在线性回归问题,我们要解决的是一个最小化问题
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?,θ1??2m1?i=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?)=2m1?i=1∑m?(hθ?(x(i))?y(i))2
代价函数也称平方误差(代价)函数,对大多数线性回归问题使用这个函数都是合理的。
为什么使用代价函数 为了可视化代价函数 J ,我们把假设函数简化为 h ( x ) = θ 1 x h(x) = \theta_1x h(x)=θ1?x,则要解决的问题就变成
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θ1??J(θ1?)=minimizeθ1??2m1?i=1∑m?(hθ?(x(i))?y(i))2=minimizeθ1??2m1?i=1∑m?(θ1?x(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 时,代价函数最小,即此时数据的拟合程度最好
机器学习01-代价函数和梯度下降
文章图片

现在我们回到h ( x ) = θ 0 + θ 1 x h(x)= \theta_0 + \theta_1x h(x)=θ0?+θ1?x , 当 θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1? 取不同的值时,得到的代价函数如图
机器学习01-代价函数和梯度下降
文章图片

也可以用等高线图来表示以上图像,其中的轴为θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1?,图中的同个椭圆形上的 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0?,θ1?)的值相同
机器学习01-代价函数和梯度下降
文章图片

梯度下降 梯度下降的数学定义 一种可以找到使得代价函数最小的 θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1?的值的算法
数学定义:
θ j : = θ j ? α ? ? θ j J ( θ 0 , θ 1 )( f o rj = 0a n dj = 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 的值。
机器学习01-代价函数和梯度下降
文章图片

为什么梯度下降算法起作用 提出问题:
  • α \alpha α 有什么作用
  • 偏导数有什么作用
  • 为什么把学习率跟偏导数放在一起
为了解释上面的问题,我们用一个简单的例子,假设只有一个参数θ \theta θ,则关于θ \theta θ 的代价函数如下图所示
  • 随机取最低点右边的一个点, d d θ 1 J ( θ 1 ) ≥ 0 \frac{d}{d\theta_1}J(\theta_1) \geq 0 dθ1?d?J(θ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θ1?d?J(θ1?)≤0 ,而 $\alpha $ 恒大于 0,因此新的θ \theta θ 值总比原先的值大, θ \theta θ 向使得 J ( θ ) J(\theta) J(θ) 最小的方向移动,这就是导数项的意义
机器学习01-代价函数和梯度下降
文章图片

α \alpha α又有什么意义, α \alpha α 的大小对结果有何影响?
  • 当α \alpha α 很小,梯度下降每一次迈的步子很小,下降缓慢
  • 当α \alpha α 很大,梯度下降每一次迈的步子很大,下降迅速,但是当θ \theta θ 接近具有最优点时,会因为a l p h a alpha alpha 太大使结果越来越糟糕
机器学习01-代价函数和梯度下降
文章图片

当θ \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θ1?d?J(θ1?)=θ1??0=θ1?,相当于梯度下降算法什么都没做,解始终保持在局部最优点。
机器学习01-代价函数和梯度下降
文章图片

当θ \theta θ 远离局部最优点时,代价函数曲线比较抖,即导数比较大,每次更新迈的步子就比较大。随着θ \theta θ 逐渐靠近局部最优点,曲线趋于平缓,导数比较小,每次更新迈的步子就越来越小,因此就算学习率不变,梯度下降法可以收敛到局部最优点。
机器学习01-代价函数和梯度下降
文章图片

线性回归的梯度下降 【机器学习01-代价函数和梯度下降】将梯度下降算法应用于最小化平方误差代价函数
为了应用梯度下降算法,写好梯度下降代码,关键步骤是导数项 ? ? θ 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???2m1?i=1∑m?(hθ?(x(i))?y(i))2=?θj???2m1?i=1∑m?(θ0?+θ1?x(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?)=m1?i=1∑m?(θ0?+θ1?x(i)?y(i))=m1?i=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?)=m1?i=1∑m?(θ0?+θ1?x(i)?y(i))x(i)=m1?i=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??αm1?i=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??αm1?i=1∑m?(hθ?(x(i))?y(i))x(i)
不断重复这个过程,直到θ 0 , θ 1 \theta_0,\theta_1 θ0?,θ1? 收敛
梯度下降算法有时被称为Batch梯度下降法,每更新一次梯度都要遍历一次数据集

    推荐阅读