欧洲杯足彩官网-星空体育网站入口官网手机版 > > 正文

何恺明的mit人工智能第一课:深度表征学习-欧洲杯足彩官网

分享至

文:城主

何恺明,大名鼎鼎的深度残差网络(resnets)的主要发明者。没有resnets就没有现在大放异彩的的深度学习ai大模型。

直接上百度百科:

何恺明(kaiming he),1984年出生于广东广州,2003年广东省高考满分状元。2003-2007年就读于清华大学物理系基础科学班,连续3年获得清华奖学金,本科毕业后进入香港中文大学攻读研究生,师从汤晓鸥。2009年成为cvpr最佳论文首位华人得主。2011年获得香港中文大学信息工程哲学博士学位,之后进入微软亚洲研究院工作。2016年8月加入facebook ai research(fair),担任研究科学家。2017年获得iccv最佳论文奖(马尔奖)。2018年获得cvpr大会pami青年研究者奖。2022年入选ai 2000人工智能全球最具影响力学者榜单,综合排名第一。2023年获得未来科学大奖数学与计算机科学奖。2024年2月加入麻省理工学院(mit)电气工程与计算机科学系,担任副教授。

本文推荐的讲座即为何恺明在mit传道授业生涯试讲的第一课,一方面很有意义,另外一方面,着实精彩。纵观目前所能看到的公开资料,甚少有在知识深度广度兼备之上还能讲解得如此清晰易懂的深度学习讲座,ppt也做得很棒,非常适合有一丁点儿科普基础希望提高深度学习认知的读者们,强烈推荐。

原讲座为英文,本文根据讲座原意全部重写为中文书面文字。


喜欢看视频的朋友,讲座的视频完整中英版 (字幕错别字请见谅 不影响理解):

--天空之城中文版--


好的,让我们开始。我叫恺明,实际上,我将在下个月加入一所大学(mit),因此,我今天在这里做的是一份无薪工作。现在,让我们看看我这份无薪工作的名称——深度表征(深度表示)学习。我将在图像识别的背景下,以及可能的其他一些场景中讨论这个主题。以下是本教程的概述。


首先,我将讨论什么是表征学习以及为什么表征学习是一个重要问题。然后,我将讨论如何构建和训练非常深的神经网络。我将讨论一些具有里程碑意义的有影响力的神经网络架构。接着,我将介绍一些重要的组件和元素,这些元素对于我们训练非常深的神经网络架构是必要的,包括一些初始化方法,归一化方法,以及残差连接的引入。最后,我将介绍图像识别的应用和一些序列处理问题。


那么,为什么要深度学习?为什么大约十年前,人们突然开始几乎到处谈论深度学习?简单来说,深度学习就是表征学习。有趣的是,十多年前,深度学习并不流行,也没有受到计算机视觉或机器学习领域主流会议的青睐。然而,一些深度学习和神经网络架构的先驱,比如yann lecun和yoshua bengio,决定再举办一次对深度学习研究更加友好、更加开放的会议。他们决定将他们的新会议命名为国际学习表征会议,这反映了深度学习和表征学习之间的密切关系。

那么,为什么表征学习如此重要呢?表征学习是一个常见问题,可以在许多领域的许多应用程序中找到。表征学习的一个共同目标是将原始数据转换为一些高级表征空间,我们在这个表征空间中可以更好地进行压缩、抽象或概念化。当计算机算法在这个表征空间上运行时,它们可以更轻松地解决非常复杂的问题。并且,根据场景的不同,原始数据可以有多种不同的形式。例如,在计算机视觉中,原始数据可以是图像或视频中的像素;在自然语言处理中,原始数据可以是字母或单词;在语音识别或音频识别中,原始数据可以是音频波或频谱图;在玩游戏的情况下,原始数据可以是游戏板的状态;在一些科学问题中,原始数据可以是分子序列、dna序列或其他一些结构。在许多此类应用程序中,一个常见的问题是如何在某些高级抽象空间中表征数据,这样计算机算法就可以更容易地解决问题。


现在,让我们以围棋游戏为例。在过去的几十年里,使用计算机解决围棋游戏被认为是一个非常具有挑战性甚至可能不可行的问题。部分原因是围棋游戏中的不同状态数量呈指数级增长。例如,棋盘有19列和19行,如果我们把所有的东西加在一起,那么就会有361个位置,每个位置都可以有黑、白、空白三种选择。那么这将得到3的361次方种不同状态。这是一个巨大的数字,如果计算机算法要在这个状态空间中进行分析甚至枚举或记忆,那么今天的计算机就无法使用这种表征来解决这个问题。

然而,如果真是这样的话,那么我们可能永远无法解决计算机视觉或图像识别问题。现在,让我们考虑一个非常简单的计算机视觉案例。假设我们有一个非常小的图像,即500像素x500像素,每个像素可能具有三种颜色通道:红色、绿色和蓝色,每个颜色通道可能有256个不同的值。如果我们把所有的东西放在一起,那么我们将得到256的3x500x500次方个不同的状态,只是为了一个非常小的图像。如果我们的计算机视觉算法直接在这个原始像素空间上运行,并且如果该算法要枚举或记住这个状态空间,那么我们永远无法解决计算机视觉问题,因为这个问题比围棋问题更棘手。

然而,这并不是计算机视觉算法解决图像识别问题的方式。我们不是直接在原始像素空间上工作,而是使用一个模型将原始像素转换为一些表征形式。如今,我们做到这一点的最成功的模型是使用深度神经网络,例如卷积神经网络。然后这些表征将为我们提供一些非常好的抽象或概念化压缩。当使用这些表征时,计算机算法可以解决许多不同的问题,例如图像分类、对象检测或图像分割。

类似地,回到围棋的问题,我们可以将围棋中的棋盘想象成一个非常小的图像。该图像只有19x19像素,每个像素只有三种可能的颜色:黑色、白色和空白。然后我们可以使用相同的想法。例如,我们可以使用卷积神经网络来处理游戏的状态并获得一些高级抽象。并且计算机算法可以直接在这个高级抽象空间上工作,做一些分析或做一些搜索。这将使围棋问题更容易得到解决。这实际上是著名的alphago算法背后的众多基本思想之一。


