Machine Learning Chinese NLP :::: Gradient Descent Intuition - Chad Salinas ::: Data Scientist
Life and times of Chad Salinas
Chad Salinas, golf caddy, data scientist, chad rPubs, recovering chess addict, daddy caddy
1166
post-template-default,single,single-post,postid-1166,single-format-standard,qode-listing-1.0.1,qode-social-login-1.0,qode-news-1.0,qode-quick-links-1.0,qode-restaurant-1.0,ajax_fade,page_not_loaded,,qode-title-hidden,qode_grid_1300,qode-theme-ver-12.0.1,qode-theme-bridge,bridge,wpb-js-composer js-comp-ver-5.4.2,vc_responsive

Machine Learning Chinese NLP :::: Gradient Descent Intuition

Gradient Descent Intuition

在之前的视频中 我们给出了一个数学上关于梯度 
下降的定义 本次视频我们更深入研究一下 更直观地感受一下这个 
算法是做什么的 以及梯度下降算法的更新过程有什么意义 
这是我们上次视频中看到的梯度下降算法

提醒一下 这个参数 α 术语称为学习速率 
它控制我们以多大的幅度更新这个参数θj. 
第二部分是导数项 而我在这个视频中要做的就是

给你一个更直观的认识 这两部分有什么用 以及 为什么当把

这两部分放一起时 整个更新过程是有意义的 为了更好地让你明白 
我要做是用一个稍微简单的例子 比如我们想最小化的那个 
函数只有一个参数的情形 所以 假如我们有一个代价函数J 
只有一个参数 θ1 就像我们前几次视频中讲的 
θ1是一个实数 对吧?那么我们可以画出一维的曲线 
看起来很简单 让我们试着去理解 为什么梯度下降法 
会在这个函数上起作用 所以 假如这是我的函数 
关于θ1的函数J θ1是一个实数 对吧?

现在我们已经对这个点上用于梯度下降法的θ1 进行了初始化 
想象一下在我的函数图像上 从那个点出发 那么梯度下降 
要做的事情是不断更新 θ1等于θ1减α倍的

d/dθ1J(θ1)这个项 对吧?哦 顺便插一句 你知道 
这个微分项是吧?可能你想问为什么我改变了符号 
之前用的是偏导数的符号 如果你不知道偏导数的符号

和d/dθ之间的区别是什么 不用担心 从技术上讲

在数学中 我们称这是一个偏导数 这是一个导数 
这取决于函数J的参数数量 但是这是一个 
数学上的区别 就本课的目标而言 可以默认为 
这些偏导数符号 和d/dθ1是完全一样的东西 不用担心 
是否存在任何差异 我会尽量使用数学上的 
精确的符号 但就我们的目的而言 这些符号是没有区别的 
好的 那么我们来看这个方程 我们要计算 
这个导数 我不确定之前你是否在微积分中学过导数 
但对于这个问题 求导的目的 基本上可以说 
取这一点的切线 就是这样一条红色的直线 
刚好与函数相切于这一点 让我们看看这条红色直线的斜率 
其实这就是导数 也就是说 直线的斜率 也就是这条 
刚好与函数曲线相切的这条直线 这条直线的斜率正好是 
这个高度除以这个水平长度 现在 这条线有 
一个正斜率 也就是说它有正导数 因此 我得到的新的θ 
θ1更新后等于θ1减去一个正数乘以α. 
α 也就是学习速率也是一个正数 所以 
我要使θ1减去一个东西 
所以相当于我将θ1向左移 使θ1变小了 我们可以看到 
这么做是对的 因为实际上我往这个方向移动 
确实让我更接近那边的最低点 所以 梯度下降到目前为止似乎 
是在做正确的事 让我们来看看另一个例子 让我们用同样的函数J 
同样再画出函数J(θ1)的图像 而这次 
我们把参数初始化到左边这点 所以θ1在这里 
同样把这点对应到曲线上 现在 导数项d/dθ1J(θ1) 
在这点上计算时 看上去会是这样

