【吴恩达机器学习学习笔记03】Gradient Descent

来源:互联网 发布:mac os 更新卡住 编辑:程序博客网 时间:2024/05/16 11:55

一、问题综述

01
我们上一节已经定义了代价函数J,现在我们下面讲讨论如何找到J的最小值梯度下降(Gradient Descent)广泛应用于机器学习的众多领域。

首先是问题的综述:

1、首先是一个未知函数的损失函数,参数个数也不一定,我们要使其最小化。视频中只用了两个函数。
2、梯度下降要做的就是:对θ0和θ1进行一些初步猜测(通常是选择将θ0设为0);不停地一点一点地改变这两个参数的大小,知道我们找到J的最小值或者局部最小值.
图解:
02
想想给它一个初值,之后从某一点开始出发,就像你要想尽快下山,你的小碎步应该走向那个方向,你要做的是旋转360°,问自己如果想尽快下山我应该往哪个方向跨步,如此往复,直到局部最低点
03
梯度下降算法的一个特点:如果你从右边的位置开始使用梯度下降,最后会达到这里。所以只要你的起始点稍有不同,就会得到一个非常不同的局部最优解。

二、下面是梯度下降算法的定义(Definition):

04

其中,有一些要说明的问题:
:= (赋值符号)
α (学习速率/多大幅度更新参数(下山的时候步伐的大小))

当j=0和j=1时,会产生更新,所以你将更新J、θ0、θ1.
在这个过程中,θ0、θ1是同时被更新的,而更新方法就是左下角Simultaneous Update的部分;左右的区别是,右边你先更新了θ0再带入计算,就会影响到temp1的值。

三、接下来我们详细看一下微分项:

05
假如我们只有单个参数,那么它的损失函数就是一维的,方便我们去理解。
06
想象一下我们已经对参数进行初始化,并开始从某个点开始梯度下降:不断更新θ1:=θ1-(d/dθ1)J(θ1)的值。求导数就是取与对应点相切的那一条直线的斜率,所以我们要减去α倍的正斜率,相当于θ1左移,使θ1变小,这是一个正面的例子。
上面这个是斜率为负数的例子,导数项小于等于0,那么θ1就会不断增大,让它趋近与函数最小值。以上就是对导数项直观的理解。

四、接下来我们看看学习效率(α)的作用:

07
上面是学习速率很小,那么它的收敛速度就会很慢
下面就是学习速度太大的情况,就会因为步伐太大,就会无法收敛,甚至是发散。

08
如果处在局部最低点,那么导数项等于零,所以θ1:=θ1-0,这样就会保持不变。
09
我们最后总体来看一下,假设初始化在如图的点,刚开始比较陡峭,所以导数项比较大,下降速度比较快,但是随着下降,斜率变小,那么我们的“步伐”也随之变小,直到局部最低点,斜率为0保持不变。这就是梯度下降。

五、接下来我们回归到我们之前的线性回归模型:

10
为了明白本文所写,关键在于理解其中的微分名词
公式1
11
然后我们把之前的损失函数的定义也加进去,然后经过多元演算就可以化简成下面的两条式子。
经过我们的计算工作后其实发现它真的其实就是我们的Cost Funtion的斜率(推导过程可以自己推一下,挺简单的)
然后我们把它放回原来的梯度下降的公式中:
12
需要注意的是,这里的θ1和θ0的更新是要同时的!
让我们来看看它是如何工作的:
13
接着,之前我们拿了上面这样一幅图举例子。
14
但是其实为了方便讲解,我们使用一个凸函数的模型会更方便,它只有一个最低点。
接着我们来看一下梯度下降的过程,和单变量的类似,我们采用平面图进行讲解,我们可以来看一下完整的过程:
15
16

17
18
19
直到到这里我们就已经完成了第一个机器学习算法。

阅读全文
1 0
原创粉丝点击