这张图来自alphago zero论文。在这张图中,作者比较了四种不同版本的alphago棋手。这些版本是按照l-low评级进行比较的,通常评级越高意味着围棋表现越好。这个图简单地表明,通过将深度从例如12层增加到40层,我们可以轻松地享受围棋表现方面的巨大提升。


事实上,如果我们不断增加神经网络的深度,例如增加到80层,我们将看到围棋性能的另一个巨大提升。有趣的是,这种表现甚至比世界上最好的人类玩家还要好。而alphago算法可以在不使用任何人类知识的情况下实现这种性能。

还值得注意的是,对于这里比较的四五个不同的棋手,许多其他组件完全相同。例如,强化学习算法和蒙特卡罗树搜索算法的用法是完全相同的。这五个不同版本中只是用于学习围棋表征的神经网络架构有所不同。因此,我希望这能让您了解表征学习对于我们解决非常具有挑战性的问题有多么重要。


现在,让我们回到计算机视觉的问题,接下来我要讲的是我们如何表征图像。在深度学习流行之前,计算机视觉领域就已经出现了。假设我们有一张图像,我们可以将其视为一堆像素,我们可以直接将这堆像素发送到分类器中。分类器可以是svm分类器、支持向量机,也可以是决策树,也可以是随机森林。通常这不是一个好的星空体育网站入口官网手机版的解决方案,因为即使对象的微小变化也会导致原始像素表征空间发生较大变化。

那么,为了解决这个问题,我们如何表征图像呢?我们可以通过观察图像,找出它们的相似之处。有人做过这个实验吗?这是一个很好的问题。我不是一个好的围棋手,但我知道有一些关于围棋的非常奇特的术语。这是一个关于专业玩家的术语,他们对当前状态有自己的感觉。因此,围棋手对于围棋有自己的内部表征,而且这些内部表征可能与计算机算法可以学习到的表征不太一致。实际上,自alphago的开发以来,我相信许多顶级玩家已经开始利用人工智能来改善他们对人类内在表现的理解。现在,让我们回到我们的主题。

为了得到更好的表现,我们可能会考虑计算像素顶部的边缘,因为这将为我们提供更稳定的表现,以防输入空间的照明或颜色发生变化。然后,再次为了得到更好的表现,我们可能会考虑计算边缘的方向或方向的直方图,或者我们可以在直方图上运行一些聚类算法。

实际上,如果问题足够简单,这个流程可以很好地工作。然而,在这个流程中,我们需要人类或者计算机视觉专家来定义什么是好的表现或者什么是好的特征来解决当前的问题。因此,虽然特征设计问题对于一些低级表现,如边缘、纹理或颜色的定义,是相对可行的,但如果我们想定义一些高级表现,这个问题将变得非常困难。例如,我们很难定义什么是鱼,什么是猫,或者另一方面,什么是树,或者什么是人。


实际上,在计算机视觉领域,过去几十年里,定义高级抽象和表现一直是计算机视觉社区的主要瓶颈。深度学习为我们解决计算机视觉问题提供了另一种方法,如图像识别等许多复杂问题。深度学习的一个关键思想是将一组简单的通用模块组合成高度复杂的函数,帮助我们解决高度复杂的问题。因此,如果你从我今天的演讲中只能得到一个信息,那就是这个信息。我将在本次演讲的以下部分中多次重复这一点。

因此,在一组通用模块的帮助下,我们可以轻松地构建多个抽象级别并学习多个表现级别。而这些模块的具体实例,例如这些模块的参数或权重,可以通过反向传播来学习。因此,对人类知识的依赖大大减少。同样,学习是在一些更大规模的数据上完成的,因此人类知识的要求已经从设计特征转移到收集与问题相关的数据的另一个问题。

总的来说,深度学习的所有这些关键思想或关键概念可以帮助我们大大减少我们解决手头问题的领域知识。因此,深度学习可以成为我们解决许多领域许多问题的通用工具箱的原因有很多。


接下来,我将讨论如何学习图像识别的深度表征。我将回顾卷积神经网络发展史上的一些里程碑式且有影响力的步骤。我将从大约 30 年前开发的 lenet 架构开始。


lenet 架构是卷积神经网络(简称 convnet 或 cnn)的成功实例之一。简单来说,卷积神经网络是一种平移不变的架构。因此,通过平移不变性,我们通常意味着如果我们在滑动窗口内进行一些操作, 并且当窗口平移几个像素时,我们仍然会有或多或少相同的操作。平移不变性还意味着,如果我们将整个输入图像平移几个像素,我们仍然可以拥有相同的输出类标签,如果我们正在做分类问题。

然后,lenet架构引入了几个基本元素对于卷积神经网络。这些元素包括卷积层、池化层的使用,全连接层,更重要的是,通过反向传播端到端地训练整个架构的想法。再说一遍,卷积神经网络只是深度学习方法的一个实例,即将简单的模块组合成高度复杂的功能。接下来,我将介绍其中两个简单的基础模块。


第一个模块是卷积层。简单来说,卷积层只是局部连接加上空间权重共享。与卷积层相比,最流行的层类型之一是全连接层。在这种情况下,每个输出神经元都连接到该层中的每个输入神经元。在这里,每个连接代表一个权重或一个可以训练的参数。也就是说,如果我们有很多输入神经元,并且如果我们也有很多输出神经元,那么我们将有大量的可训练参数。这并不理想。

为了部分解决这个问题,人们开发了另一种层类型,称为局部连接层。在这种情况下,每个输出神经元仅连接到输入神经元的一小部分。通常在实践中,这些小子集将位于输出神经元周围的滑动窗口或局部邻域中。并且引入局部连接层可以大大减少可训练参数的数量。卷积层仅领先一步。也就是说,当我们在输入图像空间的不同位置滑动窗口时,我们可以在不同的空间位置之间共享权重。


卷积神经网络的另一个重要模块是池化层。池化层的作用是减小特征图的大小,因此如果输入图像很大,可以大大减少所需的计算量。另一方面,池化层也可以帮助实现局部不变性。也就是说,如果我们的输入内容在一个小窗口内经历一些局部抖动,我们仍然能够在该窗口中获得或多或少相同的表征。这可以帮助我们获得更多的抽象表征,这是我们做分类问题所需的属性。


