神经翻译笔记4扩展c. 2017-2019年间RNN和RNN语言模型的新进展

本文回顾2017年至2019年间RNN和RNN语言模型的进展,包括QuasiRNN、FS-RNN、Skip RNN等结构的创新,旨在捕捉长距离依赖和提高计算效率。FS-RNN结合了多尺度和深度变换RNN的优点,Skip RNN通过学习跳过状态更新以减少操作,而MoS模型通过矩阵分解提高表示能力。此外,IndRNN解决了传统RNN的梯度问题,ON-LSTM利用有序神经元表达层次结构,Mogrifier LSTM增强了输入表示的上下文相关性。这些研究展示了RNN在应对长序列和增强理解能力方面的新方法。
摘要由CSDN通过智能技术生成

神经翻译笔记4扩展c. 2017-2019年间RNN和RNN语言模型的新进展

尽管在本文写作时(2020年4月),基于Transformer结构的预训练语言模型已经大杀四方,BERT都已经成为明日黄花,在其基础上衍生的各种变体,例如RoBERTa、ALBERT、BART等等长江后浪推前浪,使得基于RNN的语言模型更不再是语言模型领域的焦点。但是为了系列文章结构的完备性,本文以及下一篇文章仍然会介绍一些这方面的“新”工作和一些里程碑式的工作。本文将介绍2017至2019三年间,RNN体系结构及基于RNN的语言模型的一些新进展。

QuasiRNN

本文实际上发表于2016年,而且采用了CNN的思想,因此先不在本文介绍。在这里先立个flag,等本系列笔记进行到6时,再概述此工作。采取同样思想的亦有SRU,准备也到时再介绍

FS-RNN

FS-RNN (Fast-Slow RNN) [Mujika2017] 受两类RNN的启发

  • 多(时间)尺度RNN:对于堆叠RNN中更高层的若干层,其被更新的次数越少(更不频繁),以此来获得信息的分层表示。由于高层参数更新变慢,因此计算起来更高效,梯度更新路径越短,越能捕捉长距离依赖
  • 深度变换RNN (deep transition RNN),其相邻两个隐藏状态之间引入了新的顺序连接层,以此来增加两个时间步之间变换函数的深度,进而学习更复杂的非线性变换

FS-RNN将两类网络结合起来,最简单的方式是

  • 对底层RNN,引入深度变换(若干顺序连接层),称为“快层”
  • 对高层RNN,降低更新频率,称为“慢层”

更形式化地讲,底层在两个时间步之间插入 k k k个顺序连接的RNN神经元 F 1 , … , F k F_1, \ldots, F_k F1,,Fk,高层只使用一个神经元 S S S F 1 F_1 F1接收第 t t t时间步的输入 x t x_t xt,将输出传给 S S S作为输入, S S S处理后将状态传给 F 2 F_2 F2,然后从 F 2 F_2 F2开始输出逐级传播下去,前一个 F i − 1 F_{i-1} Fi1的输出作为后一个 F i F_i Fi的输入,到 F k F_k Fk输出概率分布 y t y_t yt,如下图所示

FSRNN示意图,图中共有k个“快”RNN单元,其中只有第二个单元从“慢”单元接收输入

记每个RNN神经元 Q Q Q为一个可微函数 f Q ( h , x ) f^Q(h,x) fQ(h,x),其将上一步的隐藏状态 h h h和输入 x x x一起映射为一个新的隐藏状态,则

h t F 1 = f F 1 ( h t − 1 F k , x t ) h t S = f S ( h t − 1 S , h t F 1 ) h t F 2 = f F 2 ( h t F 1 , h t S ) h t F i = f F i ( h t F i − 1 )    f o r   3 ≤ i ≤ k y t = s o f t m a x ( W h t F k + b ) \begin{aligned} h_t^{F_1} &= f^{F_1}(h_{t-1}^{F_k}, x_t) \\ h_t^{S} &= f^{S}(h_{t-1}^{S}, h_t^{F_1}) \\ h_t^{F_2} &= f^{F_2}(h_{t}^{F_1}, h_t^S) \\ h_t^{F_i} &= f^{F_i}\left(h_t^{F_{i-1}}\right)\ \ {\rm for\ }3\le i \le k \\ y_t &= {\rm softmax}\left(Wh_t^{F_k}+b\right) \end{aligned} htF1htShtF2htFiyt=fF1(ht1Fk,xt)=fS(ht1S,htF1)=fF2(htF1,htS)=fFi(htFi1)  for 3ik=softmax(WhtFk+b)

