梯度下降算法_梯度下降算法原理及推导

今天我们就来介绍用来优化代价函数的梯度下降算法(gradient descent algorithm)。

1 原理


那梯度下降究竟为何方神圣?我来用最通俗的语言来介绍下:

假设你站在华山之巅,你现在想以最快速度下山,那你肯定是找一条最陡峭的路走。你环顾四周,找到了一条路线,恩,这个方向是最陡的。于是你就出发了,走了一会发现,这个方向不是最陡的路了。你就停下来,换了个最陡的方向,继续往下走。重复这个步骤,你最终到达了山脚下。

那么,你从山顶到山脚的整个下山的过程,就是梯度下降。

为了在线性回归中应用梯度下降,我们先来回顾下线性回归模型的代价函数,它长这个样子:

69406fbe9f8f6a1ee09b8e0fe01c1515.png

其中,f(x)为

c9c0ad3c9e73c26260cf74efea6aabb7.png

注意,我们变量的上标是指样本数量,从1到m;下标指特征数量,从0到n。

我们的目标是

55eb356d3a5e8516f69a686e3389ae62.png

即在J(w)取最小值时,所对应的w值。这时,梯度下降法就上场了,用公式表示为:

c1a0f42c2fbec3a001e98fa9989aefc7.png

其中,“:=”为赋值的含义;α为学习速率,又叫步长,可以理解为我们下山时每走一步的距离;α右边的是J(w)对w求的偏导(偏导就是对w向量中的每个元素分别求导)。

这个公式的含义就是,先初始确定一个w的值,然后用(1)式计算新的w值,反复迭代。我们不断更新参数w的值,直到J(w)取得最小值时,停止迭代。

我们先把(1)式中J(w)对w的偏导求出来,会容易理解些:

807fd975e6d79accc097cf2b66bdba3c.png

将(2)式代入(1)式,可得

7c6fda64008ae899a5baafed0fd205c0.png

这就是线性回归中的梯度下降算法。最后,我手画一张图来把梯度下降的原理大概表示下:

26205cc5bd351ce59c3222c44783a0f7.png

如上图,我们先确定一个w,然后按步长α一步一步减小w的值。最后当w取某一值时,J(w)取得最小值,任务就完成了。

说到这里,可能大家就有疑问了,梯度下降的公式(1)到底是怎么来的呢?别急,我们马上就来推导。

2 推导


首先,我们需要泰勒近似定理的一阶展开式:

5f857056cd609f24eb1f7a5146482478.png

上边那个倒三角符号表示梯度,就是对w求偏导的意思。从上式不难看出:

e8b017007bcb35e1ea299aa5f89ea94c.png

也就是说:

60980342e48154f4ff18c72f17ce2254.png

上式说明了什么呢?注意到w和▽J(w)均为向量,也就是说,参数w变化的方向与梯度方向之间的夹角大于90°。我们希望J(w)每次迭代的变化量越大越好,那什么时候达到最大呢,就是参数w的变化量与梯度方向正好相反的时候,也就是二者的夹角达到180°的时候。我们用公式来说明下:

0815cfa3f0e7d9eda81bb0db7b73e24d.png

也就是说,两个向量的点积等于它们的模相乘,再乘以两个向量的夹角α。不难看出,当cosα=-1时,也就是α为180°时,两个向量的点积取到负值最大。

因为两个向量方向相反,故我们可推出:

f0e95945a4994e4e41c07546c97cf4a4.png

其中α右边的为单位向量,可将梯度的模与阿尔法合并,简化为:

d8a977c156ade56f795691a0140c5524.png

移项,可得:

a1a9c49178dff46073548e3cee7aae10.png

这就是我们的梯度下降公式(1),大功告成。最后我们放一张动图来看下梯度下降的效果(图片来自于网络):

a8162e79c12b77bb6b6368e706249c66.gif

下篇我会介绍有关模型拟合数据时产生的不利情况,以及如何避免这种情况发生,敬请期待。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值