转载

最近学习吴恩达的《机器学习》课程,没想到第一个“梯度下降”算法就把我给难住了,不明白到底是如何计算出 θ 参数的,终于找到一篇文章,详细地解释了算法的运行原理。原文是一篇英文文档,我翻译并整理了一下,原文地址:

https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html

 

先复习一下梯度下降算法涉及到的公式:

预测函数:  h(θ)  =   θ0  +  θ1X1 +  θ2X2  +  ... +  θnXn

   θ 更新 : θi :=  θi  - ∂(h(θ) - y) · x ,∂ 为步进值。

       J(θ) : ½ Sum(h(θ) - y)2

 

让我们以“房价预测”来举例说明算法的工作过程。

首先,给出房子面积和房价的数据。

如果现在输入一个新的房子面积(X), 预测它的房价(Y)会是多少呢?

让我们把历史数据绘成图表。

现在,我们使用一个简单的线性模型来预测房价。

上图,红色是预测房价函数,根据输入的面积(X)来计算出房价(Ypred)。

Ypred =  a +   bX 

注:h(θ)就是 Ypred,a 即 θ0, b 即  θ1。

蓝色是真实的历史数据(样本),它与红色(Ypred)的差值就是预测误差(E)。所以,我们需要根据历史数据,调整 a 和 b 的值,让这条红色直线产生的预测误差最小,提升预测的准确性。算法的目的就是找到计算出参数(a, b)的合理值,下面是梯度下降算法的 SSE 计算公式,

Sum of Squared Errors (SSE) = ½ Sum (Actual House Price – Predicted House Price)2

=  ½ Sum(Y – Ypred)2

(SSE就是前面前面提到的J)函数,是用来测量误差的函数,不同的算法可以采用不同的公式,SSE只是其中一种)

梯度下降算法的基本面就是这些,它通过优化参数(a & b)来调整预测函数来达到减少误差的目地,算法的具体流程如下:

  1. 使用随机值来初始化参数(a & b),得到一个SSE值。
  2. 计算梯度:当(a & b)以一个很小的步进改变的时候,SSE的值也会发生变化,我们往SSE变小的方向上移动(a & b)的值。
  3. 沿梯度方向改变(a & b)的值,把SSE的值调整到最小。
  4. 使用新的参数(a & b)值,来计算新的 SSE 。
  5. 重复2和3,直到再怎么调整参数(a & b)的值也无法减少 SSE 为止。

接下来,我们用实际数据把算法跑一遍,在这之前,先标准化一下数据,以方便计算。

              

( 右边的小数就是百分比,如:1400的百分比  ==  (1400 - 1100) / (2450 - 1100)   )

 

第一步,给a和b一个随机值,使用 Ypred = a + b X 来计算预测值和SSE。

     

 

第二步,计算参数的梯度值。

a的更新:∂SSE/∂a = – (Y-YP)

b的更新:∂SSE/∂b = – (Y-YP)X

Here, SSE = ½ (Y-YP)2 = ½(Y-(a+bX))2

不用过多关注计算,∂SSE/∂a 和 ∂SSE/∂b 就是梯度值,也就是调整的方向, 往该方向调整,SSE的值可以变到最小。

              

 

第三步,更新参数的梯度值,达到SSE的最优解。

        

我们需要把 a 和 b的值更新,让它们沿着梯度方向移动,更新规则:

  • a – ∂SSE/∂a
  • b – ∂SSE/∂b

所以,新的参数值计算如下:

  1.  a的最新值  =  a – r * ∂SSE/∂a = 0.45-0.01*3.300 = 0.42
  2.  b的最新值  =  b – r * ∂SSE/∂b= 0.75-0.01*1.545 = 0.73

这里, r 是学习比率 = 0.01, 也就是每次调整的步进,等同于 “θ 更新公式”里面的∂。

 

第四步, 使用新的参数(a & b)值,来计算新的 SSE 总数。

                 

我们能看到使用新的参数值,SSE 总数值已经下降了(0.677 到 0.553),这也说明学习起了作用,预测的结果值更准确了。

 

第五步,重复第三步和第四步,直到SSE的总数值不再有明显的变化为止。这种情况表明,已经获得了最合理的 a 和 b 的值。

 

总结一下:梯度下降算法,实际上就是“机器学习”解方程的方法,根据样本,解出最合理(SSE最小)的参数值。

 

用户评论:
发表评论: (限500字)

注册 忘记密码 登录