attention-based RNN(LSTM):添加注意机制的RNN(LSTM)详解

1. 传统的RNN Encoder-Decoder

传统的RNN编解码方式喜欢将所有隐藏层的信息整合到最后的一个特征向量 C C C 中,然后再送入解码器进行解码。

在这种情况下,解码器可以如此表示:

y 1 = f ( C ) y_1 = f(C) y1=f(C)

y 2 = f ( C , y 1 ) y_2 = f(C,y_1) y2=f(C,y1)

y 3 = f ( C , y 1 , y 2 ) y_3 = f(C,y_1,y_2) y3=f(C,y1,y2)

在这里插入图片描述

这就会出现一些问题:

  • 由于序列过长,在中间的过程中难免会出现某一些中间状态的 h t h_{t} ht 信息的丢失
  • 由于编码器端的输入和解码器端的输出维度可能不一致所以导致了对齐问题。例如:我是中国人 → LSTM → I am Chinese, LSTM编码器输入为 5 5 5,而输出则为 3 3 3

2. 针对以上问题的 attention-based RNN(LSTM)Encoder-Decoder

在正式进入这个部分之前,我想大家弄清楚几个问题:

  • 不仅编码端(encoder)对应每个LSTM单元都有一个隐藏层 h t h_t ht 向量,对于解码端(decoder),每个LSTM单元也都有对应的一个隐藏层 h t h_t ht 向量
  • 隐藏层向量 h t h_t ht 与 语义特征向量 C t C_t Ct 确实有一定的关系,但是,确实不是一个东西,不能混为一谈。后面我们会讲到:在注意机制中 C t C_t Ct 是很多个 h t h_t ht 的加权求和最后得到的可以代表一个单独时间步的语义的特征向量
2.1 克服“遗忘问题”
  • 将原本最后合成一个语义向量的方法改变成:将每一步的隐藏层状态 h t h_{t} ht 都记录下来,以备不时之需,相当于把每一个步骤记在了小本本上,俗话说的好:好记性不如烂笔头。换而言之,就是每一个时间步的隐藏层输出 h 1 , h 2 , . . . , h t h_{1},h_{2},...,h_{t} h1,h2,...,ht 都对应产生一个语义向量 C 1 , C 2 , . . . , C t C_{1},C_{2},...,C_{t} C1,C2,...,Ct 如下图所示:
    在这里插入图片描述

这样的话,计算公式就会发生改变,在解码的时候就只需要查阅到在对应时间步的编码端的语义向量,就可以进行更加有效地解码,如下公式:

y 1 = f ( C 1 ) y_1 = f(C_1) y1=f(C1)

y 2 = f ( C 2 , y 1 ) y_2 = f(C_2,y_1) y2=f(C2,y1)

y 3 = f ( C 3 , y 1 , y 2 ) y_3 = f(C_3,y_1,y_2) y3=f(C3,y1,y2)

解码的详细过程如下:

以上图(右)中的 y 2 = a m y_2=am y2=am为例,解码要想得到 y 2 y_2 y2 位置的语义,我们容易知道,解码器应该根据公式:

y 2 = f ( C 2 , y 1 ) y_2 = f(C_2,y_1) y2=f(C2,y1)

来解出 y 2 y_2 y2 的正确结果,看起来,似乎 C 2 C_2 C2 语义向量应该完全由“是”这个输入的隐藏层 h 2 h_2 h2 来决定,但是事情又不完全是这个样子,因为 h 1 h_1 h1 h 3 h_3 h3 特征向量提供的信息(也就是从“我” 和 “中国” 提取出来的特征向量)也应该成为语义向量 C 2 C_2 C2 的一部分,对于 y 2 y_2 y2 的解码也有参考价值,为什么呢?

因为 “我” 的语义信息决定了 y 2 y_2 y2 的输出不能使用 “is” 和 “are”,只能是“am” 。所以我们说,“我” 的隐藏层向量 h 1 h_1 h1 对后来 y 2 y_2 y2 的解码产生了一定的影响,也就是说: y 2 y_2 y2 使用的语义特征 C 2 C_2 C2 不能仅仅由 h 2 h_2 h2 组成,也应该由 h 1 h_1 h1 组成。那么应该 如何来应对这个问题呢??

其实只需要把 h 1 h_1 h1 h 3 h_3 h3 的影响都算进来,做一个加权平均来作为 y 2 y_2 y2 解码所依赖的语义向量 C 2 C_2 C2即可:

