神经翻译笔记4. 循环神经网络(RNN)


本文来自于如下来源

  • [Neubig2017]第6节(主要来源,结构遵从此文)
  • [Koehn2017]13.4.4、13.4.5、13.4.6三小节
  • NNMNLP第14、15章
  • 花书第十章
  • CS224n第6、7讲(2019年春)

前面介绍的三种语言模型(N元语法、log-linear语言模型和神经网络语言模型)尽管在表示能力上逐渐变强,但是仍然没有摆脱一项桎梏:需要给定一个窗口大小,而且通常这个窗口宽度不会太大。但是语言里通常会有长距离依赖现象,例如He doesn’t have very much confidence in himself,这里himself只是受到句首He的影响——如果句首是She,那么末尾这个词就要变成herself了!这样的现象在英语里比较多,在其它语言里甚至可以超级多:一方面,很多语言形态更加丰富,名词有变格,动词有变位。另一方面,一些语言有自己独特的语法结构,例如德语里丧心病狂的句框结构/框型结构:ich muss morgen zur Uni gehen,这里实意动词gehen与其搭配的情态动词muss遥相呼应,在这种情况下,固定小窗口的语言模型能力显得不足

除却语法的层面,语义上也需要对单词的长距离依赖建模。这里最典型的问题是选择依赖/选择约束问题,即从语义上讲,当上文出现某个单词时,它会潜在地约束之后哪些单词更可能出现,哪些单词更不可能出现。例如前文出现eat,后文很可能出现fork(作为eat的器具)或者friend(作为一起eat的人),但是出现wall感觉就不太合理。这种依赖约束也可能横跨多个单词,难以被简单模型所捕捉

最后,文档内,句与句之间(或者句内),也需要遵守主题一致性和风格一致性。一篇讨论体育的文章不适合突然拐到母猪的产后护理,一篇严谨的学术论文(一般情况下)也不应该突然出现乡间俚语

综上所述,需要一种能力更强,能够捕捉词语长距离依赖关系的模型。在这种背景下,循环神经网络(Recurrent Neural Network, RNN)应运而生

普通RNN (Vanilla RNN)

