神经网络是如何学习的

360影视 2024-12-12 14:16 3

摘要:最终要寻找什么?提醒一下,我们的目标是手写数字识别的经典视力及神经网络的你好世界。这些数字在二十八乘以二十八像素网格上呈现,每个像素都有零到一之间的某个灰度值,这些决定了网络输入层七百八十四个神经元的激活。

上一个视频我展示了神经网络的结构,我将在这里快速回顾一下,以便我们记住它。我对这个视频有两个主要目标。

·首先是介绍梯度下降的概念,它不仅是神经网络学习方式的基础,也是许多其他机器学习工作方式的基础。

·然后我们将进一步深入研究这个特定网络的执行方式以及神经元的隐藏层。

最终要寻找什么?提醒一下,我们的目标是手写数字识别的经典视力及神经网络的你好世界。这些数字在二十八乘以二十八像素网格上呈现,每个像素都有零到一之间的某个灰度值,这些决定了网络输入层七百八十四个神经元的激活。

·然后后续层中每个神经元的激活基于前一层中所有激活的加权和加上一些称为偏差的特殊数字。

·然后你用一些其他函数来组合这个总和,比如sigma压缩或reno,就像我在上一个视频中演示的那样。

总的来说,考虑到两个隐藏层,每个隐藏层有十六个神经元得任意选择,网络有大约一万三千。

当我们说这个网络对给定数字进行分类时,我们的意思是最后一层中十个神经元中最亮的神经元对应于该数字。请记住,我们在这里想到分层结构的动机是也许第二层可以拾取边,第三层可能拾取诸如循环和线条之类的图案,最后一层可以将这些拼凑在一起识别数字的模式。

所以在这里我们学习网络是如何学习的,我们想要的是一种算法。您可以向该网络显示一大堆血电数据,这些数据以一堆不同的手写数字图像的形式出现,以及它们应该是什么的标签。它会调整这一万三千个权重和偏差,以提高其在训练数据上的性能。

希望这种分层结构意味着它所学到的东西可以推广到训练数据之外的图像。我们测试的方式是在训练网络后向其显示更多以前从未见过的标记数据。然后您会看到它对这些新图像进行分类的准确性。

对我们来说幸运的是this数据库背后的优秀人员已经收集了数以万计的手写数字图像,每张都标有它们应该标记的数字。这使得这个例子成为一个常见的例子。

尽管将机器描述为学习是一种挑衅性的说法,但一旦你看到它是如何工作的,你就会感觉它不再像一些疯狂的科幻小说前提,而更像是一次微积分练习。我的意思是基本上归结为找到某个函数的最小值。

请记住,从概念上讲,我们认为每个神经元都连接到前一层中的所有神经元,定义其激活的加权和中的权重,有点像这些连接的强度。而偏差是该神经元是否倾向于活跃或不活跃。

首先先我们将完全随机的初始化所有这些权重和偏差,不用说这个网络在给定的训练视力上的表现将非常糟糕,因为它只是做一些随机的事情。例如您输入三的图像,输出层看起来一团糟,所以你要做的就是定义一个成本函数,一种告诉计算机的方式不糟糕的计算机输出应该具有对于大多数神经元来说是零的激活,但是对于这个神经元来说是你给我的完全是垃圾。

从数学角度来说,您可以将每个垃圾输出激活之间的差异的平方与您希望它们具有的值相加,这就是我们所说的单个训练视。请注意当网络自信的正确分类图像时这个总和很小,但当网络似乎不知道自己在做什么时这个总和很大。因此您要做的就是考虑您可以使用的所有数以万计的训练视力的平均成本。

这个平均成本是衡量网络有多糟糕以及计算机应该感觉有多糟糕的标准,这是一件复杂的事情。还记得网络本身基本上是一个函数吗?它接受七百八十四个数字作为输入向数值并输出十个数字作为输出。

从某种意义上说它是由所有者些权重和偏差参数化的成本函数,是其之上的一层复杂性。它将大约一万三千个权重和偏差作为输入并输出一个数字来描述这些权重和偏差的严重程度。其定义方式取决于网络在数以万计的训练数据上的行为,有很多值得思考的地方。

但仅仅告诉计算机它正在做一件多么糟糕的工作,并没有多大帮助你想告诉它如何改变这些权重和偏差,以便它变得更好。为了让它变得更容易,不要费力想象一个具有一万三千个输入的函数,只需想象一个简单的函数其中一个数字作为输入,一个数字作为输出如何找到使该函数的值最小化的输入学位积分的学生会知道。

有时您可以明确的算出最小值,但这对于真正复杂的函数并不总是可行。对于疯狂复杂的神经网络成本函数来说,在这种情况的一万三千个输入版本中当然不行一种更灵活的策略,是从任何输入开始然后找出应该采取哪个方向来降低输出。

具体来说,如果您可以计算出所在函数的斜率,则如果斜率为正则将输入一致左侧,如果斜率为负则将输入一致右侧。如果您重复执行此操作,在每个点检查新的斜率并采取适当的步骤,您将接近函数的某些局部最小值。