文章使用LSTM作为基础的RNN神经元,在Penn Treebank和enwik8上均取得了不错的效果

Skip RNN

传统RNN和普通的带门控的RNN(例如LSTM)对长句表现都不好。[Campos2017]的思路是让网络学习输入序列中哪些样本可以解决目标问题,因此可以在训练时跳过一些状态的更新,可以减少对序列的操作

记RNN接受的输入序列 x = ( x 1 , … , x T ) \boldsymbol{x} = (x_1, \ldots, x_T) x=(x1,,xT),每步向下传递的状态为 s = ( s 1 , … , s T ) \boldsymbol{s}=(s_1, \ldots, s_T) s=(s1,,sT),有

s t = R N N ( s t − 1 , x t ) s_t = {\rm RNN}(s_{t-1}, x_t) st=RNN(st1,xt)

本文引入了一个额外的状态更新门 u t ∈ { 0 , 1 } u_t \in \{0,1\} ut{ 0,1},该门是完全二值的,只输出0或1,不像LSTM或GRU那样输出一个0到1的浮点数。当 u t = 1 u_t = 1 ut=1时,该时刻状态更新;当 u t = 0 u_t = 0 ut=0时,该时刻从前一时刻直接拷贝状态。 u t u_t ut的结果由上一步产生的概率 u ~ t ∈ [ 0 , 1 ] \tilde{u}_{t} \in [0,1] u~t[0,1]决定,具体地

u t = f b i n a r i z e ( u ~ t ) s t = u t ⋅ R N N ( s t − 1 , x t ) + ( 1 − u t ) ⋅ s t − 1 Δ u ~ t = σ ( W p s t + b p ) u ~ t + 1 = u t ⋅ Δ u ~ t + ( 1 − u t ) ⋅ ( u ~ t + min ⁡ ( Δ u ~ t , 1 − u ~ t ) ) \begin{aligned} u_t &= f_{\rm binarize}(\tilde{u}_t) \\ s_t &= u_t \cdot {\rm RNN}(s_{t-1}, x_t) + (1-u_t)\cdot s_{t-1} \\ \Delta \tilde{u}_t &= \sigma(\boldsymbol{W}_ps_t + \boldsymbol{b}_p) \\ \tilde{u}_{t+1} &= u_t \cdot \Delta\tilde{u}_t + (1-u_t)\cdot (\tilde{u}_t + \min(\Delta\tilde{u}_t, 1-\tilde{u}_t)) \end{aligned} utstΔu~tu~t+1=fbinarize(u~t)=utRNN(st1,xt)+(1ut)st1=σ(Wpst+bp)=utΔu~t+(1ut)(u~t+min(Δu~t,1u~t))

其中 W p \boldsymbol{W}_p Wp是权重, b p \boldsymbol{b}_p bp是偏置项, σ \sigma σ是sigmoid函数, f b i n a r i z e : [ 0 , 1 ] → { 0 , 1 } f_{\rm binarize}:[0,1] \rightarrow \{0,1\} fbinarize:[0,1]{ 0,1}是将输入映射为0或1的函数,本文使用了四舍五入法(round),也可以从伯努利分布随机采样。模型隐含了一个信息:如果连续跳过的状态越多,那么下一个状态就更可能被更新:

  • 如果当前状态被跳过,那么下一个时间步的“预激活值” u ~ t + 1 \tilde{u}_{t+1} u~t+1会增加 Δ u ~ t \Delta \tilde{u}_t Δu~t
  • 如果当前状态被更新,那么累积的“预激活值”清零,重置为 Δ u ~ t \Delta \tilde{u}_t Δu~t

如果在某些场合下,可以为减少计算量额外牺牲精度,即为了让模型更倾向于少更新状态,则可以引入一个额外的损失项