普通RNN的核心思想是引入时刻的概念,此时每一时刻 t t t的隐藏单元 h t \boldsymbol{h}_t ht不再只依赖于这一时刻的模型输入 x t \boldsymbol{x}_t xt,也依赖于上一时刻的隐藏单元 h t − 1 \boldsymbol{h}_{t-1} ht1,即
h t = { tanh ⁡ ( W x h x t + W h h h t − 1 + b t ) t ≥ 1 0 o t h e r w i s e \boldsymbol{h}_t = \begin{cases} \tanh(\boldsymbol{W}_{xh}\boldsymbol{x}_t + \boldsymbol{W}_{hh}\boldsymbol{h}_{t-1} + \boldsymbol{b}_t) & t\ge 1 \\ \boldsymbol{0} & {\rm otherwise} \end{cases} ht={ tanh(Wxhxt+Whhht1+bt)0t1otherwise
这样一来,若干个时刻之前的隐藏单元状态可以依次传输到当前的隐藏单元,使得模型可以对长距离依赖关系建模。引入输入层和softmax层后,模型的结构为
m t = M ⋅ , e t − 1 h t = { tanh ⁡ ( W m h m t + W h h h t − 1 + b t ) t ≥ 1 0 o t h e r w i s e p t = s o f t m a x ( W h s h t + b s ) \begin{aligned} \boldsymbol{m}_t &= \boldsymbol{M}_{\cdot, e_{t-1}} \\ \boldsymbol{h}_t &= \begin{cases} \tanh(\boldsymbol{W}_{mh}\boldsymbol{m}_t + \boldsymbol{W}_{hh}\boldsymbol{h}_{t-1} + \boldsymbol{b}_t) & t\ge 1 \\ \boldsymbol{0} & {\rm otherwise} \end{cases} \\ \boldsymbol{p}_t &= {\rm softmax}(\boldsymbol{W}_{hs}\boldsymbol{h}_t + \boldsymbol{b}_s) \end{aligned} mthtpt=M,et1={ tanh(Wmhmt+Whhht1+bt)0t1otherwise=softmax(Whsht+bs)
此时模型不需要再显式依赖上文的多个单词 (即在每一时刻 t ​ t​ t只需要接收一个单词作为输入),上文的全部信息可以看做都包含在了上游传递过来的上一时刻隐藏状态 h t − 1 ​ \boldsymbol{h}_{t-1}​ ht1

对上式记号稍作变化,
x ( t ) = E ⋅ , e ( t − 1 ) s ( t ) = { tanh ⁡ ( U x ( t ) + W s ( t − 1 ) + b s ) t ≥ 1 0 o t h e r w i s e o ( t ) = V s ( t ) + b o y ^ ( t ) = s o f t m a x ( o ( t ) ) \begin{aligned} \boldsymbol{x}^{(t)} &= \boldsymbol{E}_{\cdot, e^{(t-1)}} \\ \boldsymbol{s}^{(t)} &= \begin{cases} \tanh(\boldsymbol{U}\boldsymbol{x}^{(t)} + \boldsymbol{W}\boldsymbol{s}^{(t-1)} + \boldsymbol{b}_s) & t\ge 1 \\ \boldsymbol{0} & {\rm otherwise} \end{cases} \\ \boldsymbol{o}^{(t)} &= \boldsymbol{V}\boldsymbol{s}^{(t)} + \boldsymbol{b}_o \\ \hat{\boldsymbol{y}}^{(t)} &= {\rm softmax}(\boldsymbol{o}^{(t)}) \end{aligned} x(t)s(t)o(t)y^(t)=E,e(t1)={ tanh(Ux(t)+Ws(t1)+bs)0t1otherwise=Vs(t)+bo=softmax(o(t))
可以用如下示意图来表示上述RNN结构,其中右半部分可以看做是RNN网络的"展开形式"(图片来源:Nature)

可以将上面的模型描述简写为
x ( t ) = E ⋅ , e ( t − 1 ) s ( t ) = R N N ( x ( t ) , s ( t − 1 ) ) o ( t ) = V s ( t ) + b o y ^ ( t ) = s o f t m a x ( o ( t ) ) \begin{aligned} \boldsymbol{x}^{(t)} &= \boldsymbol{E}_{\cdot, e^{(t-1)}} \\ \boldsymbol{s}^{(t)} &= {\rm RNN}\left(\boldsymbol{x}^{(t)}, \boldsymbol{s}^{(t-1)}\right) \\ \boldsymbol{o}^{(t)} &= \boldsymbol{V}\boldsymbol{s}^{(t)} + \boldsymbol{b}_o \\ \hat{\boldsymbol{y}}^{(t)} &= {\rm softmax}\left(\boldsymbol{o}^{(t)}\right) \end{aligned} x(t)s(t)o(t)y^(t)=E,e(t1)=RNN(x(t),s(t1))=Vs(t)+bo=softmax(o(t))

RNN的反向传播

(本节参考了《循环神经网络(RNN)模型与前向反向传播算法》Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients

由上面的模型描述可以看出,模型在第 t ​ t​ t时刻的输出 o ( t ) ​ \boldsymbol{o}^{(t)}​ o(t)不再只依赖于该时刻的隐藏状态 s ( t ) ​ \boldsymbol{s}^{(t)}​ s(t),而是还依赖于上游所有时刻的隐藏状态 s ( 1 ) , … , s ( t − 1 ) ​ \boldsymbol{s}^{(1)}, \ldots, \boldsymbol{s}^{(t-1)}​ s(1),,s(t1)。反过来, t ​ t​ t时刻的隐藏状态 s ( t ) ​ \boldsymbol{s}^{(t)}​ s(t)不止直接决定该时刻的输出 o ( t ) ​ \boldsymbol{o}^{(t)}​ o(t),也直接影响了下一时刻隐藏状态 s ( t + 1 ) ​ \boldsymbol{s}^{(t+1)}​ s(t+1)(此外还间接影响了下游所有隐藏状态,这里先不论),因此误差对 s ( t ) ​ \boldsymbol{s}^{(t)}​ s(t)的梯度有两个直接来源。又因为 s ( t ) ​ \boldsymbol{s}^{(t)}​ s(t)由参数 U ​ \boldsymbol{U}​ U W ​ \boldsymbol{W}​ W b ​ \boldsymbol{b}​ b算出,因此这三个参数的更新不仅受到第 t ​ t​ t时刻输出 o ( t ) ​ \boldsymbol{o}^{(t)}​ o(t)的影响,也受到第 t + 1 ​ t+1​ t+1时刻隐藏状态 s ( t + 1 ) ​ \boldsymbol{s}^{(t+1)}​ s(t+1)的影响。即反向传播时梯度会沿"时间"向上游传播,因此RNN的反向传播也被称作为经由时间的反向传播 (Back-Propagation Through Time, BPTT)

下面进行推导:对上面的模型描述引入一个中间记号,并稍作记号上的替换,有
a ( t ) = U x ( t ) + W s ( t − 1 ) + b s ( t ) = tanh ⁡ ( a ( t ) ) o ( t ) = V s ( t ) + c y ^ ( t ) = s o f t m a x ( o ( t ) ) (1) \begin{aligned} \boldsymbol{a}^{(t)} &= \boldsymbol{U}\boldsymbol{x}^{(t)} + \boldsymbol{W}\boldsymbol{s}^{(t-1)} + \boldsymbol{b} \tag{1} \\ \boldsymbol{s}^{(t)} &= \tanh\left(\boldsymbol{a}^{(t)}\right) \\ \boldsymbol{o}^{(t)} &= \boldsymbol{V}\boldsymbol{s}^{(t)} + \boldsymbol{c} \\ \hat{\boldsymbol{y}}^{(t)} &= {\rm softmax}\left(\boldsymbol{o}^{(t)}\right) \end{aligned} a(t)s(t)o(t)y^(t)=Ux(t)+Ws(t1)+b=tanh(a(t))=Vs(t)+c=softmax(o(t))(1)
假设使用交叉熵作为模型的损失函数,由于每个时刻都有一个最终输出 y ^ ( t ) \hat{\boldsymbol{y}}^{(t)} y^(t),因此模型的总损失函数为
E ( y , y ^ ) = ∑ t E ( t ) ( y ( t ) , y ^ ( t ) ) E ( t ) ( y ( t ) , y ^ ( t ) ) = − ∑ i = 1 ∣ V ∣ y i ( t ) log ⁡ y ^ i ( t ) \begin{aligned} E(\boldsymbol{y}, \hat{\boldsymbol{y}}) &= \sum_t E^{(t)}\left(\boldsymbol{y}^{(t)}, \hat{\boldsymbol{y}}^{(t)}\right) \\ E^{(t)}\left(\boldsymbol{y}^{(t)}, \hat{\boldsymbol{y}}^{(t)}\right) &= -\sum_{i=1}^{|V|}y^{(t)}_{i}\log\hat{y}^{(t)}_{i} \end{aligned} E(y,y^)E(t)(y(t),y^(t))=tE(t)(y(t),y^(t))=i=1Vyi(t)logy^i(t)
假设模型各参数、输入、输出和中间结果维度为
y ^ ( t ) , o ( t ) , c ∈ R ∣ V ∣ × 1 s ( t ) , a ( t ) , b ∈ R h × 1 x ∈ R d × 1 U ∈ R h × d W ∈ R h × h V ∈ R ∣ V ∣ × h \begin{aligned} \hat{\boldsymbol{y}}^{(t)}, \boldsymbol{o}^{(t)}, \boldsymbol{c} &\in \mathbb{R}^{|V| \times 1} \\ \boldsymbol{s}^{(t)}, \boldsymbol{a}^{(t)}, \boldsymbol{b} &\in \mathbb{R}^{h \times 1} \\ \boldsymbol{x} &\in \mathbb{R}^{d\times 1} \\ \boldsymbol{U} &\in \mathbb{R}^{h \times d} \\ \boldsymbol{W} &\in \mathbb{R}^{h \times h} \\ \boldsymbol{V} &\in \mathbb{R}^{|V| \times h} \\ \end{aligned} y^(t),o(t),cs(t),a(t),bxUWVRV×1Rh×1Rd×1Rh×dRh×hRV×h
由于 V ​ \boldsymbol{V}​ V c ​ \boldsymbol{c}​ c不依赖于之前时刻的内容,因此比较容易计算。考虑到
∂ E ∂ o ( t ) = ∂ E ∂ E ( t ) ∂ E ( t ) ∂ o ( t ) = ∂ E ( t ) ∂ o ( t ) = y ^ ( t ) − y ( t ) : = δ 1 ( t ) \frac{\partial E}{\partial \boldsymbol{o}^{(t)}} = \frac{\partial E}{\partial E^{(t)}}\frac{\partial E^{(t)}}{\partial \boldsymbol{o}^{(t)}} =\frac{\partial E^{(t)}}{\partial \boldsymbol{o}^{(t)}} = \hat{\boldsymbol{y}}^{(t)} - \boldsymbol{y}^{(t)} := \boldsymbol{\delta}^{(t)}_1 o(t)E=E(t)Eo(t)E(t)=o(t)E(t)=y^(t)y(t):=δ1(t)
可得
∂ E ∂ c = ∑ t = 1 T ∂ E ( t ) ∂ o ( t ) ∂ o ( t ) ∂ c = ∑ t = 1 T δ 1 ( t ) ∂ E ∂ V = ∑ t = 1 T ∂ E ( t ) ∂ o ( t ) ∂ o ( t ) ∂ V = δ 1 ( t ) ( s ( t ) ) T = ∑ t = 1 T δ 1 ( t ) × s ( t ) \begin{aligned} \frac{\partial E}{\partial \boldsymbol{c}} &= \sum_{t=1}^T\frac{\partial E^{(t)}}{\partial \boldsymbol{o}^{(t)}}\frac{\partial \boldsymbol{o}^{(t)}}{\partial \boldsymbol{c}} = \sum_{t=1}^T\boldsymbol{\delta}_1^{(t)} \\ \frac{\partial E}{\partial \boldsymbol{V}} &= \sum_{t=1}^T\frac{\partial E^{(t)}}{\partial \boldsymbol{o}^{(t)}} \frac{\partial \boldsymbol{o}^{(t)}}{\partial \boldsymbol{V}} = \boldsymbol{\delta}_1^{(t)}\left(\boldsymbol{s}^{(t)}\right)^\mathsf{T} = \sum_{t=1}^T\boldsymbol{\delta}_1^{(t)}\times \boldsymbol{s}^{(t)} \end{aligned} cEVE=t=1To(t)E(t)co(t)=t=1Tδ1(t)=

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSTM循环神经网络(Long Short-Term Memory Recurrent Neural Network)是一种特殊的循环神经网络结构,用于处理时间序列数据。LSTM网络通过引入记忆单元和门控机制,解决了传统循环神经网络中的梯度消失和梯度爆炸问题,并且具有更强的记忆能力。 LSTM网络的核心是记忆单元,记忆单元可以记住和遗忘信息。每个记忆单元由一个细胞状态(cell state)和三个门控单元(输入门、遗忘门和输出门)组成。输入门决定了何时更新细胞状态,遗忘门决定了何时忘记过去的信息,输出门决定了何时输出当前的信息。这些门控单元通过对输入数据的加权求和和激活函数的处理来控制信息的流动。 LSTM网络的另一个重要特点是它可以处理双向序列。这是通过将两个LSTM网络堆叠起来实现的,一个网络从前向后处理输入序列,另一个网络从后向前处理输入序列。这种双向结构可以更好地捕捉序列中的前后依赖关系。 因此,LSTM循环神经网络是一种具有长期记忆能力和门控机制的网络结构,适用于处理时间序列数据,并且可以通过堆叠和双向结构增强其性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深度学习笔记 9 循环神经网络RNN、LSTM)](https://blog.csdn.net/qq_41134483/article/details/127415813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值