Seq2seq模型及注意力机制模型

对于处理输出序列为不定长情况的问题,例如机器翻译,例如英文到法语的句子翻译,输入和输出均为不定长。前人提出了seq2seq模型,basic idea是设计一个encoder与decoder,其中encoder将输入序列编码为一个包含输入序列所有信息的context vector $ c , d e c o d e r 通 过 对 ,decoder通过对 decoder c $的解码获得输入序列的信息,从而得到输出序列。encoder及decoder都通常为RNN循环神经网络

LSTM
  • forget gate:
    f t = σ ( W f [ h t − 1 ; x t ] + b f ) f_{t} = \sigma (W_{f}[h_{t-1};x_{t}]+b_{f}) ft=σ(Wf[ht1;xt]+bf)
    W f W_{f} Wf是遗忘门的权重矩阵, [ h t − 1 ; x t ] [h_{t-1};x_{t}] [ht1;xt]表示把两个向量连接成一个更长的向量, b f b_{f} bf是遗忘门的偏置项, σ \sigma σ是sigmoid函数
    如果输入的维度是 d x d_{x} dx,隐藏层的维度是 d h d_{h} dh,单元状态的维度是 d c d_{c} dc(通常 d c = d h d_{c} = d_{h} dc=dh),则遗忘门的权重矩阵 W f W_{f} Wf的维度是 d c × ( d h + d x ) d_{c}×(d_{h}+d_{x}) dc×(dh+dx)

  • input gate
    i t = σ ( W i [ h t − 1 ; x t ] + b i ) i_{t} = \sigma (W_{i}[h_{t-1};x_{t}]+b_{i}) it=σ(Wi[ht1;xt]+bi)

  • output gate
    o t = σ ( W o [ h t − 1 ; x t ] + b o ) o_{t} = \sigma (W_{o}[h_{t-1};x_{t}]+b_{o}) ot=σ(Wo[ht1;xt]+bo)

  • final out
    c ~ t = t a n h ( W c [ h t − 1 ; x t ] + b c ) \tilde{c}_{t}= tanh(W_{c}[h_{t-1};x_{t}]+b_{c}) c~t=tanh(Wc[ht1;xt]+bc)
    c t = f t ∗ c t − 1 + i t ∗ c ~ t c_{t} = f_{t} * c_{t-1} + i_{t} * \tilde{c}_{t} ct=ftct1+itc~t
    h t = o t ∗ t a n h ( c t ) h_{t} = o_{t} * tanh(c_{t}) ht=ottanh(ct)

  • 前向计算每个神经元的输出值,对于LSTM来说就是 f t f_{t} ft, i t i_{t} it, c t c_{t} ct, o t o_{t} ot, h t h_{t} ht 5个向量的值

  • 反向计算每个神经元的误差项 δ \delta δ,包括两个方向,一是沿时间的反向传播,即从当前t时刻开始,计算每个时刻的误差项;另一个是将误差项向上一层传播

  • 根据相应的误差项,计算每个权重的梯度

  • sigmoid