您可能想到的图像是一个从山上滚下来的球,请注意即使对于这个真正简化的单输入函数,你也可能会遇到许多可能的山谷,具体取决于您从哪个随机输入开始,并且不能保证您遇到的局部最小值将是最小的可能值的成本函数,这也将延续到我们的神经网络案例中。

我还希望您注意,如果您使不长与斜率成正比,那么当斜率趋于最小值时,您的步数会变得越来越小,这有助于您避免过度调整,稍微提高一下复杂性。想象一个具有两个输入和一个输出的函数,您可能会将输入空间视为xy平面,并将成本函数视为其上方的曲面。

您不必询问函数的斜率,而必须询问在该输入空间中应该朝哪个方向迈进,以便最快的减少函数的输出。换句话说下坡的方向是什么?在此想象一个球从山上滚下来是有帮助的。熟悉多变量微积分的人都会知道函数的梯度为您提供了最陡上升的方向,你应该朝哪个方向迈进,以最快的增加函数。

很自然取该梯度的负值可以为您提供以最快的速度减小函数的方向。更重要的是该梯度向量的长度只是了最陡坡度的角度。如果您不熟悉多变量微积分并想了解。

更多信息请查看我为可汗学院所做的有关该主题的一些工作。但老师说现在对你我来说最重要的是原则上存在一种计算者各项量的方法。这个项项告诉你下坡方向是什么以及它有多陡。如果您只知道这些并且对细节不太了解也没关系,如果你能得到这个最小化函数的算法就是计算这个梯度方向,然后向下走一小步,然后一遍又一遍的重复这个过程。

对于具有一万三千个输入而不是两个输入的函数,其基本思想相同。想象一下将网络的所有一万三千个权重和偏差组织成一个巨大的劣项量。成本函数的附体度只是一个项量,它是这个集体巨大的输入空间内的某个方向。它告诉您对所有这些数字的哪些推动将导致成本函数最快速的下架。

当然通过专门设计的成本函数改变权重和偏差来减少它意味着使网络在每条训练数据上的输出看起来不像一个有十个值组成的随机数组,而更像是想要的实际决策。决策它时重要的是要记住成本函数涉及所有训练数据的平均值,因此如果将其最小化则意味着它在所有这些样本上都有更好的性能。

有效计算批读的算法被称为反向传播,它实际上是神经网络落学习的核心,这也是我将在下一个视频中讨论的内容。在那里我真的想花时间来了解给定训练数据的美各权重和偏差到底发生了什么,试图对除了一堆相关为积分和公式之外发生的事情给出直观的感受。

就在这里,现在我想让你知道的最重要的事情与实现细节无关,是当谈论网络学习时我们的意思是它只是最小化成本函数。请注意这样做的一个结果是对于该成本函数来说具有良好的平滑输出,非常重要。这样就可以通过向下走一小步来找到局部最小值。

顺便说一句,这就是为什么人工神经元具有连续范围的激活而不是像生物神经元那样简单的以二元方式激活或不激活这种通过负梯度的倍数反复推动函数输入的过程,称为梯度下降。这是一种收敛到成本函数的局部最小值的方法,基本上是该图中的一个山谷。

当然我仍然展示具有两个输入的函数的图片,因为一万三千维输入空间中的微仪有点难以理解,但有一种很好的非空间方式来思考这个问题。负梯度的每个分量告诉我们两件事,当然符号号告诉我们输入向量的相应分量是否应该向上或向下位移,但重要的是所有这些组成部分的向对大小可以告诉您哪些变化更重要。

您会看到在网络中对其中一个权重的调整可能比对其他权重的调整对成本函数产生更大的影响,其中一些联系对于训练数据来说更重要。因此您可以考虑令人难以置信的巨大成本函数的梯度向量,它编码了每个权重和偏差的相对重要性,也就是说这些变化中的哪一个将为您带来最大的收益。

这实际上只是思考方向的另一种方式。举一个更简单的例子,如果你有一个带有两项,一个变量作为输入的函数,并且你计算出它在某个特定点的梯度为三一。

一方面你可以将其解释为当你于井号三九站在该输入处,沿着这个方向移动会最快的增加函数。在输入点平面上方绘制函数时,该向量就是给您直线上坡方向的方向。

但另一种解读方式是对第一个变量的更改的重要性,是对第二个变量的更改的三倍。至少在相关输入的附近轻推x值会给您带来更大的影响。

八克,让我们缩小范围并总结一下目前为止的情况。网络本身就是一个具有七百八十四个输入核实各输出的函数,根据所有这些加权和进行定义成本函数是其之上的一层复杂性。它以一万三千个权重和偏差作为输入,并根据训练视力输出单一的糟糕程度度量。

而成本函数的梯度又增加了一层复杂性。它告诉我们对所有这些权重和偏差的推动会导致成本函数值发生最快的变化。您可以将其解释为哪些权重的变化最重要。