L b u d g e t = λ ⋅ ∑ t = 1 T u t L_{\rm budget} = \lambda \cdot \sum_{t=1}^T u_t Lbudget=λt=1Tut

有趣的是,本工作的三项实验均未在NLP任务上进行

高秩RNN语言模型MoS

[YangZhilin2017]将语言模型看作是一个矩阵分解问题。文章将自然语言 L \mathcal{L} L定义为一个有限集合,集合中每个元素是一个有序对,由上下文和给定上下文后下一个标识符的分布两者组成,即

L = { ( c 1 , P ∗ ( X ∣ c 1 ) ) , … , ( c N , P ∗ ( X ∣ c N ) ) } \mathcal{L} = \{(c_1, P^\ast(X|c_1)), \ldots, (c_N, P^\ast(X|c_N))\} L={ (c1,P(Xc1)),,(cN,P(XcN))}

其中 N N

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. ARIMA 2. SARIMA 3. VAR 4. Auto-ARIMA 5. Auto-SARIMA 6. LSTM 7. GRU 8. RNN 9. CNN 10. MLP 11. DNN 12. MLP-LSTM 13. MLP-GRU 14. MLP-RNN 15. MLP-CNN 16. LSTM-ARIMA 17. LSTM-MLP 18. LSTM-CNN 19. GRU-ARIMA 20. GRU-MLP 21. GRU-CNN 22. RNN-ARIMA 23. RNN-MLP 24. RNN-CNN 25. CNN-ARIMA 26. CNN-MLP 27. CNN-LSTM 28. CNN-GRU 29. ARIMA-SVM 30. SARIMA-SVM 31. VAR-SVM 32. Auto-ARIMA-SVM 33. Auto-SARIMA-SVM 34. LSTM-SVM 35. GRU-SVM 36. RNN-SVM 37. CNN-SVM 38. MLP-SVM 39. LSTM-ARIMA-SVM 40. LSTM-MLP-SVM 41. LSTM-CNN-SVM 42. GRU-ARIMA-SVM 43. GRU-MLP-SVM 44. GRU-CNN-SVM 45. RNN-ARIMA-SVM 46. RNN-MLP-SVM 47. RNN-CNN-SVM 48. CNN-ARIMA-SVM 49. CNN-MLP-SVM 50. CNN-LSTM-SVM 51. CNN-GRU-SVM 52. ARIMA-RF 53. SARIMA-RF 54. VAR-RF 55. Auto-ARIMA-RF 56. Auto-SARIMA-RF 57. LSTM-RF 58. GRU-RF 59. RNN-RF 60. CNN-RF 61. MLP-RF 62. LSTM-ARIMA-RF 63. LSTM-MLP-RF 64. LSTM-CNN-RF 65. GRU-ARIMA-RF 66. GRU-MLP-RF 67. GRU-CNN-RF 68. RNN-ARIMA-RF 69. RNN-MLP-RF 70. RNN-CNN-RF 71. CNN-ARIMA-RF 72. CNN-MLP-RF 73. CNN-LSTM-RF 74. CNN-GRU-RF 75. ARIMA-XGBoost 76. SARIMA-XGBoost 77. VAR-XGBoost 78. Auto-ARIMA-XGBoost 79. Auto-SARIMA-XGBoost 80. LSTM-XGBoost 81. GRU-XGBoost 82. RNN-XGBoost 83. CNN-XGBoost 84. MLP-XGBoost 85. LSTM-ARIMA-XGBoost 86. LSTM-MLP-XGBoost 87. LSTM-CNN-XGBoost 88. GRU-ARIMA-XGBoost 89. GRU-MLP-XGBoost 90. GRU-CNN-XGBoost 91. RNN-ARIMA-XGBoost 92. RNN-MLP-XGBoost 93. RNN-CNN-XGBoost 94. CNN-ARIMA-XGBoost 95. CNN-MLP-XGBoost 96. CNN-LSTM-XGBoost 97. CNN-GRU-XGBoost 98. ARIMA-ANN 99. SARIMA-ANN 100. VAR-ANN 上面这些缩写模型的全称及相关用途功能详细解释
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值