然后给出这组简单的通用模块,接下来我将逐步介绍学习架构。尽管这种建筑的提出已经有30多年了,但我们漫步在这座古典建筑中总是令人愉悦和鼓舞。在这种情况下,神经网络的输入只有一个颜色通道,因为它是灰度的。在此示例中,空间大小将为 32 x 32。然后它将执行第一组卷积核,其空间大小为 5 x 5。


在本例中,它有六个不同的输出通道。这将为我们提供第一组输出特征图。在本例中,空间大小为 28 x 28。因为我们的卷积层有六个输出通道,那么这组特征图也将有六个输出通道。


然后我们可以应用第一个池化操作,将每个维度的空间大小减少两倍。然后我们将得到下一组空间特征图,其空间大小为 14 x 14。


然后我们准备再次应用下一组卷积层,其内核大小为 5 x 5。而此时,它有16个不同的输出通道。


然后我们将得到下一组特征图,这里的空间大小为10x10。


再次,下一个池化层减少空间大小。


我们将得到最终的一组空间特征图,其空间大小为 5 x 5。


之后,我们就可以展平这个特征图。我们将使用第一组全连接层、第二组全连接层以及具有十个通道的输出全连接层来处理它,

在本例中,针对十类分类问题。而在高层,整个架构非常简单。它只是几个基本模块的组合,在本例中只是卷积层、池化层和全连接层。线性架构实际上效果非常好,如果我们有数据来训练它。


不幸的是,这种架构在提出后的 20 多年里一直被忽视。部分原因是我们没有计算能力或没有数据来充分展示该架构的强大功能。当时最大的数据集,令人惊讶的是,它是当时最大的数据集,是 mnist 数据集,其中包含 10 个类别的 50,000 张图像。这个数据集足以训练一个非常小的模型,但还不足以完全说服计算机视觉社区在他们的问题中采用卷积神经网络。


然后深度学习真正的革命发生在 2012 年,这篇 alexnet 论文介绍了它。据我了解,这篇 alexnet 论文中只有一篇论文。本文旨在探讨扩大卷积神经网络规模的相关问题。规模化实际上涉及到几个方面。

首先,我们要讨论的是数据的问题。alexnet在imagenet数据集上进行训练,该数据集拥有100万张图像和1,000个类别。实际上,这个数据集比当时人们一直在研究的许多其他数据集要大得多。在那个时候,我们可以在原始像素上端到端地训练神经网络架构,这远远超出了人们的想象在如此大规模的数据集中。

其次,我们要讨论的是架构的问题。alexnet的架构实际上很大。在那篇论文的摘要中,作者特别表示这是一个巨大的架构,这个架构有超过6000万个参数和超过60万个神经元。该模型的尺寸实际上也比当时的许多其他模型大得多。

然而,为了训练这么大的模型,即使借助更大规模的数据,人们需要引入有效的技术来减少过度拟合。alexnet论文在这方面探索了两种非常有效的技术:一是数据增强,二是数据丢失。这两种技术在当今的神经网络训练技术中仍然广泛使用。

alexnet论文的另一个亮点是其出色的工程工作。它探索了使用gpu训练模型的潜力。事实上,他们已经为未来10年的gpu训练奠定了基础。他们介绍了关于gpu训练的两个基本概念:一是数据分布,二是模型分布。在数据分布的情况下,同一小批量中的不同样本可以由不同的gpu处理,从而大大减少每个gpu的计算量。在模型分布的情况下,不同的过滤器组或不同的层可以存储在不同的gpu中,从而大大减少内存消耗。这些仍然是当今gpu实现的基础。


接下来,我们将对比原始的lenet架构和alexnet架构。在高层次上,它们是同一件事,因为它们只是许多简单通用模块的组合,如卷积层、池化层和全连接层。那么,它们之间有什么区别呢?为什么alexnet具有革命性呢?

首先,alexnet更深。它还有三个卷积层和一个池化层。这些层可以帮助它从更大规模的数据中学习更高层次的抽象,这将比更浅的模型具有更强的表征能力。


其次,alexnet首次开始探索使用relu激活函数来训练非常深的神经网络架构。在relu的情况下,只有当输入信号小于零时,它将具有零梯度。然后,当您在非常深的神经网络架构中拥有许多激活函数时,您将有更高的机会在反向传播过程中获得非零梯度。事实证明,这可以在很大程度上促进非常深的模型的训练。所以从某种意义上说,relu激活的引入是深度学习的一场革命。


这两种架构之间的另一个巨大差异在很大程度上被许多人忽视了,那就是alexnet实际上是比原始lenet更宽的架构。在深度学习的术语中,“更宽”通常意味着模型有更多的通道。然后,通过为每个层提供更多通道,我们将拥有更丰富的特征集,然后它将比更窄的模型更具代表性。


alexnet在imagenet数据集中的成功引起了计算机视觉界的广泛关注。在alexnet提出后的第二年,计算机视觉界开始更加关注理解神经网络行为。计算机视觉社区获得更好理解的一种方法是可视化。而一个非常成功的可视化方法就是回答下面的问题:什么输入可以产生特定的特征呢?

为了回答这个问题,我们可以做以下两个步骤。首先,我们只需要将特征图设置为one-hot向量或one-hot张量。也就是说,对于这个特定的特征图,只有一个元素非零,所有其他元素都将设置为零。然后我们可以使用完全相同的反向传播算法将这个单热特征图从特征空间传播回像素空间。然后我们将在像素空间上对这个特征进行一些可视化。

接下来我将展示通过这种方式获得的一些可视化效果。我将展示具有五个卷积层的卷积神经网络的可视化。


这是第一个卷积层的可视化。在这里我将展示左侧的功能。我还将在右侧展示一些刺激物。因此,通过刺激,我的意思是这些是在相应特征中具有最强激活的补丁或输入图像。正如我们在这个神经网络的第一层中看到的,它们通常是边缘检测器或一些颜色检测器。这种行为与经典图像识别系统非常相似,其中第一层是边缘检测器。


这是同一网络中第二个卷积层的一些可视化。在这种情况下,我们可以看到功能级别稍高一些比第一层的特征。我们可以看到一些特征显示出一些纹理图案。在其他一些情况下,它们显示出一些局部形状,例如圆形或角或细线的形状。这就是为什么我们说这些特征可能比第一层中的特征(只是边缘)更高级别。


