梯度下降正餐篇の本体学习-面向小学生的人工智能(2)

本文介绍了梯度下降算法在寻找函数最小值中的应用,通过简化模型,忽略神经网络的具体结构,将注意力集中在最小化目标上。通过模拟球体在山谷中滚动的过程,解释了如何通过不断调整参数来实现函数的最小化。梯度下降算法通过计算函数的梯度向量,选择合适的学习速率,不断迭代以逼近函数的最低点。尽管存在一些可能导致失败的情况,但在大多数情况下,梯度下降是神经网络训练中有效的最小化方法。
摘要由CSDN通过智能技术生成

在前面我们说到,训练神经元网络的目标是去发现可以最小化二次代价函数的权重和偏置单元。但它有很多令人分心的结构,如将w和b解释为权重和偏置单元,后面会提及的σ函数,网络架构的选择,MNIST等等,事实证明我们可以在忽略大部分结构的情况下理解大部分面临的问题,并且把精力放在最小化。所以现在我们将要去忘记所有和二次函数有关的特殊形式,神经元网络的连接等等。取而代之的是,我们将想象我们有一个带着许多参数的简单函数,然后我们想要去最小化这个函数,我们将使用梯度下降这个可以解决大部分最小化问题的技术去解决它。


让我们假设我们会尝试最小化的方法是C(v)v并不是表示一个变量,而是表示一系列的变量,比如V1,V2...注意我已经把wb的符号替换成了v,来突出这可以成为任何函数,我们不会再专注于神经网络的环境。

 

首先我们想象C(v)包含两个变量v1v2函数的图像,这有助于接下来我们把它最小化,如下图,当它有两个变量的时候,它实际上是一个三维平面。


我们想要的是去找到上面函数图像中球面的最低点(最小值),当然,因为上面已经把这个函数绘制出来了,我们可以用眼睛非常直观地观察图形并且找到最低点。在这个意义上,上面的方程可能有一些简单了,实际上通常函数C可能会是一个带着非常多变量的复杂方程,并且它并不能用肉眼去观察到图像的最低点。

 

一个解决问题的方法是使用微积分学去尝试寻找到最低点。你可能会想到我们可以计算导数然后尝试使用它们去找到C的极值点。(这仅仅需要非常低级的微积分知识,如果你不能理解这句话,请先百度后再继续看下去)

 

如果我们足够幸运的话,在C也许只有一个或者少数变量的时候也许会成功,但是如果我们有许多变量的情况下就是一场噩梦了,并且我们经常希望有更多的变量作用于神经网络-大型的神经网络通过非常复杂的方法结合数亿的权重和偏置单元,这时候使用微积分并不能解决问题。

 

微积分不能解决,但是幸运的是我会告诉你这里有一种非常漂亮的比喻来表明一个算法运行的很好。让我们先把我们的算法比作一座山谷,我们想象一个球从山的滑坡上滚落。我们的日常经验告诉我们这个球最终会滑倒山的最低点。如果我们能够模拟这个过程,那么也许我们可以使用这个方法去找到函数的最小值?让我们来试一试,我们将会随机选择一个开始点,然后模拟球滑落山谷的过程。我们可以通过不断的计算C的导数来实现这个过程(也许是一些二次导数),这些导数将会告诉我们所需要知道的有关于这个山谷形状的所有事情,和之后这个球应该如何滑落。

 

基于我们上一段所说的,你可能会觉得我们需要尝试写下球运动的牛顿等式,考虑摩擦和重力等等。事实上,我们并不需要那么严格的去分析球的下落过程。我们会制定一个算法去最小化C。而非制作一个准确的物理规则的模拟!球形视图旨在刺激我们的想象,而不是限制我们的思考,所以让我们超越各种物理细节的限制,简单的问自己:如果我们能成为一天的上帝,然后可以对物理制定我们自己的规则,主宰这个球应该如何滚动,那么什么样子的规则可以保证这个球一直滑向最低点呢?


为了让这个问题更加精准,让我们想一下当我们在v1这个方向移动这个球一个小的变化量Δv1,然后在v2方向移动一个小的变化量Δv2.微积分会告诉我们函数C会发生如下改变:


这里出现了一个新的符号,它的英文是partial读音请自行听取,它的直译是部分的,偏爱的,偏袒的,在微积分里面,它指的是偏微分。

对于一个多元函数相当于固定y变量,对x进行求导,在此处等式左边就相当于固定v2变量,对v1就行求导,v1的导数代表了ΔCv1轴的斜率,两处斜率乘以各自相对应变量的变化量相加便会约等于函数的变化量。