δ ( x ) = 1 1 + e − x \delta (x) = \frac{1}{1+e^{-x}} δ(x)=1+ex1
δ ′ ( x ) = e − x ( 1 + e − x ) 2 = δ ( x ) ( 1 − δ ( x ) ) \delta^{'} (x) = \frac{e^{-x}}{(1+e^{-x})^{2}}=\delta(x)(1-\delta(x)) δ(x)=(1+ex)2ex=δ(x)(1δ(x))

  • tanh

t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+exexex
t a n h ′ ( x ) = 1 − t a n h 2 ( x ) tanh^{'}(x) = 1 - tanh^{2}(x) tanh(x)=1tanh2(x)

LSTM需要学习的参数共有8组,分别是:

  • 遗忘门的权重矩阵 W f W_{f} Wf和偏置项 b f b_{f} bf
  • 输入门的权重矩阵 W i W_{i} Wi和偏置项 b i b_{i} bi
  • 输出门的权重矩阵 W o W_{o} Wo和偏置项 b o b_{o} bo
  • 计算单元状态的权重矩阵 W c W_{c} Wc和偏置项 b c b_{c} bc
seq2seq模型
Encoder

编码器的作用是把一个不定长的输入序列$ x_{1},x_{2},…,x_{T} $转化成一个定长的context vector c c c. 该context vector编码了输入序列$ x_{1},x_{2},…,x_{T} 的 序 列 。 回 忆 一 下 循 环 神 经 网 络 , 假 设 该 循 环 神 经 网 络 单 元 为 的序列。回忆一下循环神经网络,假设该循环神经网络单元为 f$(可以为vanilla RNN, LSTM, GRU),那么hidden state为

h t = f ( x t , h t − 1 ) h_{t} = f(x_{t},h_{t-1}) ht=f(xt,ht1)

编码器的context vector是所有时刻hidden state的函数,即:

c = q ( h 1 , . . . , h T ) c=q(h_{1},...,h_{T}) c=q(h1,...,hT)

简单地,我们可以把最终时刻的hidden state[公式]作为context vecter。当然我们也可以取各个时刻hidden states的平均,以及其他方法。

Decoder

编码器最终输出一个context vector c c c,该context vector编码了输入序列$ x_{1},x_{2},…,x_{T} $的信息。

假设训练数据中的输出序列为 y 1 y 2 , . . . , y T ′ y_{1}y_{2},...,y_{T}^{'} y1y2,...,yT,我们希望每个 t t t时刻的输出即取决于之前的输出也取决于context vector,即估计 P ( y t ′ ∣ y 1 , . . . , y t ′ − 1 , c ) P(y_{t'}|y_{1},...,y_{t'-1},c) P(yty1,...,yt1,c),从而得到输出序列的联合概率分布:

P ( y 1 , . . . , y T ′ ) = ∏ t ′ − 1 T ′ P ( y t ′ ∣ y 1 , . . . , y t ′ − 1 , c ) P(y_{1},...,y_{T'})=\prod_{t'-1}^{T'}P(y_{t'}|y_{1},...,y_{t'-1},c) P(y1,...,yT)=t1TP(yty1,...,yt1,c)

并定义该序列的损失函数loss function

− log ⁡ P ( y 1 , . . . , y T ′ ) -\log P(y_{1},...,y_{T'}) logP(y1,...,yT)

通过最小化损失函数来训练seq2seq模型。

那么如何估计$ P(y_{t’}|y_{1},…,y_{t’-1},c) $?

我们使用另一个循环神经网络作为解码器。解码器使用函数 p p p来表示 t ′ t' t时刻输出 y t ′ y_{t'} yt的概率

P ( y t ′ ∣ y 1 , . . . , y t ′ − 1 , c ) = p ( y t ′ − 1 , s t ′ , c ) P(y_{t'}|y_{1},...,y_{t'-1},c) = p(y_{t'-1},s_{t'},c) P(yty1,...,yt1,c)=p(yt1,st,c)

为了区分编码器中的hidden state[公式],其中[公式]为[公式]时刻解码器的hidden state。区别于编码器,解码器中的循环神经网络的输入除了前一个时刻的输出序列[公式],和前一个时刻的hidden state[公式]以外,还包含了context vector[公式]。即:

s t ′ = g ( y t ′ − 1 , s t ′ − 1 , c ) s_{t'} = g(y_{t'-1},s_{t'-1},c) st=g(yt1,st1,c)

其中函数g为解码器的循环神经网络单元。

DA-RNN
第一阶段,使用注意力机制自适应地提取每个时刻的相关feature

e t k = v e T t a n h ( W e [ h t − 1 ; c t − 1 ] + U e x k ) e_{t}^{k}=v_{e}^{T}tanh(W_{e}[h_{t-1};c_{t-1}]+U_{e}x^{k}) etk=veTtanh(We[ht1;ct1]+Uexk)

  • 用softmax函数将其归一化
    α t k = e x p ( e t k ) ∑ i − 1 n e x p ( e t i ) \alpha _{t}^{k}=\frac{exp(e_{t}^{k})}{\sum_{i-1}^{n}exp(e_{t}^{i})} αtk=i1nexp(eti)exp(etk)
  • 得到更新后的x
    x ~ = ( α t 1 x t 1 , α t 2 x t 2 , . . . , α t n x t n ) \tilde{x} = (\alpha _{t}^{1}x_{t}^{1}, \alpha _{t}^{2}x_{t}^{2},...,\alpha _{t}^{n}x_{t}^{n}) x~=(αt1xt1,αt2xt2,...,αtnxtn)

  • 选取LSTM作为编码器 f 1 f_{1} f1
    h t = f 1 ( h t − 1 , x ~ ) h_{t} = f_{1}(h_{t-1}, \tilde{x}) ht=f1(ht1,x~)
第二阶段,使用另一个注意力机制选取与之相关的encoder hidden states
  • 对所有时刻的 h t ′ h_{t'} ht取加权平均,即:

c t ′ = ∑ t − 1 T β t ′ t h t c_{t}^{'} = \sum_{t-1}^{T}\beta _{t^{'}}^{t}h_{t} ct=t1Tβttht

  • β t ′ t \beta _{t^{'}}^{t} βtt的设计类似于Bahanau的工作,基于前一个时刻解码器的hidden state $ d_{t’-1} 和 c e l l s t a t e 和cell state cellstates_{t’-1}^{’}$计算得到:

l t t = v d T t a n h ( W d [ d t − 1 ; s t − 1 ′ ] + U d h t ) l_{t}^{t}=v_{d}^{T}tanh(W_{d}[d_{t-1};s_{t-1}^{'}]+U_{d}h_{t}) ltt=vdTtanh(Wd[dt1;st1]+Udht)
β t i = e x p ( l t i ) ∑ j = 1 T e x p ( l t j ) \beta _{t}^{i}=\frac{exp(l_{t}^{i})}{\sum_{j=1}^{T}exp(l_{t}^{j})} βti=j=1Texp(ltj)exp(lti)
c t = ∑ i = 1 T β t i h i c_{t}=\sum_{i=1}^{T}\beta _{t}^{i}h_{i} ct=i=1Tβtihi

  • 解码器的输入是上一个时刻的目标序列 y t ′ − 1 y_{t'-1} yt1和hidden state d t ′ − 1 d_{t'-1} dt1以及context vector c t ′ − 1 c_{t'-1} ct1,即
    d t ′ = f 2 ( y t ′ − 1 , c t ′ − 1 , d t ′ − 1 ) d_{t'}=f_{2}(y_{t'-1},c_{t'-1},d_{t'-1}) dt=f2(yt1,ct1,dt1)
  • 这里设计了 y ~ t ′ − 1 \tilde{y}_{t'-1} y~t1来combie y t ′ − 1 y_{t'-1} yt1 c t ′ − 1 c_{t'-1} ct1的信息,即
    y ~ t ′ − 1 = ω ~ T [ y t ′ − 1 ; c t ′ − 1 ] + b ~ \tilde{y}_{t'-1} = \tilde{\omega }^{T}[y_{t'-1};c_{t'-1}]+\tilde{b} y~t1=ω~T[yt1;ct1]+b~
  • 然后
    d t = f 2 ( d t − 1 , y ~ t − 1 ) d_{t}=f_{2}(d_{t-1},\tilde{y}_{t-1}) dt=f2(dt1,y~t1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值