编辑 | 丛 末
SIGIR是一个展示信息检索领域中各种新技术和新成果的重要国际论坛,若非疫情影响,今年本定于中国西安市举行。7月25日-7月30日,第43届SIGIR2020在线上举行。
7月27日,2018年图灵奖得主Geoffrey Hinton带来了主题为《The Next Generation of Neural Networks》的讲座。讲座由约克大学信息技术学院正教授Jimmy Huang主持,ACM杰出科学家、 吉林大学人工智能学院常毅教授担任嘉宾。
在讲座中,Hinton指出:人工神经网络最重要的未解难题之一,是如何像大脑一样有效地进行无监督学习。
第一种方法,以BERT和变分自编码器为例,使用了深度神经网络来重建其输入。这种方法对于图像来说是有问题的,因为网络的最深层需要对图像的精细细节进行编码。
第二种方法是Becker和Hinton在1992年提出的:当给定相同图像的两个不同片段作为输入时,训练深度神经网络的两个副本以产生具有高互信息的输出向量。设计此方法的目的是使表征形式不受输入无关细节的束缚。
Becker和Hinton使用的优化互信息的方法存在缺陷(出于一个微妙的原因,讲座中会解释),因此Pacannaro和Hinton将其替换为判别性目标函数,在该目标函数中,一个向量表征必须从许多替代方案中选择相应的向量表征。
表征的对比学习(contrastive learning of representations)被证明非常有效,但是它存在一个主要缺陷:要学习具有N位互信息的成对的表征向量,我们需要将正确的对应向量和大约2^N个错误的替代方案进行对比。Hinton将描述解决这种局限性的新颖有效方法,并且表明这将导致在皮质中实现感知学习的简单方法。
Geoffrey Hinton现在是多伦多大学的计算机科学系荣誉退休教授,Google的副总裁兼工程研究员,以及Vector Institute的首席科学顾问。他最早使用反向传播学习单词嵌入,对神经网络研究的其他贡献包括玻尔兹曼机、分布式表示、时延神经网络、专家混合、变分学习和深度学习。2018年,Geoffrey Hinton因在深度学习方面的贡献与Yoshua Bengio、Yann LeCun一同被授予了图灵奖。
以下是演讲全文,AI科技评论进行了不改变愿意的整理。
无监督学习的历史
在这次演讲中,我将讨论神经网络的未来发展方向。不过在这之前,我会先谈谈神经网络的发展历史,特别是无监督学习。
在机器学习中,有三种不同类型的学习模式:首先是监督学习,即给定输入向量学习预测输出。然后是强化学习,通过学习选择动作以获得最大奖励。最后是无监督学习,其目的是学习输入的内部表征,但是从数学上定义什么是好的表征形式很困难。
首先解释我们需要无监督学习的原因。人类拥有10^14个突触,但只能活10^9秒。这意味着如果要学习大多数突触,显式标签或奖励可能无法提供足够的信息,因为我们必须每秒学习10^5个突触。
有人反对人类需要学习所有突触的观点。一种说法是,可能大多数突触都不会被学习,而且进化的效率很低,进化算法的效率就比反向传播算法低得多。突触可能是高度冗余的。
但是,我认为大脑浪费容量的可能性很小。人类的学习模型非常庞大,却不需要大量的数据,这与常规的统计方法非常不同。对人类而言来说,经验是昂贵的,而突触是廉价的。
因此,我们需要研究不使用大量经验和拥有很多参数的学习算法。用于无监督学习的目标函数,即最大似然,就是个很明显的例子。
优化最大似然意味着调整生成模型的参数,以最大程度地提高模型生成观测数据的概率。例如,将数据分布拟合为高斯混合分布。
另外一个例子是自编码器。自编码器试图找到一种经济的表征形式,来重建数据。
我将在本演讲的后半部分以空间或时间一致性的角度来谈论这个话题,其思想是提取在空间或时间上一致的属性,这和最大似然非常不同。
自编码器是一种使用监督学习算法来实现无监督学习的方法。我们将数据输入网络,网络输出重建的数据,网络学习的目的是使重建数据与原始数据相同。网络将数据转换为编码向量,我们通常希望编码向量的维度很小,或能高效地表征数据。解码器以编码向量为输入尝试重建数据,因此解码器是条件生成模型。
在大约20年的时间里,人们一直认为训练深度自编码器非常困难。自编码器的想法从1980年代中期反向传播开始流行就有了,但是深度学习无法应用到自编码器中。原因是我们使用了错误的激活函数,当时使用的是Sigmoid或Tanh,而不是ReLU,而后者更容易在深度学习中训练。此外,我们的初始化方法也很糟糕。在初始化权重时需要缩放权重,从而反向传播的梯度不会爆炸或消失。最后,当时的计算机速度也很慢。
在2006年,Salakhutdinov和我提出了一种训练深度自编码器的新方法,即堆叠多个浅层自编码器。
首先训练一个浅层自编码器,其接受输入的数据。它的隐藏层有特征检测器,并且尝试学习可以重建数据的特征检测器。然后,将特征检测器的激活值视为数据,重复以上操作,你可以根据需要确定层数。因此,在不使用任何标签的情况下,我们可以预训练多个层的特征向量,称之为无监督预训练。
每个新的自编码器都将已学习的特征检测器的激活值视为其数据,并且学习进一步的编码。该算法的有趣之处在于,它成功地应用了深度学习来学习自编码器。
对于浅层自编码器(例如受限玻尔兹曼机),数学表明每当新的浅层自编码器添加到堆叠的网络中,模型生成数据的对数概率将获得新的变分界(variational bound),并且该变分界比先前的变分界更好。
层来说有用的特征,为了解决这个问题,我们可以训练深度端到端自编码器。有了更快的计算机和更好的激活函数,深度自编码器的效果变得很好。
在2013年,Welling和Kingma提出了变分自编码器,其思想是,编码器采集数据并将其转换为实数值编码向量,解码器利用实数值编码向量重建数据。
编码器的目的有两个:第一,它希望找到一种编码,可以在先验分布下最大化该编码的概率。在实数值编码空间中,存在先验分布,通常为高斯分布,编码器尝试查找接近该高斯均值的编码。第二,它也在寻找可以重建数据的编码。
解码器获取编码并尝试准确地重建数据,使用的是变分近似方法。通过使用巧妙的数学,Welling和Kingma能够获得训练变分自动编码器所需的所有导数,从而既能最大化编码处于高斯先验分布的概率,又能利用变分后验最大化数据的近似概率。以下不会再谈论变分自编码器,但它目前是无监督学习的最佳方法之一。
接下来讨论BERT。BERT是一种深度自编码器,经过训练可以补充句子中遗漏的单词。BERT实际上与信息检索非常相关,因为它可以提取非常好的单词表征。这对于理解文档非常有用。BERT有很多个层,并且在每一层中,都有每个输入单词的嵌入向量。第一个隐藏层中有单词的向量表征,第二个隐藏层中有相同单词的更好的向量表征。
随着深入网络,给定单词的表征将变得越来越好。实际上,L + 1层中的某个单词的表征,是通过比较L层中该单词的嵌入与其它单词的嵌入生成的。这种比较是通过称为Transformer的注意力机制实现的。这种嵌入是很好的单词表征,可用于各种自然语言任务。
如果用标准的一维卷积神经网络来表示单词字符串,我们将通过这些向量来表示句子中的单词。通过组合信息,激活单词的权重矩阵,我们可以获得下一层向量来表征单词。因此,和之前的方法类似,只需查看前一级中所有附近单词的表征,即可将这些表征组合成下一层中更好的单词表征,但这里使用了注意力机制。
BERT的机制实际上看起来像信息检索。每个单词都通过学习的权重矩阵生成查询向量、键向量和值向量。然后,对于L层的每个单词,我们将获取其查询向量,并将其与所有其它单词的键向量进行比较。如果查询向量和键向量之间可以很好地匹配时,也就是说,当查询向量和键向量的标量积很大时,附近位置的值向量影响下一层的单词表征。
例如,假设我的名字是June。我将生成一个查询向量,该查询向量可以很好地匹配月份,也可以很好地匹配女性名字。我们将在句子的其余部分中选择相关的词,并使用这些相关的词来修改June的表征。如果句子中还有其他几个女性的名字,则June的表征将变得更接近女性人名的表征,如果句子中出现了月份相关的单词,June的表征将变得更接近“六月”的表征。也就是说,它们将根据上下文进行优化,所以这很像信息检索,不过所有查询、值和键都是学习得到的。
因此,我们可以使用这种神经网络进行语言建模。首先使用Transformers预训练单词片段嵌入。如果采用句子或更长的文本片段,则需要成千上万个片段,将它们输入Transformers的多个层,以学习所有的键、值和查询。
因此,单词表征会在输出之前得到完善,可以很好地利用上下文信息。然后,我们在另一个神经网络中使用这些单词片段的表征,神经网络可以从先前的单词片段中预测下一个单词片段,因此这是一个自动回归模型。但是,它考虑的不是那些单词片段,而是BERT生成的单词片段的表征。
它的效果比规则模型更好。通过给它一个初始的单词序列,然后让它预测下一个片段的概率分布。这样一来,我们就可以生成长长的单词串,直到获得完整的故事为止,效果令人惊讶。
BERT需要用数十亿个文字数据来训练,然后我们使用其产生的嵌入,训练具有1,750亿个参数的语言模型,耗时超过一千petaflop天。一旦完成训练,我们就可以生成新闻文章,如上图所示。这是GPT-3的例子,有趣的是,大多数人无法确定这篇新闻文章是由BERT撰写的,它通过了图灵测试。
现在,我们回到有关如何进行监督学习的基础思想。变分自编码器BERT比堆叠自编码器的效果更好,这是因为端到端学习可以确保前面层中的隐藏单元学习提取后面层所需的特征,这是反向传播所擅长的事情。
无监督学习的未来
在过去的几年中,我一直非常渴望找到一种新的实现监督学习和深层网络的方法,这种方法不需要多层反向传播,因为我不相信大脑的工作机制是这样的。
接下来,我们大部分时间都将探讨新的修复方法,它如何不起作用以及如何改进以使其起作用。解决方法是学习每个层的特征,从而可以重建前一层的内容。而且,它们对于后一层也能很容易进行重构。这意味着我们将必须同时学习所有的层。
我们将尝试学习足够好的特征并重建前面的层,这是堆叠自编码器的目标函数,但也很容易对后面的层进行重建。也就是说,它们与后面层预测的内容相符。
这里有一个非常令人有趣但饶舌的解释,即后面的层将进行自上而下的预测,自上而下的预测将监督自下而上的连接的学习,自下而上的连接将产生表征,该表征将作为自上而下的预测的目标,自上而下的预测实际上也是自下而上学习的目标,自下而上和自上而下的学习过程是相互监督的。
也就是说,好的特征可以局部地、自下而上地提取,同时也可以从更大的上下文中自上而下地预测。
我们来展示一个使用上下文协议的例子。考虑一个句子,“she scromed him with the frying pan”,希望你以前从未听过scrom这个单词。我们怀疑它是动词,基于它在句子中的位置以及单词末尾的“ed”。
我们不知道它最初的含义,但是在刚看到这句话时,大多数人对其含义已经有了一个很好的了解,认为这大致表示“她用平底锅打了他的头”。
人类不需要成千上万的例子也能从一句话中很好地理解一个词的意思。这就是自上而下预测的,魅力所在。
在视觉识别上也相似,全局的背景帮助你自上而下地预测应该在图像的局部看到什么,例如在草地背景中猜测黑白斑块皮肤的四脚兽是奶牛。
我们的目标是在自下而上和自上而下对某个特征的预测之间取得一致。这很容易通过缩小所有隐藏激活向量来实现。这被称为所谓的“塌缩问题”(collapse problem)。不过,我们可以通过使用更好的协议定义来避免这个问题:两个变量在每个训练样例中的值是否一致,以及它们在不同训练样例中是否遵循同样的变化。
我们先讨论一种完全不同的无监督学习方法,之后我再回到这种方法。
之前,我和我的学生想出了一个方法,用一个更好的定义来解释两者的一致性。与其说它们应该相等,不如说它们应该是相似的,即它们在不同的训练案例上有什么样的变化趋势。
所以在一个特定的训练案例中,我们希望神经网络的一部分中的自下而上的预测与自上而下的预测相一致。
不要尝试解释输入的每一个细节,只需关注于提取在空间或时间上一致的属性。和自动编码器不同,这里允许我们忽略噪声。
Becker 和我在1992年引入了一种提取空间一致属性的方法:最大化两个输入非重叠图像块的表征的互信息。
-
如果a 和b是标量,则通过最小化 来最大化互信息。
-
如果a和b是向量,则通过最小化 来最大化互信息。
相关论文:Maximizing the Mutual Infomation between two Gaussian distributed variables(Becker 和Hinton,1992)
首先用随机点填充一张图片使它没有明显的结构。然后再取另一张图片,这张图片是第一张图片经过水平移动后的版本。所以图像对中唯一的结构就是它们之间的相对平移。很久以前我们用的是非常小的电脑。所以我们只从左边的图像中取了一个一维的条带,从右边的图像中取了一个一维的条带。
我们在左图上散落了一些随机点。然后我们看了右图,这是左图的翻译版。你可以看到,如果你看两个相邻的图像块,那么它们的视差是一样的。左右条带之间的偏移相同。所以,如果你训练一个神经网络,看看左手边的patch块来提取一个属性, 训练一个神经网络的副本来观察右手边的patch块,吸引一个属性。可以看出仅有的一致性属性分离了,这就是我们想要提取的,它也确实起到了作用。
但是,Becker和我提出的的最大化互信息方法也存在着很大的问题:一旦开始优化非线性映射,变量是高斯分布的假设就会造成可怕的问题。而如果只学习线性映射,或者在优化一个线性函数,这个假设并没有引起太大的问题。但是一旦优化了一个非线性函数,它就会导致糟糕的事发生。
这些问题容易通过一种嵌入的方法来可视化,首先是局部线性嵌入 ,它具有以下特点:
-
-
-
局部线性嵌入通过对所有数据点的二维表示施加全局协方差来防止整个映射崩溃: 协方差(映射点)=单位矩阵
但是局部线性嵌入会导致可怕的事情发生,比如维度坍缩。
如下图所示,可以看到MNIST数据的局部线性嵌入产生的特征,颜色表示分类。
可以发现它没有对数字进行很自然的分类:它们几乎是一维的,这些数字长串几乎互相正交。而下图则是MNIST数据的t-SNE嵌入,颜色对应于不同的数字,可以看到它找到了非常好的簇。那么t-SNE是怎么做到避免维度坍缩的呢?这很大程度上就要归功于它的目标损失函数:在这个函数中引进了对比损失来建模相关数据,在上面式子的第二项中,对于所有的目标,k都要远离Mj,而不仅仅只是一个目标需要远离。这种对比损失的思想是从线性嵌入引进的,而当只有一个“similar-to”关系时,线性关系及其代价函数可以转化为随机相邻嵌入层。这个工作是来克服线性潜在局部线性嵌入的问题。线性关系嵌入的方法只有一种关系。只有一个矩阵是单位矩阵。但我们要做的就是让一个向量和另一个向量相似。- 计算一个包含每个高维数据点大概率表,数据点i将挑选另一个数据点j作为它的近邻。这个概率将会等比例放缩为 。
- 学习把每个高维数据点Xi转换为一个二维映射点yi。
因此,当我使用相同的函数,可以模拟在高维数据中发现的相似性。在高维空间中,可能有一个数据点i,我们要计算它选择每个可能的相邻点的概率。然后我们把所有的数据都扔掉。每一个点选择其它点作为其邻居的概率包含了我们用于寻找低维图的点的所有信息。一旦我们获得了概率p_j|i,我们不需要在高维空间做任何计算。输入可以是数据点对之间的“不相似性”,而不是单个数据点在高维空间的位置。 我们的代价函数如上图所示。对于p_ij很大而q_ij很小的点,成本很高。对于q_ij很大而p_ij很小的点,成本很低,因为我们在Q_i分布上耗费了一些概率质量(probability mass)。上图是随机相邻嵌入(SNE)方法生成的结果,基于数字1-4图像之间的欧几里德距离,它可以产生相当好的嵌入。t-SNE是SNE的一个变体,我们把在二维空间中确定选择一个邻近点的相对概率的高斯分布替换为student-t分布。这为二维平面创造了更多的空间,补偿了低维空间的缺陷,并且使得不同的集群之间存在间隙。为什么协方差约束对于优化非线性或非参数化映射效果不佳?因为线性映射无法改变分布的熵和方差之间的比率。所以如果我们想优化一个线性映射来最大化分布的熵,我们可以简单地最大化方差。但这对于非线性映射来说不可行。一个非线性映射可以生成一个分布,它有两个相距很远但非常紧密的簇。为什么非线性版本的典型相关分析或线性判别式分析不可行?因为这些方法最大化了方差,以获得两个变量之间的高互信息,或者一个变量和一个类之间的高互信息。一个分布的方差可以作为替代它的熵,但仅当被优化的映射是线性的才成立。当然,你也可以通过应用一个固定的到数据的非线性映射,然后优化通常的线性映射。使用对比损失函数来提取空间或时间一致的向量表征。在2004年,Ruslan Salakhutdinov和我将对比损失用于我和Becker的工作。但是由于算力不够所以没发表任何东西。Li和Vinyals在2018年重新提出了对比损失的idea,并将其用于发现时间一致的表征,取得了不错的结果。现在,使用对比损失进行无监督学习已经很流行了。SimCLR:一种无监督对比学习的新方法
最后讲一种新方法SimCLR,这是Ting Chen开发的一种新的利用对比损失来提取表征的方法,当展示同一张图像的不同片段时,表征取得一致,但是该方法需要大量算力。
很简单,取图像x,然后对图像进行两次不同的裁剪。应用深度网络得到一个特征表示,到目前为止所有过程都是无监督的。h_i和h_j代表不同的向量。嵌入向量试图在对比中保持一致。也就是说,来自同一张图像的大量片段生成的嵌入向量要取得一致。
Ting发现他可以得到很好的表征,先用这种方式进行无监督学习,然后在表征的基础上训练线性分类器。
下图是各种无监督模型在ImageNet Top-1准确率上的对比,可以看到,通过无监督学习在线性层上做表征提取,这种方法既简单又高效,实现的准确率超过其它模型。
在ImageNet数据集上,SimCLR能得到与2012年AlexNet相同的性能,但是仅仅使用了1%的标签,这归功于两点:
1、首先在具有残差连接的深度卷积网络上做无监督表征学习。
雷锋网雷锋网(公众号:雷锋网)雷锋网
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/138532.html