接下来是第三层的可视化。在这种情况下,我们开始看到它开始显示出一些语义模式。例如,对于这个特征,它开始显示一些关于人类上半身的语义模式。在另一种情况下,它开始显示出类似网或蜂窝的图案。


再说一次,这是第四层的可视化。同样,它比前一层的表征级别更高。还有一些狗头的形状,或者可能是两条腿的鸟的身体形状。


这些是最后一个卷积的可视化网络,该网络中的卷积层。再说一次,这将是更高的水平。它并不完美。例如,在这一层中,它会将几种东西混合在一起。但在其他一些例子中,例如对于这个过滤器,它将给出不同类型的狗的表征。对于这个过滤器,它将给出不同类型的有眼睛动物的表征。

实际上,在计算机视觉中,这些高级抽象或高级表征很难手工设计。因此,这些高级表征正是计算机视觉社区在过去几十年中一直在寻找的东西。因此,这种可视化有助于让计算机视觉社区相信深度学习或深度卷积神经网络是正确的选择。


作为这种可视化的副产品,当时计算机视觉界开始做出一个非常重大的发现。当时,他们发现这些深层表征是可迁移的。在我看来,这实际上是深度学习革命中最重要的发现。

那么,可迁移或迁移学习意味着什么呢?在我看来,迁移学习是一个了不起的想法。假设我们是否可以在更大规模的数据集上训练更大规模的网络。如果我们能够发现这个网络将学习一些高级表征或高级抽象,那么我们可以希望这种高级表征不仅仅与该数据集相关。这种高级表征也可以用于与该较大规模数据集有关的许多其他较小规模数据集。但为了享受这个福利,我们可以将这些特征转移到一些较小规模的数据集。通常,我们可以通过微调来实现迁移学习。例如,我们可以只训练神经网络的一小部分,这只需要在小规模数据集上完成。这一发现使得深度学习模型可以在小规模数据集上得到应用。因此,您的特定任务并不需要更大规模的数据集来训练超大规模的模型,您只需要少量与您的任务相关的数据集。

这个发现彻底改变了计算机视觉社区,因为在迁移学习的帮助下,我们基本上可以在所有小规模数据集中享受深度学习的好处。它们可以在许多计算机视觉任务中实现前所未有的准确性。这只是改变游戏规则。因此,一些规模较大的数据集,比如imagenet数据集,不再是一个细粒度或繁琐的细粒度分类问题,它有超过100万张图像或1000个类。imagenet数据集成为我们学习的引擎,基本上可以帮助所有计算机视觉任务的通用表征。


迁移学习的这一发现影响如此之大,其影响远远超出了计算机视觉的范围。例如,gpt或者chatgpt模型也是按照完全相同的原理开发的。接下来我要谈谈我最喜欢的另一部作品,这项工作被称为vgg,是visual geometric group的缩写,该小组是牛津大学的一个小组。

vgg架构非常简单,这只是关于欧洲杯足彩官网如何构建一个非常深入的神经网络架构而不需要花哨的想法。所以vgg网络是高度模块化的设计,它只有卷积层、池化层和全连接层。而且所有的卷积层实际上都是三乘三的,因此不需要仔细设计这些层。所以vgg网络只是简单地堆叠相同类型的模块,它们就可以构建非常深的神经网络架构,例如最多90层,是之前最深模型的两倍。


有趣的是,它第一次显示出明确的证据表明更深的模型会比更浅的模型更好。这似乎是一个令人惊讶的说法,因为,事实上,当时几乎没有明确的证据表明更深的模型更好。一部分原因是在vggnet论文之前,当人们增加神经网络的深度时,他们同时还做其他事情。所以没有明确的证据表明更深层次是网络获得更好准确率的主要原因。

然后在vggnet论文中,作者设计了非常仔细的控制实验。他们试图消除架构设计中的所有花里胡哨的东西。他们引入了很少的配置工程,并且开发了非常简单的规则来设置每个阶段的通道数或层数。他们所做的一切只是添加越来越多的3x3卷积层。这是一个非常简单的设计,这是非常优雅的。然而,这些简单的基线很难被超越。事实上,在那些年里,vgg 神经网络是计算机视觉领域最先进的架构。它是我们解决很多不同问题的默认主干架构,包括分类、检测和分割。而且它们可以轻松超越使用较浅神经网络架构的对手。实际上,vggnetworks是之前最先进的更深层次的神经网络。


关于vggnetworks架构只有一个警告,也就是说,这些模型没有经过端到端训练。令人惊讶的是,这些模型是通过一种称为分阶段训练的技术进行训练的。例如,为了训练更深的神经网络架构,他们需要预先训练一个较浅的对应部分。然后,他们在之前的模型之上添加了两个层,然后不断对其进行微调。所以这种分阶段的训练策略其实并不理想。这实际上违背了深度学习的端到端训练理念。为了从头开始训练这些模型架构,我们需要开发更好的初始化算法。


然后,在vggnetworks论文发表的第二年,社区开始更加关注网络初始化问题。然后,现在让我们再缩小一点,我们将讨论为什么这些更深的神经网络更难训练。直观地说,一个非常深的神经网络将具有许多构建块和许多模块的堆栈。现在假设,如果每一个积木都会做错事,或者会带来一些麻烦,那么当我们把这个积木堆放很多次之后,我们的麻烦就只会越来越多。所以在实践中,我们会看到一些信号爆炸的问题,或者我们也可能会看到一些信号消失的问题。在这种情况下,我们可能需要一些网络初始化帮助我们让神经网络开始训练。接下来,我将更深入地研究网络初始化算法。


这里我展示了一个简单的层,它在神经网络中是线性的。在这种情况下,输入x将有x个节点或x个神经元,输出y将有m个节点。输出只是输入的线性变换,变换将由权重矩阵w表示。在神经网络架构中这是一件简单的事情。

