• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

长短时记忆网络 vs. 长短时记忆单元论文阅读long short term memory networks for machine reading

武飞扬头像
极致一流技术
帮助1

本文总结long short term memory networks for machine reading 论文中提出的基于memory networks的方法,它基于attention机制将LSTM中的记忆单元换成memory networks,用于增加RNN记忆量。

论文动机

RNN这样的语言模型工具将句子处理成序列,依据它之前的记忆循环处理每个单词,直到理解整个句子的语义。

序列网络面临三大挑战:

  • 梯度消失和梯度爆炸:能够通过GRU、LSTM解决梯度消失,使用gradient clipping解决梯度爆炸
  • 内存压缩问题:在处理输入过程中,输入序列信息不断被压缩成稠密向量的同时,需要大量内存存储之前的信息。这导致序列网络在较长序列上泛化能力较差,而又在短序列上浪费了大量时间。
  • 缺乏处理输入结构的机制

这篇论文旨在解决上述三个问题,同时维持序列语言模型增量的生成特性。

LSTM RNN网络

LSTM RNN主要处理一个固定长度的序列 x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1,x2,...,xn)。在处理序列时,其通过增量地向一个记忆槽中插入内容,通过门来控制新的内容是否被记忆、旧的内容是否被抹除,以及当前的内容是否需要反馈到外面。在时刻t,记忆 c t c_t ct,隐藏状态 h t h_t ht的更新如下:

[ i t f t o t c t ^ ] = [ σ σ σ t a n h ] W ∗ [ h t − 1 , x t ] \left[ \begin{matrix} i_t \\ f_t \\ o_t \\ \hat{c_t}\end{matrix} \right] = \left[ \begin{matrix} \sigma \\ \sigma \\ \sigma \\ tanh\end{matrix} \right] W * [h_{t-1}, x_t] itftotct^=σσσtanhW[ht1,xt]
c t = f t ⊙ c t − 1 i t ⊙ c t ^ h t = o t ⊙ t a n h ( c t ) c_t = f_t \odot c_{t-1} i_t \odot \hat{c_t} \\ h_t = o_t \odot tanh(c_t) ct=ftct1 itct^ht=ottanh(ct)

LSTM 存在的问题

  • LSTM 在循环压缩下记忆序列的能力到底如何?LSTM产生下一个状态,下一个状态总是基于前一个状态,独立于 h 1 , . . . , h t − 1 h_1, ..., h_{t-1} h1,...,ht1和token x 1 , x 2 , . . . , x t x_1, x_2, ..., x_t x1,x2,...,xt。LSTM的假设是:当前的状态能够汇总所有LSTM看到的token。该假设在序列足够长的时候,无法成立。
  • LSTM 按照序列顺序一个一个token的整合信息,但没有明确的机制从结构中推理,对token之间的关系建模

解决方案:LSTMN

本文的解决方法是将LSTM记忆细胞替换成记忆网络(memory networks)。LSTMN将每个输入token的上下文表示都保存到一个独立的记忆槽中,记忆量随着时间逐渐增加直到记忆达到上限。

这种方法的好处就是能够基于attention层帮助网络推理token之间的关系,通过非马尔可夫的方式进行状态更新。本文主要关注机器阅读。

下图展示了LSTMN的单元结构:

学新通
模型维护着两个向量集合,存储隐藏状态tape(文章用tape猜测是为了表达向量集合的意思)与环境交互(即计算注意力),用于实际记录记忆的记忆tape。因此,每个token都对应一个隐藏状态向量和记忆向量。

x t x_t xt为当前输入, C t − 1 = ( c 1 , . . . , c t − 1 ) C_{t-1} = (c_1, ..., c_{t-1}) Ct1=(c1,...,ct1)表示当前记忆tape, H t − 1 = ( h 1 , h 2 , . . . , h t − 1 ) H_{t-1} = (h_1, h_2, ..., h_{t-1}) Ht1=(h1,h2,...,ht1)表示当前隐藏状态tape,在时刻t,模型通过一个attention层通过 h 1 , . . . , h t − 1 h_1, ..., h_{t-1} h1,...,ht1计算 x t x_t xt x 1 , . . . , x t − 1 x_1,..., x_{t-1} x1,...,xt1:

a i t = v T t a n h ( W h h i W x x t W h ˘ h ˘ t − 1 ) s i t = s o f t m a x ( a i t ) a_i^{t} = v^{T}tanh(W_hh_i W_xx_t W_{\breve{h}}\breve{h}_{t-1}) \\ s_i^{t} = softmax(a_i^{t}) ait=vTtanh(Whhi Wxxt Wh˘h˘t1)sit=softmax(ait)

