梯度下降(Gradient Descent)吴恩达老师课程笔记

本文介绍了梯度下降算法如何在机器学习中寻找线性回归和深度学习模型中的参数组合,使得代价函数达到最小值。算法通过迭代调整参数值,利用梯度指示下降方向,解释了学习率对算法效率的影响,并特别强调了线性回归模型中的全局最小值性质。
摘要由CSDN通过智能技术生成

        上一节中学习了代价函数,不同的w和b的值会产生不同的J值,也就是会产生不同的成本价值,如果我们有更系统的方法去找到合适的w和b值使得有最小的成本价值,那将会方便很多。事实上我们可以通过一种叫做梯度下降的算法来做到这一点,梯度下降(Gradient Descent)算法在机器学习中无处不在,不仅用于线性回归(linear regression),还会用在深度学习模型(deep learning model)。

定义

     假设现在有代价函数J,参数为w和b,我们想要得到的是J的最小值以及此时的w和b,按照上一篇学习的,J(w,b)是线性回归的代价函数,但是事实上梯度下降是可以用来尝试最小化任何函数,不仅仅是线性回归的成本函数,它也可以适用于有更多的参数的代价函数。   

         比如现在有一个函数,min J(w_{1},w_{2},w_{3}...,w_{n},b),梯度下降也是可以用来尝试找到一组w_{1},w_{2},w_{3},...w_{n},b 使得J值最小。

步骤

  • 对w和b做初始的猜测(比如将其都设置为0,w=0, b=0)
  • 每次改变一点,不断改变w和b的值使得J(w,b)的值减小最快
  • 直到J达到或者接近最小值

tips:对于有些函数可能存在不止一个可能的最小值

举个栗子:

        这个例子不是平方误差代价函数(squared error cost function),如果是平方误差代价函数,图像往往只有一个最低点,下面这个代价函数图像是在训练神经网络模型时可能碰到的,我们可以看到底部有w和b,若给定了w和b,就可以在图像表面上找到一个对应的J的值。

         我们如果把这张图想象成一片小山丘,现在我们站在山上的某一点(对w和b做初始猜测),环顾四周360°,找到一个下山最快的方向,超这个方向走一小段,再环顾四周,找下山最快的方向,超这个方向走一小段,一直进行这个动作(不断改变w和b的值,每次改变一点,使得J减小最快),然后我们就可以到达一个山谷(直到J达到或者接近最小值)。

        梯度下降有一个有趣的特性,如果我们选择了不同的初始值,可能会得到不同的结果,这个结合小山丘的例子也是容易理解的(吧)。

算法实现

         首先我们先给出梯度下降算法的公式w=w-\alpha \frac{d}{dw}J(w,b)

        在上面这个公式中,a是学习率(Learning rate),学习率一般在0到1之间,学习率基本上控制在下坡的时候一步有多大,后面对代价函数关于w求偏导的一部分则是表示朝哪个方向走。

        代价函数是有两个参数的,除了w还有b,依据上面的w的梯度下降公式,我们也可以得到b的梯度下降算法的公式为b=b-\alpha\frac{dJ(w,b)}{db}, 梯度下降算法的步骤是不断改变w和b的值使得J(w,b)的值减小最快,直到J达到或者接近局部最小值,那么在这个算法中,我们将重复运算上面的更新w和b步骤,直到算法收敛(收敛在这里是说达到了局部一个最小值的点,并且此时w和b不再发生很大的变化)

        那接下来可能就会想到这样一个问题,就是如果我们先改变了w,那在计算b的时候,使用的w就是更新过的w了,但是w和b应该是一起变化的,考虑到这一点,算法应该被写为下面这样:

repeat until convergence{

        temp\_w=w-a\frac{dJ(w,b)}{dw}

        temp\_b=b-a\frac{dJ(w,b)}{db}

        w=temp\_w

        b=temp\_b

}

(一定要注意顺序)

理解算法

        最后再来深入理解一下梯度下降在做什么,以及这样做的意义

         假如只考虑w,让b等于0,那么代价函数图像应该是二维的,依据之前学习的代价函数知识,大概做出来上面这张图(平方误差代价函数),如果现在考虑的点是红色圈出来的点,\frac{dJ(w)}{dw}就是这一点的切线的斜率,此时斜率是正的,学习率a是介于0到1之间的一个数字,所以w应该是减小的,从图中看,很明显是朝着最小值点的方向在前进。如果当前点在左边,那也是成立的,\frac{dJ(w)}{dw}小于0,w是增大的,也是符合期望的。

学习率

        学习率的选择将会对梯度下降算法的效率产生巨大的影响,如果选择的不好,下降率甚至有可能根本不起任何作用。

        我们来看看学习率过大或过小会有什么样的效果

学习率过小

        如果学习率过小,那下降将会非常缓慢,代价函数确实是在减小的,但是减小的速度很慢,过于浪费时间

学习率过大

        如果最开始的点是左边粉色的点,它本来是很靠近最低点了,在更新一次w之后,由于学习率a很大,就意味着会给当前w加一个很大的值,那有可能就会离最低点更远了,那么最终有可能得到的是这样的一个图像,有可能永远不能达到最小值

        那最终的停止条件是否正确呢?如果已经达到了或者在最低点附近,那么斜率应该是等于零或者接近于0,相当于是w=w-a\times 0, 所以说当w和b不再发生很大变化时,我们认为达到了最低点。

用于线性回归的梯度下降

        线性回归模型(Linear Regression Model)的公式是f_{w,b}(x)=wx+b, 代价函数(cost function)的公式:J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})^{2}, 梯度下降算法上面刚写过了。

带入公式可以得到:

        \frac{dJ(w,b)}{dw}=\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}

        \frac{dJ(w,b)}{db}=\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})

        那么线性回归的梯度下降过程我们也就可以方便的写出来

repeat until convergence{

        temp\_w=w-a\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{(i)}

        temp\_b=b-a\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})

        w=temp\_w

        b=temp\_b

}

        一个普通的代价函数可能会有多个局部最小值的点

        但是线性回归的平均误差代价函数只有单个全局最小值,所以只要选择了一个恰当的学习率a,就会收敛到全局的最小值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值