那么如果我们假设所有元素都在这里,例如x,y和w,彼此独立,并且如果我们进一步假设整个神经网络内部只有线性激活,那么我们可以证明,信号经过一层处理后,信号的方差将按缩放因子缩放。例如,该方程基本上表示该层输出的方差等于输入神经元的数量乘以权重矩阵的方差乘以输入信号的方差。因此该层将通过该缩放因子缩放信号的方差。

如果我们没有任何激活或者我们的激活函数是线性的,我们可以在非常深的神经网络中多次应用这个公式。好吧,我们将看到方差仍然按比例缩放许多缩放因子的乘积。这个方程基本上表示输出,即网络输出的方差,等于这些数字乘以网络输入方差的乘积。这就是前向传播的公式。

我们可以做一些数学计算,然后我们会得到一个逆向公式,向后的表述方式也非常相似。基本上这个方程表示,如果你想通过反向传播计算浅层的梯度,那么这个梯度的方差将等于这些许多缩放因子的乘积乘以网络输出梯度的方差。这就是后向传播公式。


那么基本上这很多因素的乘积基本上就是说,如果每个单层的缩放因子都小于1,那么这个效果会经过很多层的积累之后,你将会遇到梯度消失的问题。也就是说,你的网络不会进行训练。它似乎已经饱和,或者似乎已经收敛。但真正的原因是它没有收到足够的梯度来进行训练。另一方面,如果每个层的缩放因子都大于1,您将遇到梯度爆炸问题。也就是说,你的网络可能会在第一次迭代中出现分歧。


然后为了让网络至少开始训练,我们需要开发良好的初始化算法。前面的推导将引导我们得到这种初始化方法,在pytorch或tensorflow包中称为xavier初始化。基本上,您希望将此缩放因子设置为每个单层的缩放因子。您可能想要将前向公式设置为1,或者将后向公式设置为1。这就是初始化神经网络中每一层权重的方法。通常在实践中,您只需要设置一种或另一种形式即可。其实这并不重要。


这种网络初始化可以帮助我们在信号传播过程中保留信号的方差。而之前的推导是基于激活函数是线性的假设。而在实践中,通常这不是您想要的。您可能想引入relu激活。那么我们还可以证明,随着relu的引入,您可能想稍微改变一下这个公式。意味着,您需要在这些方程中添加一个1/2的因子。直观地讲,relu激活可能会在训练过程中削减一半的信号。这就是为什么您需要引入1比2的比例因子。尽管这似乎是一个非常小的变化,但与之前的版本相比,事实证明它非常重要。这是因为,如果您在每一层都引入一些问题或一些麻烦,那么在很多层之后,如果您没有做对事情,您将遇到梯度消失问题。这个初始化方法可以帮助我们训练vgg网络,从头开始,无需阶段性训练。这就是我们如何正确初始化神经架构。


让我们回到2014年。接下来我要讲的是另外一个非常有趣的工作,这与vgg网络并行。这一领域的研究通常被称为googlenet或inception。这项研究的一个共同主题是如何设计深度且同时经济的卷积神经网络。其中涉及到几个有趣的想法。第一个想法是使用多个分支。例如,同一模块中可能有1x1、3x3或5x5卷积。同时,您可以使用1x1卷积作为瓶颈。也就是说,您可以使用这个1x1的卷积来灵活控制您的神经网络的通道数。在某些其他情况下,您可以减少通道数或增加通道数。同样作为副产品,googlenet还引入了1x1卷积作为其模块中的快捷方式。所以它是一个shortcut,因为这个1x1的卷积可以比同一个模块中的其他分支更浅,所以它可以被称为shortcut。


实际上,在我看来,inception架构简直太疯狂了,而且有数百万个不同设计的版本。大多数时候,如果你足够幸运,那就太好了。它将在神经网络设计方面为您提供非常引人注目的计算和准确性权衡。然而,它也带来了另一个问题。因此,这些架构的疯狂设计可能会打破我们开发初始化算法所需的简单假设。所以你可能想开发一些其他的初始化算法专门针对所有这些疯狂的设计,或者您可能想引入一些其他模块来帮助您更改这些神经网络架构。


受到这些inception架构的激励,人们开始看看另一类方法,它们在神经网络中被称为归一化模块。2015年,人们开始关注标准化模块。其实,早在这之前,人们就已经意识到,如果我们想要训练一个非常好的神经网络,如果我们想要这个神经网络开始收敛,您可能想要标准化输入。事实上,即使在今天,这就是您需要对数据进行预处理的操作。而另一方面,我们刚才讲的网络初始化方法也可以被认为是归一化的一种形式。这是因为我们希望在信号传播过程中保持信号的方差或多或少保持不变。这种网络初始化的归一化是基于一些分析推导或分析假设。而这些假设只在训练开始时有效,在训练过程中就会被打破。这并不理想。

为了解决这个问题,人们想开发另一个模块,它基本上是神经网络内的一层。并且这些模块会在整个训练过程中进行归一化。因此他们可以在整个过程中保持信号标准化。如果你想将这些模块应用于所有层,它们还可以帮助您保持指定的所有层的信号标准化。而且,该归一化模块可以通过反向传播进行端到端训练,因此它们只是深度学习方法工具箱中的另一个简单且通用的模块。


这是可以由归一化模块执行的典型计算的示例。通常会涉及三个步骤。在第一步中,我们可能想要计算该模块的输入信号的期望或方差。然后我们可以通过减去平均值和除以标准差。而这个操作可能会降低自由度,因为我们进行了这种标准化。所以我们可能想要补偿这种减少通过引入另一个线性变换,可以简单地是ax加b。并且这三个操作可以放在一个层中,这是标准化模块或标准化层。从概念上讲,这一层基本上可以在神经网络架构中的任何地方或任何地方使用。


在实践中,规范化模块有多种类型。这些模块之间的区别之一在于它们计算均值和方差的支持集。例如,在本例中,我显示了2d图像的张量。这里,n是batch size的轴,c是通道数,h和w是高度,即空间大小。而这个操作就代表了批量归一化操作。基本上,它将计算整个空间域的统计数据,并且还跨批处理域。这就是为什么它被称为批量归一化。然后还有许多其他类型的归一化层。它们仅在支持集的定义上有所不同。今天,我们使用的最流行的选择之一,或者也许是我们使用的默认选择,是层标准化操作。因此还值得注意的是,它在限制或transformer中的定义可能略有不同。


