AI垫脚石——梯度下降算法笔记(一,理论)

计算机的本质,顾名思义,就是高性能的计算机器。它能够准确而快速地计算出我们所需要的算术结果。那计算机的核心部件——CPU来说,其核心就是由大量的加法器组成,协助计算出我们所需的结果。因此,可以粗略地认为,计算机完成任务,靠的就是一次又一次的数学(和逻辑)运算完成。要想让计算机模仿人类做出自己的判断和预测结果,首先就应该把我们想要解决的问题转化成数学模型。

当然,计算机并不具有创造性,要实现判断和预测这样高级的人类功能,输入数据也是必不可少的。举一个例子,当你手上有一点闲钱,想要在某地买一间房子,而对房价影响最大的就是房子面积。所以为了更好地跟中介砍价,我们就要判断该地某间房子的合理价格。这时候,我们就会观察之前的交易记录,找到面积和房价的之间的关系,并利用这种得出的关系,代入自己想买的房子面积,以获得自己想买的房子的普遍价格。而我们的目的,就是把上述过程都交由计算机完成。

假设我们获得了当地房子面积和房价之间的关系(横坐标为房子面积,纵坐标为房价)

n个数据点表示为

(x_{i},y_{i}) (i = 1,2,...,n)

(数据是我自己编的)

很容易看到,房子面积与房价成线性关系。于是我们采用线性模型来衡量面积与房间的关系,即设:

y = w*x+b

那么此时,我们的任务就变成将参数 w 和 b 分别求出来。虽然计算机计算能力十分强悍,但我们总不能在两个实数R区间去枚举吧?就算是枚举,我们也需要在枚举出来的参数中找到合适的一组。这时我们就需要另一个函数来观测求出的线性模型的拟合程度,或者说是误差大小。误差函数我们可以用点到线间的距离之和来表示

loss(w,b)=\sum_{i=1}^{n}(w*x_{i}+b-y_{i})^2

接下来,我们先随意指定 w 和 b 的初始值。这时候,我们的任务又变成了通过改变 w 和 b 的数值使误差降到最小。为了达到这一目的,我们就要用到导数了。很显然,误差函数loss(w,b)是一个光滑连续的函数。因此,通过我们先对 w 和 b 分别求导,再根据导数的正负号找到使误差函数下降的方向

\frac{\mathrm{d}loss(w,b) }{\mathrm{d} w} = \sum_{i =1}^{n}2*x_{i}*(w*x_{i}+b-y_{i})

\frac{\mathrm{d}loss(w,b) }{\mathrm{d} b} = \sum_{i=1}^{n}2*(w*x_{i}+b-y_{i})

这时候,我们将 w 和 b 分别减去对应的导数,就会使 w 和 b 向着使误差函数下降的方向前进。

这样,在远离最小值的时候,导数往往十分大,w 和 b 就会大步流星地向最小值前进,而在接近最小值的时候,导数往往趋近于0,w 和 b 的步伐就会变得亦步亦趋。

值得注意的是,在实际程序中, w 和 b 并不是直接减去对应的导数,在减之前,导数还要乘上一个合适的常数学习率rate。

显而易见,如果rate过小,w 和 b 下降的速度就会很慢,运算时间就会变长。如果rate过大,情况就会变得很糟糕,因为此时有可能出现正反馈的过冲(强行翻译自吴恩达教授overshoot概念),此时梯度下降过程就会向下图一样,冲过了最低点,反而使误差持续增大。

( x = w或b)

而良好的学习率就可以让误差快速持续向着减小的方向进行,如下图。

最后我们就可以收获一条较为完美的直线去和中介对线了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值