上述公式直接生成前面所有token的隐藏状态的分布。基于该分布,自适应地计算summary vector:
[ h ˘ t c ˘ t ] = ∑ i = 1 t − 1 s i t ∗ [ h i c i ] \left[ \begin{matrix} \breve{h}_t \\ \breve{c}_t \end{matrix} \right] = \sum_{i=1}^{t-1} s_i^{t} * \left[ \begin{matrix} h_i \\ c_i \end{matrix} \right] [h˘tc˘t]=i=1t1sit[hici]

然后利用summary vector计算循环状态:
[ i t f t o t c ^ t ] = [ σ σ σ t a n h ] W ∗ [ h ˘ t , x t ] \left[ \begin{matrix} i_t \\ f_t \\ o_t \\ \hat{c}_t \end{matrix} \right] = \left[ \begin{matrix} \sigma \\ \sigma \\ \sigma \\ tanh \end{matrix} \right] W * [\breve{h}_t, x_t] itftotc^t=σσσtanhW[h˘t,xt]
c t = f t ⊙ c ˘ t i t ⊙ c ^ t c_t = f_t \odot \breve{c}_t i_t \odot \hat{c}_t ct=ftc˘t itc^t
h t = o t ⊙ t a n h ( c t ) h_t = o_t \odot tanh(c_t) ht=ottanh(ct)

其中 v , W h , W x , W h ˘ v, W_h, W_x, W_{\breve{h}} v,Wh,Wx,Wh˘是新的权重项。

LSTMN的主体思想就是借助attention机制,引入token之间的关联。这种关联是可导的,作为表征学习网络的一部分加入到整个网络中.

如何针对两个序列建模

一般NLP任务都需要对两个序列建模,如机器翻译。传统的方法就是encoder-decoder方法。第二个序列作为条件为第一个序列的概率输出处理。LSTMN是用于在序列内部的token之间关系建模,那么怎样将其应用到encoder-decoder架构中?这需要考虑到如何对两个序列的alignment(语义对齐)建模。

作者提出两种方法:

Shallow Attention Fusion

这种方法简单地将LSTMN作为一个独立的模块,在RNN或LSTM的encoder-decoder架构中使用。采用经典的encoder-decoder架构,同时当decoder 读取target world时采用经典的attention机制,连接encoder和 decoder。

学新通

Deep Attention Fusion

学新通

将序列内部的关系和序列之间的关系通过一个attention深度融合。具体架构如上图所示。

继续令 C C C H H H表示目标记忆tape和隐藏状态tape,用于保存已经处理过的目标token。在序列内部的attention仍然按照上面的方法计算,而序列之间的attention则需要额外考虑源记忆tape和隐藏状态tape,令 A = [ α 1 , . . . , α m ] A=[\alpha_1, ..., \alpha_m] A=[α1,...,αm] Y = [ γ 1 , . . . , γ m ] Y = [\gamma_1, ..., \gamma_m] Y=[γ1,...,γm],其中 m m m是源序列长度。

在时刻t,利用全部的源序列token,应当按照如下的公式计算:
b j t = u T t a n h ( W γ γ j W x x t X γ ˘ γ ˘ t − 1 ) b_j^t = u^Ttanh(W_\gamma\gamma_j W_xx_t X_{\breve{\gamma}}\breve{\gamma}_{t-1}) bjt=uTtanh(Wγγj Wxxt Xγ˘γ˘t1)
p j t = s o f t m a x ( b j t ) p_j^t = softmax(b_j^t) pjt=softmax(bjt)
学习一个自适应的源内存tape和隐藏状态tape的线性表示:
[ γ ˘ t α ˘ t ] = ∑ j = 1 m p j t ∗ [ γ j α j ] \left[ \begin{matrix} \breve{\gamma}_t \\ \breve{\alpha}_t \end{matrix} \right] = \sum_{j=1}^{m}p_j^t * \left[ \begin{matrix} \gamma_j \\ \alpha_j \end{matrix} \right] [γ˘tα˘t]=j=1mpjt[γjαj]
基于此,设计另外一个门函数,用来限制哪些源记忆表示,可以加入到目标记忆tape中:
r t = σ ( W r ∗ [ γ ˘ t , x t ] ) r_t = \sigma(W_r * [\breve{\gamma}_t, x_t]) rt=σ(Wr[γ˘t,xt])
新的目标记忆向量由三部分组成:

  • inter-alignment: 源token和目标token之间的语义对齐
  • intra-relation: 目标token之间的关系
  • new input formation: 新的输入信息
    c t = r t ⊙ α ˘ t f t ⊙ c ˘ t i t ⊙ c ˘ t c_t = r_t \odot \breve{\alpha}_t f_t \odot \breve{c}_t i_t \odot \breve{c}_t ct=rtα˘t ftc˘t itc˘t
    h t = o t ⊙ t a n h ( c t ) h_t = o_t \odot tanh(c_t) ht=ottanh(ct)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhihgbij
系列文章
更多 icon
同类精品
更多 icon
继续加载