好 
但是这条线向下倾斜 所以这条线具有负斜率 对吧? 
或者说 这个函数有负导数 也就意味着在那一点上有负斜率 
因此 这个导数项小于等于零 所以 当我更新θ时 
θ被更新为θ减去α乘以一个负数 因此我是在用 
θ1减去一个负数 这意味着我实际上是在增加θ1 
对不对?因为这是减去一个负数 意味着给θ加上一个数

这就意味着最后我实际上增加了θ的值 因此 我们将 
从这里开始 增加θ 似乎这也是我希望得到的 也就是 
让我更接近最小值了 所以 我希望这样很直观地给你解释了 
导数项的意义 让我们接下来再看一看学习速率α 
我们来研究一下它有什么用 这就是我梯度下降法的 
更新规则 就是这个等式 让我们来看看如果α 太小或 α 太大 
会出现什么情况 这第一个例子

α太小会发生什么呢 这是我的函数J(θ) 
就从这里开始 如果α太小了 那么我要做的是要去 
用一个比较小的数乘以更新的值 所以最终 它就像一个小宝宝的步伐 
这是一步 然后从这个新的起点开始

对吧 
小碎步 所以如果我的学习速率太小 结果就是 
只能这样像小宝宝一样一点点地挪动 去努力接近最低点 
这样就需要很多步才能到达最低点 所以如果α 太小的话 
可能会很慢 因为它会一点点挪动 它会需要

很多步才能到达全局最低点 
那么如果α 太大又会怎样呢 这是我的函数J(θ) 
如果α 太大 那么梯度下降法可能会越过最低点 
甚至可能无法收敛 我的意思是 比如我们从这个点开始 
实际上这个点已经接近最低点 因此导数指向右侧 但如果α 太大的话 
我会迈出很大一步 也许像这样巨大的一步 对吧?所以我最终迈出了一大步

现在 我的代价函数变得更糟 因为离这个最低点越来越远 
现在我的导数指向左侧 实际上在减小θ 但是你看 如果我的学习速率过大

我会移动一大步 从这点一下子又到那点了

对吗?如果我的学习率太大 下一次迭代 
又移动了一大步 越过一次 又越过一次 一次次越过最低点 直到你发现 
实际上 离最低点越来越远 所以 如果α太大 
它会导致无法收敛 甚至发散 现在 我还有一个问题 
这问题挺狡猾的 当我第一次学习这个地方时 
我花了很长一段时间才理解这个问题 如果我们预先把θ1 
放在一个局部的最低点 你认为下一步梯度下降法会怎样工作? 
所以假设你将θ1初始化在局部最低点 
假设这是你的θ1的初始值 在这儿 它已经在一个局部的 
最优处或局部最低点 结果是局部最优点的导数 
将等于零 因为它是那条切线的斜率 
而这条线的斜率将等于零 因此 此导数项等于0 
因此 在你的梯度下降更新过程中 你有一个θ1 
然后用θ1 减α 乘以0来更新θ1 所以这意味着什么 
这意味着你已经在局部最优点 它使得θ1不再改变 
也就是新的θ1等于原来的θ1 因此 如果你的参数已经处于