我们需要找到一种方法通过改变Δv1和Δv2来让ΔC为负的,这样我们才能通过改变它们来让这个球滑落山谷。为了解决怎么去做出这个改变,我们需要定义一个Δv来表示向量在v的改变量,Δv≡(Δv1,Δv2)T,这里的T同样是一个转置操作符,把行向量转化成列向量,我们同样会定义一个C去成为偏导数的梯度向量我们用去表示梯度向量,即:


我想要澄清一些某些时刻会让人们误解梯度的事情。当我们第一次看到这个符号,人们也许想要知道对于这个符号他们应该如何理解。事实上,应该把整个理解为一个单独的数学对象 - 一个恰好是有两个符号的向量,从这个角度看来,它只是一个标志而已,告诉你“hey,是一个梯度向量”。当然也可以表示其他东西,例如,当作一个微分的操作符,但在这里,它仅仅是一个梯度向量,请务必牢记。


在这些定义的情况下,Δc的表达式可以重写为 :

在这里Δv来表示向量在v的改变量,而则表示梯度向量,两者相乘约等于函数C的变化量


这个等式可以帮助我们理解为什么被称为梯度向量(gradient vector):把速度v 的改变量和C的改变量关联起来,就像我们希望梯度做的一样,但真正让我们感到开心的是这个等式让我们知道了如何选择一个Δv从而使得ΔC是负的,尤其是,假设我们选择

在这里是一个小且负的参数(它其实是机器学习中的学习速率)


这两个等式告诉我们

因为保证了ΔC小于等于0,

即如果我们根据公式10改变v,C将会一直减少而不增长。(在方程9中也是一样)。这恰好是我们想要的特性!我们将会用这个等式去定义这个球在我们梯度下降公式中的运动规律,即我们将会使用这个等式去计算Δv的值,然后通过这个数目去移动球的位置v。也许你有疑惑,用等式10去计算Δv的值,那么等式10的值又是怎么计算出来的呢,通过再前面的方程我们可以知道等式只要知道了方程(已知条件)和参数,我们就可以求出,而又是我们自己定义的,所以实际上剩下的就只剩下参数的确定了,关于参数的确定是一个比较困难的事情,后面再说。

v'是v移动后的点,箭头表示这两个点之间的距离,即等于 v - Δv,再将

带入,既可得到等式11。


然后我们会再一次使用这个更新了的规则,去使得再一次移动。如果我们一直保持这样做,我们将会不断的减少C直到我们到达最低点。

总结一下,梯度下降公式的工作室是重复的计算出梯度C,然后确定一个学习速率,再通过不断的移动到相反的方向,降落到山谷的最低点。我们可以把它可视化成这样:

注意梯度下降的规则并不是要重塑一个真实的物理运动。在真实的生活中,球拥有它的动量,这会使得它在最低点的时候不会停下来而是向上滑动一段距离。这是因为重力的作用。相比之下,我们的选择Δv的规则就没有这些因素的影响。

为了让梯度下降正常工作,我们需要选择一个学习速率去让这个足够小,如果我们不这么做,我们会得到一个大于0ΔC同时间内,我们也不希望太小,因为这样会让ΔV太小,这样子的话梯度下降函数就会工作得非常慢了,实际工作中,经常是多变的,这样可以让保持一个比较好的近似值,但又不至于使得方程工作得过慢。我们接下来将会看到它如何工作。



我已经对梯度下降在C是一个两个变量的函数的时候作出了解释,但是,事实上,只有在C有更多的参数的时候它才能工作得更好。假设C是一个有m个参数的特别函数


即使当C是一个有许多变量的函数,只要不断的去执行更新这个规则

你可以认为更新这条函数就是执行梯度下降算法。它给了我们一个重复的去改变位置v的方法,以让我们找到函数C的最低点。这个函数不会总是成功,几种状况会导致失败并且阻止我们找到最低点,这一点我们会在后面的章节展开。但大部分情况下运用它进行梯度下降,一般都会工作得非常不错,我们会发现它是一种在在神经元网络中最小化代价函数的有力的方法。


梯度下降是寻找最低点的最佳战略。让我们假设我们尝试去创造一个在某个位置上的移动 以能够尽可能的减少C。这相当于最小化 ΔC≈∇C⋅Δv. 我们会压制移动的步伐长度从而使‖Δv‖=ϵ,ϵ是一个固定的小的正数,步伐即是我们前面说的学习速率,我们想要移动一段比较小的,同时是固定大小的步伐,当然学习速率也可以是变动的,具体后面会讲到。并且我们尽可能地尝试找到减少C的运动方向。它可以保证最小化∇C⋅Δv关于Δv的选择 是。其中会被大小所约束。所以梯度下降可以被视作是一种在一个方向中走尽可能小的步伐,并且在最大化缩减C的方法。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值