在这篇博客文章The Unreasonable Effectiveness of Recurrent Neural Networks中,Andrej Karpathy 提到了基于神经网络的机器学习的未来方向:
注意力概念是神经网络中最近最有趣的架构创新。[…] 用于内存寻址的软注意力方案很方便,因为它保持模型完全可微分,但不幸的是,为了效率牺牲了,因为所有可以被关注的内容都被关注了(但以一种柔和的方式)。可以把它想象成在C语言中声明一个指针,这个指针不指向特定的地址,而是定义了整个内存中所有地址的分布,解引用这个指针会返回所指内容的加权和(这将是一个昂贵的操作!)。这促使多位作者将软注意力模型替换为硬注意力模型,在硬注意力中,人们对特定的内存块进行采样以进行关注(例如,对某个内存单元执行读/写操作,而不是在某种程度上从所有单元中读/写)。这种模型在哲学上更有吸引力,可扩展性和效率也更高,但不幸的是,它也是不可微分的。
我认为我理解了指针的比喻,但注意力到底是什么?为什么硬注意力不可微分?
我在这里找到了关于注意力的解释这里,但对于软/硬部分仍然感到困惑。
回答:
注意力到底是什么?
为了理解这个问题,我们需要深入了解注意力试图解决的某些问题。我认为关于硬注意力的开创性论文之一是Recurrent Models of Visual Attention,我建议读者即使起初不完全理解,也要阅读这篇论文。
为了回答注意力到底是什么的问题,我将尝试提出另一个我认为更容易回答的问题,即,为什么需要注意力?。我所链接的论文简洁地回答了这个问题,我将在这里重现部分推理。
想象一下,你被蒙上眼睛带到一个惊喜生日派对,然后你睁开了眼睛。你会看到什么?
现在,当我们说你看到了这张图片时,这是对以下更技术正确的动作序列的简短描述,即,随着时间移动你的眼睛并收集关于场景的信息。你不会一次看到图片的每个像素。你会关注图片的某些方面,一次一个时间步,并聚合信息。例如,即使是在这样杂乱的图片中,你也会认出你的叔叔比尔和表弟萨姆 :)。这是为什么呢?因为你关注了当前图片中的某些显著特征。
这正是我们希望赋予我们的神经网络模型的能力。为什么?可以将其视为某种正则化。(本部分答案引用了论文)你的常规卷积网络模型确实有能力识别杂乱的图像,但如何找到“好的”权重集呢?这是一项艰巨的任务。通过为网络提供一个新的架构级特征,允许它顺序地关注图像的不同部分并随时间聚合信息,我们使这项工作变得更容易,因为现在网络可以简单地学会忽略杂乱(至少这是希望的)。
我希望这回答了什么是硬注意力?的问题。现在让我们讨论其可微性的本质。嗯,记得我们在看生日图片时是如何方便地选择正确的位置去看的吗?我们是如何做到的?这个过程涉及到做出选择,这些选择很难用输入(图像)的可微函数来表示。例如,根据你已经看过的内容和图像,决定下一步看哪里。你可以有一个输出答案的神经网络,但我们不知道正确的答案!事实上,没有正确的答案。那么我们如何训练网络参数呢?神经网络的训练严重依赖于输入的可微损失函数。此类损失函数的例子包括对数似然损失函数、平方损失函数等。但在这种情况下,我们没有关于下一步看哪里正确的答案。那么我们如何定义损失呢?这就是一个名为强化学习(RL)的机器学习领域派上用场的地方。RL允许你在策略空间中进行梯度计算,使用的方法包括强化方法和演员-评论家算法等。
什么是软注意力?
本部分答案借鉴了一篇名为teaching machines to read and comprehend的论文。使用强化学习方法(如强化方法)的一个主要问题是它们具有高方差(就计算的预期奖励的梯度而言),这种方差与网络中隐藏单元的数量呈线性增长。这不是一件好事,特别是如果你要构建一个大型网络。因此,人们试图寻找可微的注意力模型。这意味着注意力项以及由此产生的损失函数是输入的可微函数,因此所有梯度都存在。因此,我们可以使用标准的反向传播算法以及通常的损失函数之一来训练我们的网络。那么什么是软注意力呢?
在文本的背景下,它指的是模型能够选择对文档中的某些词赋予更高的重要性,而不是其他标记。如果你在阅读一篇文档并需要根据它回答一个问题,专注于文档中的某些标记可能会帮助你更好地回答问题,而不是简单地将每个标记视为同样重要。这就是文本中软注意力的基本思想。它是一个可微模型的原因是,你决定对每个标记给予多少关注完全基于特定的标记和手头的查询。例如,你可以将文档的标记和查询表示在同一个向量空间中,并查看点积/余弦相似度作为衡量给定查询时应对该特定标记给予多少关注的度量。请注意,余弦距离操作相对于其输入是完全可微的,因此整体模型最终是可微的。请注意,论文中使用的具体模型有所不同,这个论点仅用于演示,尽管其他模型确实使用基于点积的注意力分数。