局部最低点 那么梯度下降法更新其实什么都没做 它不会改变参数的值 
这也正是你想要的 因为它使你的解始终保持在 
局部最优点 这也解释了为什么即使学习速率α 保持不变时 
梯度下降也可以收敛到局部最低点 我想说的是这个意思 
我们来看一个例子 这是代价函数J(θ) 
我想找到它的最小值 首先初始化我的梯度下降算法 
在那个品红色的点初始化 如果我更新一步梯度下降 
也许它会带我到这个点 因为这个点的导数是相当陡的 
现在 在这个绿色的点 如果我再更新一步 
你会发现我的导数 也即斜率 是没那么陡的 
相比于在品红点 对吧?因为随着我接近最低点 
我的导数越来越接近零 
所以 梯度下降一步后 新的导数会变小一点点 
然后我想再梯度下降一步 在这个绿点我自然会用一个稍微 
跟刚才在那个品红点时比 再小一点的一步 
现在到了新的点 红色点 更接近全局最低点了 
因此这点的导数会比在绿点时更小 所以 
我再进行一步梯度下降时 我的导数项是更小的 
θ1更新的幅度就会更小 
所以你会移动更小的一步 像这样 随着梯度下降法的运行 
你移动的幅度会自动变得越来越小 直到最终移动幅度非常小 
你会发现 已经收敛到局部极小值 所以回顾一下 
在梯度下降法中 当我们接近局部最低点时 梯度下降法会自动采取

更小的幅度 这是因为当我们接近局部最低点时 
很显然在局部最低时导数等于零 所以当我们 
接近局部最低时 导数值会自动变得越来越小

所以梯度下降将自动采取较小的幅度 
这就是梯度下降的做法 所以实际上没有必要再另外减小α 
这就是梯度下降算法 你可以用它来最小化 
最小化任何代价函数J 不只是线性回归中的代价函数J 
在接下来的视频中 我们要用代价函数J 
回到它的本质 线性回归中的代价函数 
也就是我们前面得出的平方误差函数 结合梯度下降法 
以及平方代价函数 我们会得出第一个机器学习算法 
即线性回归算法 【教育无边界字幕组】翻译:10号少年 校对:Femtoyue 审核:所罗门捷列夫 
这也就是你所需要的东西,因为能够使你的解决方案维持在局部最优。

同样也解释了为什么梯度下降能够到达局部最优值, 
即使在学习率alpha固定的情况下。 
来解释一下我这么说的意思吧,可以参考一下这个例子 
现在我们有关于theta的成本函数J, 
我想把它最小化,那我首先初始化我的算法, 
我的梯度下降算法,初始点设在那个品红色的点。 
在梯度下降中,如果我前进一步,可能它会把我带到这个点。 
因为那里的导数很陡。 
对吧? 
现在我到达了这个绿色的点,如果我用梯度下降法再走一步, 
你可以注意到,这里的导数,也就是坡度,在这个绿色的点, 
它没有品红色的点那么陡峭。 
因为越接近最小值,对应的导数越来越接近于0。 
在我接近最优值的过程中。 
所以在一步下降后,新得到的导数就会变小一点。 
所以我们还要再前进一步。 
我自然会采取稍微小一点的步子, 
相比于从品红色点到绿色点的那一步要小。 
现在到达一个新的点,一个红色的点,我更加接近全局最优值了, 
所以这里的导数会比绿色点处更小。 
在梯度下降中再走一步,

现在,导数项变得更小了, 
所以theta1的变化也更小了,所以走这样一小步。 
当梯度下降法运行起来时, 
会自动地采取越来越小的步。

直到最终你前进非常小的步子, 你知道, 
你最终到达了局部最优值。

因此, 让我们回顾一下, 在梯度下降中, 当我们接近一个局部的最小值的过程里, 
梯度下降算法会自动采取越来越小的步子。 
这是因为当我们接近局部最优时, 
其定义就是导数等于0。 
当我们接近局部最优,导数项会自动变 
小,所以梯度下降会自动采取更小的步子。 
这就是不需要减小alpha或时间的原因。

这就是梯度下降算法,你可以用它来最小化 
任何成本函数J,而不是我们为线性回归定义的那个成本函数J。 
在下一个视频里,我们将会用函数J, 
将其完全按照线性回归的成本函数来设置, 
也就是我们之前提出的平方成本函数。 
采用梯度下降算法和这个成本函数, 并把它们放在一起。 
这就得到我们的第一个学习算法, 
也就是一个线性回归算法。

Any programming problem can be solved by adding a level of indirection.

– David J. Wheeler

No Comments

Sorry, the comment form is closed at this time.