那么,为什么这些标准化模块很重要呢?所以首先,使用这些模块可以使模型开始训练,否则他们就会停止训练,或者一开始就会出现分歧。另一方面,即使模型可以开始训练,归一化模块的引入有助于加快收敛速度,也有助于提高模型收敛时的精度。


接下来我要讲一下resnet。在此之前,让我们稍微缩小一下我们来记录一下深度学习的核心思想是什么。因此,关键思想是将一组简单的通用模块组合成高度复杂的功能。所以为了组成大量简单的模块,我们可能想要构建一个不同的神经网络架构。这是基础,也是resnet架构背后的基本动机。

在残差学习的这项工作中,我们证明了深度学习或深度神经网络架构可以比人们想象的更深入。而且,有趣且令人惊讶的是,这可以通过一个非常简单的组件来完成,这只是一个身份快捷方式,从概念上讲,基本上,它几乎什么都不做。然而,这个简单组件的引入可以使数百层的神经网络从头开始训练并达到更好的精度。接下来,我将讲述一些关于resnet的故事。


resnet的灵感来自于一项经验观察,这就是所谓的退化问题。我们讨论了非常好的初始化方法以及非常有效的标准化模块。然后在这些模块的帮助下,我们足以从头开始训练非常深的神经网络架构并获得一定的准确性。那么,深度学习是否只是堆叠越来越多的层那么简单呢?不幸的是,答案是否定的。实际上,事实证明,在20层之后模型会很快退化。而这种退化并不是因为过度拟合。也就是说,越深的模型不仅验证精度越差,他们在实践中的训练准确性也会较差。事实证明,这些不同的神经网络只是更难训练,这是违反直觉的。


现在让我们来做一个思想实验。较深的模型实际上比较浅的模型具有更丰富的解空间。所以也就是说,越深的神经网络不应该有越低的训练精度。我们很容易通过构建得到更深层次的神经网络的星空体育网站入口官网手机版的解决方案。如果我们能做到的话,我们可以简单地训练一个较浅的神经网络来达到一定的精度。然后我们可以将训练后的层从这个较浅的模型复制到更深的对应层中的相应层。然后对于更深层特有的其他层,我们可以简单地将它们设置为身份映射。以及这种更深层神经架构星空体育网站入口官网手机版的解决方案的存在。建议至少应该具备一些较浅的对应物。然而,退化的经验观察表明,优化可能无法找到该星空体育网站入口官网手机版的解决方案,或者优化可能无法找到与该星空体育网站入口官网手机版的解决方案足够相似的星空体育网站入口官网手机版的解决方案。这促使我们开发一个称为深度残差学习的框架。


再次,让我们缩小一点,想象一个非常深的神经网络架构。然后让我们关注一个非常深的神经架构内的一个小子网。在此图中,这个小子网只有两层。然后我们使用函数 hx 来表示要适合这个小子网的底层所需函数。在经典的普通神经网络的情况下,我们唯一能做的就是希望这两层能够契合hx的底层功能。


然而,残差学习的思想就不同了。我们不需要使用这个权重层来直接拟合这个函数hx。相反,我们可能希望它们适合另一个函数,即 fx。这个函数将代表我们可以在这个小子网的输入之上进行的增量或更改。为了拥有原来想要的功能,我们只需要将 fx 添加到该子网的输入中即可。并且这种加法可以很容易地实现为恒等映射,它将该子网的输入连接到该子网的输出。并且信号将通过逐元素相加来合并。这也将把这个子网变成一个残差块。


在这个残差块中,权重层将执行一个称为残差函数的函数。基本上,残差函数只是输入之上的增量变化。现在让我们将整个残差块视为我们要使用的函数。如果恒等映射对于该函数是最佳的,那么我们应该很容易实现它。因为我们可以将所有权重层设置为零。如果恒等映射几乎是最优的,那么我们也许也能有一个好的星空体育网站入口官网手机版的解决方案,因为我们可以将权重设置为一些小数字。

从这个意义上说,实际上,剩余学习的想法鼓励进行小的、保守的和渐进的改变的基石。然而,通过将许多小的改变放在一起,我们仍然有可能学习一个非常复杂的函数。这也遵循深度学习方法论。再次,作为引入残差块的副产品,我们很容易有另一种初始化方法。我们可以在训练开始时将权重设置为一些小数字或将它们设置为零。


也就是说,整个残差块将只是恒等映射或类似于训练开始时的恒等映射。所以信号在前向过程中也是在后向过程中可以在训练开始时使用此恒等映射轻松传播。所以你不需要太担心初始化算法。


那么,我们很容易采用这个想法来构建一个非常深的神经网络架构。因此,从某种意义上说,您可能只需要将这么多身份连接添加到普通神经网络中,然后就可以将其变成残差神经网络。或者等价地,这可以被认为是简单地堆叠许多残差块来创建一个非常深的模型。所以从这个意义上来说,残差块的引入或者设计实际上成为我们构建非常深的神经网络架构的新通用设计或新通用模块。

所以引入resnet之后,人们开始关注每一个构建模块的设计。也许最成功的设计之一是transformer块。之后,您只需要多次堆叠相同类型的块即可,当您有更多层时,您不需要仔细设计每个特定层。


这里是一些关于 resnet 的结果。图中,x轴是神经网络的深度,y轴是分类精度。这个数字基本上表明,例如,普通神经网络在 20 层之后将开始快速退化。而且resnet可以在多层之后不断改进。同样的模式也可能发生在 imagenet 和许多其他数据集上。


而这个模式可以概括为这样的形式:在没有剩余连接的帮助下,神经网络将在某一点后开始退化,具体取决于您的场景。并且在残差连接的帮助下,它可以不断改进,当你添加越来越多的层时,这是一个非常理想的属性。


这里列出了构建和训练非常深层的神经网络架构时可以执行的几项操作的清单。其中许多概念都是关于欧洲杯足彩官网如何拥有健康的训练过程中的信号传播。这方面包括使用真实世界的激活或类似形状的其他激活,以及适当的初始化算法的使用。它还包括将归一化模块和残差连接引入神经网络架构中。


很好,我已经讨论过使用卷积神经网络学习 2d 图像的深度表征。接下来,我也会简单讲一下我们如何从一维序列中学习深度表征。