当您使用随机权重和偏差初始化网络,并根据梯读下降过曾多次调整它们时,它在以前从未见过的图像上实际表现如何?我在这里描述的那个有两个隐藏层,每个隐藏层有十六个神经元,主要是出于美观原因而选择的。这还不错,它对它看到的大约百分之九十六的新图像进行了正确分类。

老师说如果你看一下它搞砸的一些例子,你就会觉得有必要稍微放松一下。现在如果您尝试一下隐藏层结构并进行一些调整,您可以将其提高到百分之九十八,这非常好。这不是最好的,你当然可以通过比这个普通网络更复杂的获得更好的性能。

但考虑到最初的任务是多么艰巨,我认为任何网络在以前从未见过的图像上做的这么好都是令人难以置信的。因为我们从未具体告诉它要寻找什么模式。最初我激发这种结构的方式是通过描述我们可能拥有的希望及第二层可能会失去小边缘,第三层会将这些边缘拼凑在一起识别循环和较长的线,并且这些可能会被拼凑起来一起识别数字。

这就是我们的网络实际上正在做的事情吗?至少对于这一点来说根本不是还记得我们在上一个视频中如何将低层中的锁有神经元到第二层中的给定神经元的连接权重可视化为第二层神经元正在拾取的给定像素模式吗?

当我们实际上对于这些过度相关的权重执行此操作时从第一层到下一层,而不是在这里或那里拾取孤立的小边缘。它们看起来几乎是随机的,只是有一些非常松散的模式中间那里看起来在可能的权重和偏差的深不可测的一万三千为空间中。

我们的网我发现自己有一个令人愉快的局部最小值,尽管成功的对大多数图像进行了分类,但并没有完全识取。我们可能希望的我是为了真正理解这一点。请观察输入随机图像时会发生什么?如果系统很聪明,你可能会认为它会感到不确定,也许并没有真正激活这十个输出神经元中的任何一个火均匀的激活它们,但它却自信的给你一些无意义的答案。

就好像它感觉确定这个随机噪声是五,就像五的实际图像是五一样。换句话说即使这个网络可以很好,好的识别数字他也不知道如何绘制它们,这很大程度上是因为他的训练设置受到严格限制。

我的意思是请站在网络的立场上思考,从他的角度来看整个宇宙只是由以微小网格为中心的明确定义的不动数字组成,而他的成本函数从来没有给他任何激励,除了对自己的决定完全有信心,因此以此作为第二层神经元真正在做什么的图像。

您可能想知道为什么我会出于拾取边缘和模式的动机而引入这个网络,我的意思是这根本不是他最终要做的事情,这并不是我们的最终目标,而是一个起点坦率的说,这是就技术是八十年代和九十年代研究的那种技术。

你确实需要先了解他,然后才能了解更详细的现代变体,而且他显然能够解决一些有趣的问题,但你越深入了解什么那些隐藏层,确实在做事,但看起来却不太智能,将焦点暂时是从网络如何学习转移到你如何学习。

只有当你以某种方式积极参与这里的材料时才会发生这种情况,我希望您做的一件非常简单的事情就是现在暂停并深入思考一下,您可以对该系统进行哪些更改,以及如果您希望他更好的识别边缘和图案等内容,他会如何感知图像,但更好的是为了真正理解这些材料,我强烈推荐迈克尔尼尔森迈克 new森撰写的关于深度学习和神经网络的书在其中,您可以找到要下载和使用该视力的代码和数据,并且本书将逐步引导您完成该代码的作用。

很棒的是这本书是免费且公开的,所以如果您确实从中有所收获,请考虑与我一起为尼尔森的努力捐款。我还在描述中连接了一些我非常喜欢的其他资源,包括您可能还记得上一个视频中的他,他在深度学习方面取得了博士学位,在这个小片段中他谈到了最近的两篇论文,这些论文真正深入探讨了一些更现代的图像识别网络,实际上是如何学习的。

为了确定我们在对话中的位置,第一篇论文采用了一个非常善长途上识别的特别深层的神经网络,并且不是在正确标记的数剧集上对其进行训练,而是在训练之前对所有标签进行了洗牌。显然这里的测试准确性并不比随机测试更好,因为所有内容都是随机标记的,但他仍然能够达到与在正确标记的数据集上相同的训练准确性。

基本上这个特定网络的数百万个权重足以让他记住,是否实际上对应于图像中的任何类型的结构或者只是记忆。如果你看一下准确率曲线,如果你只是在随机数据集上进行训练,那么该曲线几乎以线性方式缓慢下降,所以你真的很难找到可能的局部最小值。

你知道正确的权重可以让您获得准确度,然而如果您实际上是在结构化数据级具有正确标签的数据级上进行训练,那么一开始您会稍微调整一下,但随后您会很快下降到达到该准确度水平,因此从某种意义上来说更容易找到局部最大是因此。

有趣的是,他揭示了几年前的另一篇论文,该论文对网络曾进行了更多简化,但其中一个结果是说如果你看看优化情况,这些网若倾向于学习的局部最小值实际上具有相同的质量。因此从某种意义上来说,如果您的数据级是结构化的,你应该能够更容易的找到它。

来源:阿飞记事

相关推荐