梯度下降算法(理论课)

更合理地选取参数(梯度下降算法)

理论课

从上篇文章中可见,用穷举的方法是不容易找寻合适的参数 (w, b),梯度下降算法给我们指明了一条路。

先进行简单复习一些重要知识点(单变量线性回归模型及其代价函数)。

概念符号
模型 f w , b f_{w,b} fw,b w x ( i ) + b wx^{(i)}+b wx(i)+b
代价函数 J J J e r r = y ^ ( i ) − y ( i ) err=\hat{y}^{(i)}-y^{(i)} err=y^(i)y(i)
J = ∑ i = 1 m e r r 2 2 m J=\frac{\sum^m_{i=1} err^2}{2m} J=2mi=1merr2

通过选取 (w, b),努力缩小 J,让 y ^ \hat{y} y^ 与 y 间的总偏差减小,以得到能够拟合样本点的模型 f 。

要科学的选择 (w, b),我们只有一个参照——J 的形式。一般的想法是,针对 J 的结构,去选择 (w, b),以期更快的找到合适的值。那么我们就先对 J 这个函数进行研究吧。

J 的解析式: J ( w , b ) = ∑ i = 1 m e r r 2 2 m = ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 2 m = ∑ i = 1 m ( w x ( i ) + b − y ( i ) ) 2 2 m J(w,b)=\frac{\sum^m_{i=1} err^2}{2m}=\frac{\sum^m_{i=1} (\hat{y}^{(i)}-y^{(i)})^2}{2m}=\frac{\sum^m_{i=1} (wx^{(i)}+b-y^{(i)})^2}{2m} J(w,b)=2mi=1merr2=2mi=1m(y^(i)y(i))2=2mi=1m(wx(i)+by(i))2

所以,我们要研究的其实是,如何使一个二元函数最小。一般来说,要求一个函数的最值是比较复杂的,所以我们会选择先计算函数的极值,结合端点,用比较的方式找出最值。

从数学的角度,求 J 的极值点是很容易的。

  1. 求 J 的偏导:
    ∂ J ∂ w = ∑ i = 1 m ( w x ( i ) + b − y ( i ) ) x ( i ) m ∂ J ∂ b = ∑ i = 1 m ( w x ( i ) + b − y ( i ) ) m \begin{aligned} & \frac{\partial J}{\partial w}=\frac{\sum^m_{i=1} (wx^{(i)}+b-y^{(i)})x^{(i)}}{m} \\ & \frac{\partial J}{\partial b}=\frac{\sum^m_{i=1} (wx^{(i)}+b-y^{(i)})}{m} \end{aligned} wJ=mi=1m(wx(i)+by(i))x(i)bJ=mi=1m(wx(i)+by(i))

  2. 求极值:
    令: ∂ J ∂ w = 0 , ∂ J ∂ b = 0 w = ∑ i = 1 m x ( i ) y ( i ) − m x ˉ y ˉ ∑ i = 1 m x ( i ) 2 − m x ˉ 2 b = y ˉ − w x ˉ \begin{aligned} & 令:\frac{\partial J}{\partial w}=0,\frac{\partial J}{\partial b}=0\\ & w=\frac{\sum^m_{i=1}x^{(i)}y^{(i)}-m\bar{x}\bar{y}}{\sum^m_{i=1}x^{(i)2}-m\bar{x}^2}\\ & b=\bar{y}-w\bar{x} \end{aligned} 令:wJ=0,bJ=0w=i=1mx(i)2mxˉ2i=1mx(i)y(i)mxˉyˉb=yˉwxˉ

这就是经典的但变量问题线性回归系数公式,作为一种重要的思想,在这里简单谈谈,当然不是今天的重点。因为有许多的函数并不是那么容易解出 (w, b)。

在借助计算机的情况下,我们可以容忍不是一步到位求出 (w, b),而是通过迭代的方法,缓慢逼近 J 的极值点。更新 (w, b) 的方法如下。

w = w − α u 1 w=w-\alpha u_1 w=wαu1

b = b − α u 2 b=b-\alpha u_2 b=bαu2

关键在于找到合适的 u 1   ,   u 2 u_1\ ,\ u_2 u1 , u2 使每一此迭代,(w, b) 总向着 J 减小的方向运动,准确说,向着 J 的一个极值点运动。 u 1   ,   u 2 u_1\ ,\ u_2 u1 , u2​ 可以随迭代次数变化。

我们可以简单地猜一下, u 1   ,   u 2 u_1\ ,\ u_2 u1 , u2 应该满足的性质

  1. 指示当前点偏移极值点的方向,在数学上,“方向” 反应为 “函数值的正负”;
  2. 在每个点都应该可求 u 1   ,   u 2 u_1\ ,\ u_2 u1 , u2 ;(这不是必要性质,我们完全可以想办法规避这些不可求的点,只要这个算法值得我们这么做)

α \alpha α 被称为学习率(learning rate),表示每一次更新 (w, b) 的幅度。

我们发现,取 u 1 = ∂ J ∂ w   ,   u 2 = ∂ J ∂ b u_1=\frac{\partial J}{\partial w}\ ,\ u_2=\frac{\partial J}{\partial b} u1=wJ , u2=bJ​ 恰好能满足这个要求,可以从一元函数的导数中理解到这一点。基于此,我们可以设了一种让计算机迭代优化 (w,b) 的算法,称之为梯度下降算法

即按照如下方法更新 (w, b):

w = w − α ∂ J ∂ w w=w-\alpha \frac{\partial J}{\partial w} w=wαwJ

b = b − α ∂ J ∂ b b=b-\alpha \frac{\partial J}{\partial b} b=bαbJ

这与梯度有什么关系呢?从 w-b 图像上可以看到,点 (w, b) 是沿向量 ( ∂ J ∂ w , ∂ J ∂ b ) (\frac{\partial J}{\partial w},\frac{\partial J}{\partial b}) (wJ,bJ) 的方向运动的,这个向量就是我们所说的 “梯度”。数学上可以证明,沿梯度方向函数下降得最快,这就是为什么我们给 w, b 取相同的 α \alpha α​ 。

  1. 举一反三,了解了这个算法设计的思路,我们是不是还能根据观察,设计出其它算法呢?
  2. 用一种更加通俗的方法来理解梯度下降算法:从山上一点出发,沿着坡度最大的方向小步前进,下坡,最终你一定会走到一个山谷中。

梯度下降算法(code1.2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值