我们进行一维序列建模的经典模型是 循环神经网络,简称 rnn。循环神经网络是一种非常特殊的神经网络,它的连接中有循环。也就是说,给定一个循环神经网络单元,它将获取当前时间步的输入,比如说 xt,然后根据该输入生成一个隐藏状态,例如 ht。这个隐藏状态将用于确定该时间步的输出。而这个隐藏状态也将作为下一个时间步的输入。

如果我们沿着时间轴展开这个循环神经网络架构,我们可以看到,它实际上是另一个权重共享模型,权重在时间维度上共享。而且,该架构也是本地连接的表述。例如,对于每个单元, 它仅连接到该时间步的输入,并且还连接到前一个时间步。因此,我们再次看到权重共享和本地连接仍然是循环神经网络设计中的两个关键属性。这在概念上与卷积神经网络非常相似。


我们如何构建深度循环神经网络?事实证明它也非常简单。从某种意义上说,您只需将循环神经网络单元的状态视为新序列,然后就可以使用另一个单元来处理该序列。也就是说,你可以将许多循环神经网络单元堆叠在一起,你将拥有一个更深的神经网络。例如,在这里,我展示了三层循环神经网络的情况。在这种情况下,如果我们考虑该神经元的输出,它将取决于所有较浅层的输出。它还将取决于同一层中所有先前的时间步。这只是循环神经网络架构的一个属性。


这是深度循环神经网络在实践中的一个例子。这个例子来自谷歌的神经机器翻译系统,这是 2016 年为其产品开发的。在本例中,他们堆叠了多个 lstm 单元来构建这个深度循环神经网络。lstm 只是一种非常有效的 rnn 形式的特殊形式。在这项工作中,作者报告说,为了构建这个非常深的 lstm 模型,他们仍然需要使用剩余连接。他们报告说,在残余连接的帮助下,他们可以训练多达 16 层的深度 lstm,并享受更深层次的好处。如果他们不使用剩余连接,他们在四层之后就观察到了降解问题。

有趣的是,这个观察结果与我们在卷积神经网络上所做的观察非常相似。这再次证明了深度学习方法的强大功能和通用性。也就是说,如果我们从一个应用程序开发出一个非常有效且非常通用的组件,那么您很可能会享受到其他一些应用程序的好处。所以在这种情况下,就开发了原来的残差连接在卷积神经网络进行2d图像处理的场景中。但它的行为也可以在完全不同的场景中观察到,使用递归神经网络进行一维序列建模。


那么,循环神经网络并不是我们对一维序列进行建模的唯一方法。我们仍然可以使用经典的卷积神经网络来实现或多或少相同的目标。我们只需在一维维度上应用滑动窗口,然后就可以对一维序列进行卷积。如果我们想要进行因果推理,可能需要在此处做一些微小的调整,也就是说,我们可能希望通过卷积来执行一些因果计算。对于卷积核来说,它只能看到当前时间步或任何先前的时间步,而无法看到任何未来的时间步长。

在卷积神经网络的情况下,局限性是非常明显的。如果你想捕捉更长的上下文,你需要建立一个更深的神经网络架构。这是因为对于每个单层,上下文长度将受到内核大小的限制。例如,对于某个神经元,它的上下文仅取决于当前时间步和前一个时间步。因此,为了拥有更长的上下文,你可能需要更多层。这个神经元将取决于最多三个时间步的距离。这就是当我们使用卷积神经网络进行序列建模时,你可以获得更长的上下文的方式。


接下来,我将讨论另一个具体例子。这个例子来自 deepmind 的 wavenet 架构,这里的应用程序是音频生成。在这种情况下,他们不仅使用了因果卷积,而且还将其推广到另一种操作,称为扩张。扩张卷积意味着卷积核不需要依赖于前一步。它可能取决于可能相隔许多时间步的时间步。膨胀操作可以帮助我们大大增加卷积核的大小,并且它可以帮助我们捕获更长的上下文。但即便如此,作者仍然需要堆叠很多卷积层来构建一个非常深的卷积神经网络以捕获长上下文。因此,他们仍然需要残余连接的帮助以便享受训练更深层神经网络的好处。


这里从概念上总结了不同的序列建模范例。在循环神经网络的情况下,对于每个单层和每个时间步长,它可以看到完整的上下文。也就是说,如果我们考虑这个神经元,它的计算将取决于同一层中所有先前时间步的计算。如果你希望在应用程序中进行一些远程推理,这可能是一个理想的属性。然而,另一方面,也因为这个属性,循环神经网络的计算不是前馈的。也就是说,为了计算这个神经元的输出,你需要等待前面所有神经元的输出完成。所以这种行为对于gpu中的并行实现并不友好。因此在实践中,循环神经网络在 gpu 实现上效率不高。

作为比较,卷积神经网络具有完全不同的行为。一方面,该模型是完全前馈的。因此,对于同一层中的每个神经元,你不需要等待其他神经元完成其计算。所以这对于gpu中的并行实现非常友好。所以通常情况下,卷积神经网络在 gpu 实现上非常高效。另一方面,正如我们所讨论的,上下文长度将受到卷积核大小的限制。这不是一个理想的属性。

那么我们怎样才能两全其美呢?这就是引入注意力机制的原因。简单地说,在注意力机制中,我们允许每个神经元或每个时间步骤看到序列中的每个其他时间步骤。因此,对于每一个神经元,它将能够看到上一层的完整上下文。因此,如果你想要对长期推理进行建模,那么这是神经网络架构中所需的属性。另一方面,在注意力机制中,所有计算都是前馈的。所以你不需要等待。你不需要等待同一层上一个时间步的计算完成。所以这种前馈计算对于gpu实现来说也是非常友好的。


注意力机制是一种非常流行的架构(称为 transformer)背后的核心思想。由于时间有限,我不打算深入研究transformer的技术细节。但我将分享transformer设计的一些有趣的特性。第一个属性是在transformer中,我们允许每个节点看到其他每个节点,正如我们所讨论的。还有另一个有趣的特性,令许多从业者感到惊讶的是,实际上注意力计算是无参数的。所以不需要引入任何参数。也就是说,如果给你三个序列,比如说 q、k、v,它是查询、键和值的缩写,那么注意力计算不需要引入任何可训练的参数。所以这与经典的全连接层不同,其中每个连接都可以代表一个可训练的参数。在注意力计算的情况下,每个连接都代表没有可训练的参数。这只是意味着这两件事是相互关联的。

