【吴恩达deeplearning.ai】Course 5 - 3.8 注意力模型

注意力模型 (Attention Model)

在上个视频中你已经见到了,注意力模型如何让一个神经网络只注意到一部分的输入句子。当它在生成句子的时候,更像人类翻译。让我们把这些想法转化成确切的式子,来实现注意力模型。
在这里插入图片描述
跟上个视频一样,我们先假定有一个输入句子,并使用双向的RNN,或者双向的GRU或者双向的LSTM,去计算每个词的特征。实际上GRU和LSTM经常应用于这个,可能LSTM更经常一点。对于前向传播(the forward occurrence),你有第一个时间步的前向传播的激活值(a forward occurrence first time step),第一个时间步后向传播的激活值,后向的激活值,以此类推。他们一共向前了五个时间步,也向后了五个时间步,技术上我们把这里设置为0。我们也可以后向传播6次,设一个都是0的因子,实际上就是个都是0的因子。为了简化每个时间步的记号,即使你在双向RNN已经计算了前向的特征值和后向的特征值,我就用 a < t > a^{<t>} a<t>来一起表示这些联系。所以 a < t > a^{<t>} a<t>就是时间步 t t t上的特征向量。但是为了保持记号的一致性,我们用第二个,也就是 t ′ t' t,实际上我将用 t ′ t' t来索引法语句子里面的词。接下来我们只进行前向计算,就是说这是个单向的RNN,用状态 S S S表示生成翻译。所以第一个时间步,它应该生成 y < 1 > y^{<1>} y<1>,当你输入上下文 C C C的时候就会这样,如果你想用时间来索引它,你可以写 C < 1 > C^{<1>} C<1>,但有时候我就写个 C C C,就是没有上标的 C C C,这个会取决于注意力参数,即 a < 1 , 1 > a^{<1,1>} a<1,1> a < 1 , 2 > a^{<1,2>} a<1,2>以此类推,告诉我们应该花多少注意力。同样的,这个 α \alpha α参数告诉我们上下文有多少取决于我们得到的特征,或者我们从不同时间步中得到的激活值。所以我们定义上下文的方式实际上来源于被注意力权重加权的不同时间步中的特征值。于是更公式化的注意力权重将会满足非负的条件,所以这就是个0或正数,它们加起来等于1。我们等会会见到我们如何确保这个成立,我们将会有上下文,或者说在 t = 1 t=1 t=1时的上下文,我会经常省略上标,这就会变成对 t ′ t' t的求和。这个权重的所有的 t ′ t' t值,加上这些激活值。所以这里的这项(上图编号1所示)就是注意力权重,这里的这项(上图编号2)来自于这里(上图编号3),于是 α < t , t ′ > \alpha^{<t,t'>} α<t,t>就是 y < t > y^{<t>} y<t>应该在 t ′ t' t时花在 a a a上注意力的数量。换句话来说,当你在 t t t处生成输出词,你应该花多少注意力在第 t ′ t' t个输入词上面,这是生成输出的其中一步。然后下一个时间步,你会生成第二个输出。于是相似的,你现在有了一个新的注意力权重集,再找到一个新的方式将它们相加,这就产生了一个新的上下文,这个也是输入,且允许你生成第二个词。只有现在才用这种方式相加,它会变成第二个时间步的上下文。即对 t ′ t' t α < 2 , t ′ > \alpha^{<2,t'>} α<2,t>进行求和,于是使用这些上下文向量, C < 1 > C^{<1>} C<1>写到这里, C < 2 > C^{<2>} C<2>也同理。这里的神经网络看起来很像相当标准的RNN序列,这里有着上下文向量作为输出,我们可以一次一个词地生成翻译,我们也定义了如何通过这些注意力权重和输入句子的特征值来计算上下文向量。剩下唯一要做的事情就是定义如何计算这些注意力权重。让我们下张幻灯片看看。
在这里插入图片描述
回忆一下 α < t , t ′ > \alpha^{<t,t'>} α<t,t>,是你应该花费在 a < t ′ > a^{<t'>} a<t>上的注意力的数量,当你尝试去生成第 t t t个输出的翻译词,让我们先把式子写下来,再讨论它是怎么来的。这个式子你可以用来计算 α < t , t ′ > \alpha^{<t,t'>} α<t,t>,在此之前我们要先计算 e < t , t ′ > e^{<t,t'>} e<t,t>,关键要用softmax,来确保这些权重加起来等于1。如果你对 t ′ t' t求和,比如每一个固定的 t t t值,这些加起来等于1。如果你对 t ′ t' t求和,然后优先使用softmax,确保这些值加起来等于1。

现在我们如何计算这些 e e e项,一种我们可以用的方式是用下面这样的小的神经网络,于是 s < t − 1 > s^{<t-1>} s<t1>就是神经网络在上个时间步的状态,于是这里我们有一个神经网络,如果你想要生成 y < t > y^{<t>} y<t>,那么 s < t − 1 > s^{<t-1>} s<t1>就是上一时间步的隐藏状态,即 s < t > s^{<t>} s<t>。这是给小神经网络的其中一个输入,也就是在神经网络中的一个隐藏层,因为你需要经常计算它们,然后 a < t ′ > a^{<t'>} a<t>,即上个时间步的的特征是另一个输入。直观来想就是,如果你想要决定要花多少注意力在 t ′ t' t的激活值上。于是,似乎它会很大程度上取决于你上一个时间步的的隐藏状态的激活值。你还没有当前状态的激活值,因为上下文会输入到这里,所以你还没计算出来,但是看看你生成上一个翻译的RNN的隐藏状态,然后对于每一个位置,每一个词都看向他们的特征值,这看起来很自然,即 α < t , t ′ > \alpha^{<t,t'>} α<t,t> e < t , t ′ > e^{<t,t'>} e<t,t>应该取决于这两个量。但是我们不知道具体函数是什么,所以我们可以做的事情就是训练一个很小的神经网络,去学习这个函数到底是什么。相信反向传播算法,相信梯度下降算法学到一个正确的函数。这表示,如果你应用这整个的模型,然后用梯度下降来训练它,这是可行的。这个小型的神经网络做了一件相当棒的事情,告诉你 y < t > y^{<t>} y<t>应该花多少注意力在 a < t ′ > a^{<t'>} a<t>上面,然后这个式子确保注意力权重加起来等于1,于是当你持续地一次生成一个词,这个神经网络实际上会花注意力在右边的这个输入句子上,它会完全自动的通过梯度下降来学习。

这个算法的一个缺点就是它要花费三次方的时间,就是说这个算法的复杂是 O ( n 3 ) O(n3) O(n3)的,如果你有 T x T_x Tx个输入单词和 T y T_y Ty个输出单词,于是注意力参数的总数就会是 T x ∗ T y T_x* T_y TxTy,所以这个算法有着三次方的消耗。但是在机器翻译的应用上,输入和输出的句子一般不会太长,可能三次方的消耗是可以接受,但也有很多研究工作,尝试去减少这样的消耗。那么讲解注意想法在机器翻译中的应用,就到此为止了。虽然没有讲到太多的细节,但这个想法也被应用到了其他的很多问题中去了,比如图片加标题(image captioning),图片加标题就是看一张图,写下这张图的标题。底下的这篇论文来源于Kevin Chu,Jimmy Barr, Ryan Kiros, Kelvin Shaw, Aaron Korver, Russell Zarkutnov, Virta Zemo, 和 Andrew Benjo。他们也显示了你可以有一个很相似的结构看图片,然后,当你在写图片标题的时候,一次只花注意力在一部分的图片上面。如果你感兴趣,那么我鼓励你,也去看看这篇论文,做一些编程练习。
在这里插入图片描述
因为机器翻译是一个非常复杂的问题,在之前的练习中,你应用了注意力,在日期标准化的问题(the date normalization problem)上面,问题输入了像这样的一个日期,这个日期实际上是阿波罗登月的日期,把它标准化成标准的形式,或者这样的日期。用一个序列的神经网络,即序列模型去标准化到这样的形式,这个日期实际上是威廉·莎士比亚的生日。一般认为是这个日期正如你之前联系中见到的,你可以训练一个神经网络,输入任何形式的日期,生成标准化的日期形式。其他可以做的有意思的事情是看看可视化的注意力权重(the visualizations of the attention weights)。这个一个机器翻译的例子,这里被画上了不同的颜色,不同注意力权重的大小,我不想在这上面花太多时间,但是你可以发现,对应的输入输出词,你会发现注意力权重,会变高,因此这显示了当它生成特定的输出词时通常会花注意力在输入的正确的词上面,包括学习花注意在哪。 在注意力模型中,使用反向传播时, 什么时候学习完成。

这就是注意力模型,在深度学习中真的是个非常强大的想法。在本周的编程练习中,我希望你可以享受自己应用它的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值