C 2 = w 1 × h 1 + w 2 × h 2 + w 3 × h 3 + w 4 × h 4 C_2 = w_1×h_1+w_2×h_2+w_3×h_3+w_4×h_4 C2=w1×h1+w2×h2+w3×h3+w4×h4

在这里插入图片描述
从图中可以很明显的看出上述描述的过程。
毫无疑问,与 y 2 y_2 y2 解码最相关的 h 2 h_2 h2 的权重 w 2 w_2 w2 肯定是最大的,其余的权重和特征向量只是起到了 “考虑周全” 的作用,而不会过分地影响主体判断。那么关于这些权重 w 1 , . . . . , w n w_1,....,w_n w1,....,wn 在实际情况中 具体是如何确定的呢?

2.2 确定权重 w 1 , . . . , w n w_1,...,w_n w1,...,wn 的方式

确定权重的方式有多种,这里首先详细解释一下使用 <比较向量> q t ~ \tilde{q_t} qt~ 的方式来实现权重的合理的分配:

  • 定义一个 <比较向量> q t ~ \tilde{q_t} qt~ ,拿这个向量去和输入句子中的每一个词提取出的 “特征向量” ( h 1 , . . . , h t h_1,...,h_t h1,...,ht) 进行比较,并衡量他们之间的匹配度,也就是为每一个特征向量与 q t ~ \tilde{q_t} qt~ 的相似程度进行打分,记作: a t i a_{ti} ati,使用的打分函数就是 S c o r e Score Score,即:

    a t i = S c o r e ( q t ~ , h i ) a_{ti}=Score(\tilde{q_t},h_i) ati=Score(qt~,hi)

    注意:得出来的 a t i a_{ti} ati 不是一个 0~1 之间的值,但只要对它进行归一化就可以了。

    那有人要问了~~ 你通过什么样的方式来找出这个具有衡量其他向量重要性标准的 q t ~ \tilde{q_t} qt~ 呢?

    其实也很简单,原论文中把 q t ~ \tilde{q_t} qt~ 用的是 输出端的 h t − 1 h_{t-1} ht1 向量。比如说还是拿解码 “am” 的过程来看,在它附近的隐藏层 h 1 h_1 h1 的影响在直观上的感觉确实是最大的(对应图中红色的部分)。在这里插入图片描述
    当然,也有很多地方,设置 q t ~ \tilde{q_t} qt~ 是输出端 h t h_t ht 的向量(对应图中绿色的部分),例如:解码 “am” 时候使用 h 2 h_2 h2 ,他们也有他们的一套说辞~~
    在这里插入图片描述
    那么,现在确定了比较向量 q t ~ \tilde{q_t} qt~,接下来的问题就是关注这个评分函数 S c o r e Score Score 是如何进行相似度的评分的~~

2.3 Score 函数具体的实现细节和理论方法

想一下,如果你想比较两个矩阵的相似度

  • 矩阵的点积(内积),一定是比较容易想得到的方法,如图所示:
    在这里插入图片描述
    x x x y y y 矩阵的相似度越高,那么他们的内积结果 z z z 就会越大。

但是,这个方法存在一个问题,那就是当 x x x y y y 的矩阵维度不同的时候,两个矩阵,再进行 x x x 的转置矩阵和 y y y 做内积就不可行了。那有没有方法来解决这个问题呢?

当然是有的:

① 可以通过将矩阵进行增补,使其变成同一个维度的矩阵,但是这种方法有明显的缺陷,会使得运算的最终值变得没有那么强的可信度。

② 通过一个中间向量矩阵 W W W 来调整这两个矩阵之间的维度匹配问题。比如 x x x 矩阵是一个 1 × 4 1×4 1×4 的矩阵,而 y y y 矩阵则是一个 1 × 7 1×7 1×7 的矩阵向量,那么可以使用一个 4 × 7 4×7 4×7 的中间矩阵 W W W 来保证 x x x y y y 可以进行运算。
在这里插入图片描述
这样的运算还有一个好处,那就是 W W W 矩阵向量可以代表 x x x y y y 向量建立联系的过程,也就是 x x x 矩阵通过 W W W 映射到 y y y 的过程。

③ 第三种方法更加高级,就是建立一个神经网络,同时输入 x x x y y y ,直接把 z z z 输出出来,但是这种方法虽然高大上,却没有第二种方法有意义。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暖仔会飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值