那么参数在哪里呢?有趣的是,在 transformer 架构中,所有参数层都是前馈的。参数层将用于我们获得称为 q、k、v 的序列,它们还将用于 mlp 块中,即在表征空间中变换这些序列。从某种意义上说,所有这些参数层都只是一种一对一的卷积层。再说一遍,所有这些层都是本地连接的,因为它们只连接到当前时间步,所有这些层都有跨时间维度共享的方式。再次,我们可以看到本地连接和共享方式仍然是神经网络架构中的两个关键属性。而且,transformer架构是一个非常深入的模型,所以我们需要依赖某种类型的标准化操作以及我们训练这些非常深的模型的剩余连接。


transformer架构有许多成功的应用,也许最受欢迎和最著名的一种是生成式预训练 transformer,简称 gpt。简单来说,gpt模型是自然语言处理的表征学习模型。gpt 模型是为“下一个世界预测”的任务而设计的。在此任务中,模型被赋予一个句子的前缀,并要求预测该前缀之后的下一个单词是什么。在这种情况下,该句子可以是,例如,学生打开一些东西,模型被要求预测一些东西,模型可能会说,有一定概率,书。而这个模型,gpt模型,是在从互联网收集的更大规模的数据集上进行训练的,因此它能够学习关于自然语言的非常好的表示。它还将学习该语言数据中包含的知识。gpt 模型是许多语言应用程序背后的基础,包括chatgpt。事实上,为了享受这种好处,我们仍然需要依赖迁移学习范式。也就是说,我们在更大规模的数据上预训练这个模型,然后我们需要在一些较小规模的数据集中微调或迁移这个模型。


transformer 的另一个成功应用是 alphafold 应用。简单来说,alphafold 是一种表征学习方法,用于蛋白质折叠的应用。在这种情况下,神经结构的输入是氨基酸序列,架构的输出只是蛋白质结构。这个架构有 48 个transformer块,该架构将在更大规模的蛋白质结构数据集上进行训练,这是过去几十年来通过人体实验收集到的。有趣的是,尽管其中许多组件,例如transformer块或剩余连接的使用,最初是为许多其他应用程序开发的,例如自然语言处理或图像识别,这组完全相同的构建模块可以应用于完全不同的蛋白质折叠问题。这再次证明了深度学习方法的通用性。如果你开发了一套非常有效的工具,那么你也许能够享受这些工具的好处,也许是在完全不同的领域。


然后我们准备好回到计算机视觉,我们接下来要介绍的另一个非常成功的作品,它叫做vision transformer,或者vit。从概念角度来看,视觉transformer(vit)只是transformer在二维图像处理中的应用。实践证明,这个想法的实现过程可以非常简单。我们只需准备一个输入图像,将其划分为一系列不重叠的补丁。然后,我们可以将transformer架构应用到这个一维序列上,就像处理任何其他一维序列一样。这个简单的想法被证明非常成功且有效,如今它已经成为我们在计算机视觉中进行图像识别的首选之一。

(城主注:vit技术就是当前大热的sora大模型的核心基础!)

vit架构的意义并不仅仅在于计算机视觉领域,因为它首次证明了transformer架构可以成为解决许多问题的统一架构,包括自然语言处理、计算机视觉、音频识别、3d处理,以及许多其他序列处理问题。这再次证明了深度学习方法的通用性。


这是本教程的结论,也是本部分的一些要点。在本教程中,我介绍了什么是表征学习以及为什么它是一个重要问题。表征学习可能是我们在不同领域和不同应用程序中可能遇到的常见问题。而深度学习和深度神经网络正是我们解决表征学习问题的非常有效的工具。

再次强调,深度学习的关键思想是将一组简单的通用模块组合成高度复杂的函数。深度学习的思想可以为我们提供通用的工具来解决不同领域的不同问题,我希望您将来能够在您的领域使用这些工具。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

notice: the content above (including the pictures and videos if any) is uploaded and posted by a user of netease hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐

深圳失业程序员:再找不到工作,老婆威胁堕胎了

不掉线电波
2024-03-15 07:59:24

3月15日俄乌最新:遍地狼烟

西楼饮月
2024-03-15 15:18:55

欧联1/4决赛抽签:利物浦上上签,勒沃库森战西汉姆,米兰pk罗马

侃球熊弟
2024-03-15 20:12:50
澎湃新闻
2024-03-15 15:42:26
飘飘视角
2024-03-14 18:43:21
红丽说教育
2024-03-14 16:35:28
叶青足球世界
2024-03-15 19:43:00

林剑,重回外交部任职

极目新闻
2024-03-15 16:05:09
小寒嫣语
2024-03-15 04:20:33
新京报政事儿
2024-03-15 19:49:03
前瞻网
2024-03-15 16:59:29

俄方在我们这里有越来越多的痕迹了

清晖有墨
2024-03-15 11:25:59

2024年俄罗斯总统大选创下多个“首次”,80后博士作为候选人榜上有名

红星新闻
2024-03-15 16:20:38

中国花生含致癌物!欧盟一个月内3次警告:百姓还有食品安全感吗

大风文字
2024-03-14 17:22:30
周到上海
2024-03-15 19:56:19
直播吧
2024-03-15 19:37:29
知秋侃史
2024-03-12 02:01:12
黎兜兜
2022-09-15 20:39:33
鋭娱之乐
2024-03-15 17:46:21

俄罗斯,踩中国线了

新动察
2024-03-14 09:44:14
2024-03-15 21:10:44
文章数 关注度
往期回顾

马斯克一大步:最大火箭成功发射 星舰失联

足疗店赞助中超,有什么不可以?

孙怡与滕光正恋情官宣分手:让他滚了

新蓝鲸,这局要如何打动最苛刻的消费者

态度原创

上海一批次土拍揽金约134亿,中小套型面积限制政策调整

喝酒脸红的人,更容易老年痴呆?

玉渊潭公园湿地导赏预约时间调整

网站地图