注意力机制

遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步!
在这里插入图片描述
需掌握的前提知识: Seq2seq、编码器&解码器神经网络
本文参考:【官方双语】一个视频理解神经网络注意力机制,详细阐释!
注:本文介绍的注意力机制是基于编码器-解码器模型的,较为复杂。看完之后建议看一下基于 RNN 的注意力机制,你会对注意力机制理解得更加清晰。

一、注意力机制的来源

在基本的编码器-解码器中,展开的 LSTM 会将整个输入句子压缩成单个上下文向量,这对于短句子是可行的,但是对于有数千个词的大量输入,前面的输入信息会被稀释。

比如当输入一个长句子 Don't take the cookies I just bought from the table,一开始的单词 Don't 可能被遗忘,这样一来句子就变成了 take the cookies I just bought from the table,这和原来的句子意思完全相反!

因此,有时候记住前面的信息是非常重要的。那么怎么来解决这个问题呢?


让我们先来回想一下基本的循环神经网络,这个模型在处理长期记忆时会有问题,即前面的信息很难被记住,因此它们时通过单一路径来运行长期记忆和短期记忆的。而 LSTM 通过提供分离的路径来解决长期记忆的问题。

但即使有了分离的路径,如果我们有大量的数据,两条路径必须携带大量的信息,这意味着句子开头的单词也可能丢失。而注意力机制的主要思想是添加一堆新路径
在这里插入图片描述
注意力机制通过在编码器每个输入模块上引出一条路径到解码器,从而使解码器的每一步都可以直接访问到每个输入模块上的输入值。

二、注意力机制的原理

假设我们要将 Let's go 翻译为法语。
现在我们初始化编码器中 LSTM 的长期记忆和短期记忆(即单元状态和隐藏状态)为 0。

在这里插入图片描述
此时,所有输入都被压缩进了这组上下文向量中。我们再用这组上下文向量来初始化解码器中的一组单独的 LSTM 单元。

在这里插入图片描述
我们将 EOS 输入到嵌入层。接着我们加入注意力机制。


第一步:计算相似分数,计算解码器 LSTMs 的输出向量(短期记忆或隐藏状态)与编码器 LSTMs 中每一步的输出向量的相似分数
在这里插入图片描述
其中一个计算相似分数的方法是余弦相似性(Cosine Similarity)

在这里插入图片描述
即两向量内积后再除以两向量的模长,函数值处于 [ − 1 , 1 ] [-1,1] [1,1] 之间。

相似度越大,意味着两者更为相似。大的负值意味着两者的相反意义强。

如下图所示,令 A A A 表示编码器某一步的输出向量, B B B 表示解码器某一步的输出向量
在这里插入图片描述
A A A B B B 的余弦相似度为:
在这里插入图片描述
不过注意力机制中计算相似性更常见的做法是只计算余弦相似度的分子部分,即只进行点积运算,这样可以节省一些额外的计算量。

将所有相似度计算出来后,我们得到:
在这里插入图片描述


第二步:使用相似度分配成分,从上图我们可以看到,go<EOS>的相似度为 0.01 0.01 0.01,比 let's<EOS>的相似度 − 0.41 -0.41 0.41 高,因此我们希望 go 的编码对解码器输出的第一个单词有更大影响。

为此,我们将这些分数通过 SoftMax 函数进行运算,运算结果表示单词被编码后使用的百分比。在下图这种情况下,我们使用 40 % 40\% 40% let's 被编码后的信息和 60 % 60\% 60% go 被编码后的信息来确定第一个翻译出的词。
在这里插入图片描述
因此,我们将 let's 被编码后的向量乘 0.4 0.4 0.4,将 go 被编码后的向量乘 0.6 0.6 0.6,再将这两者相加,得到 <EOS> 的注意力值。
在这里插入图片描述


第三步:预测,使用注意力输出和解码器的隐藏状态进行拼接,再通过 SoftMax 函数进行运算来进行选择
在这里插入图片描述


现在由于输出是 vamos,而不是 <EOS>,我们需要将 vamos 输入到解码器下一步的嵌入层中,然后重复上面的计算过程,之后解码器的第二个输出是 <EOS>,到此我们完成了解码过程。

三、注意力机制的一般定义

给定一个查询向量(query vector) 和一组值向量(value vectors),注意力机制根据 query 计算 value 的加权和。

具体而言,注意力机制可以分为以下几个步骤:

  1. 计算相关性
    给定一个查询向量(query vector) 和一组值向量(value vectors),首先计算 query 与每个 value 之间的相关性。通常可以使用点积、内积、余弦相似度等方法来度量相关性。计算结果可以表示为一个得分向量,其中每个得分表示 query 与对应 value 的相关性。

  2. 计算注意力权重
    通过对得分向量进行归一化,可以得到value。归一化可以使用 softmax 函数实现,它会将得分转化为概率分布,使得所有注意力权重之和为1。

  3. 加权求和
    注意力权重值向量(value vectors) 相乘,并将乘积相加,可以得到一个加权和。这个加权和代表了注意力机制关注的值向量的表示。加权和的计算可以通过矩阵乘法等方法高效地实现。

四、总结

总结一下,当我们将注意力机制添加到基本的编码器-解码器模型时,编码器工作基本保持不变,但在解码器的每一步都可以访问每个输入单词的单独编码,我们利用相似度分数和 SoftMax 函数来确定每个编码后的输入单词应该以多大百分比用于预测下一个输出单词。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛思颖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值