DataWhale深度学习(五)循环神经网络

循环神经网络

  • 1 计算图
  • 2 RNN基本原理
  • 3 RNN训练算法BPTT
  • 4 LSTM基本原理
  • 5 其他RNN网络
  • 6 RNN主要应用
  • 参考资料

循环神经网络(recurrent neural network, RNN) 是一类用于处理序列数据的神经网络。

1 计算图

计算图是形式化一组计算结构的方式,它的元素包括节点(node)和边(edge),节点表示变量,可以是标量、矢量、张量等,而边表示的是某个操作,即函数。
用两个计算图来表示一个嵌套函数:
DataWhale深度学习(五)循环神经网络_第1张图片
还可以用一个图来表示一个复合函数:
DataWhale深度学习(五)循环神经网络_第2张图片
对于计算图的求导可以使用链式法则,有两种情况:

  • 情况1:没有分支的,只有一条链
    DataWhale深度学习(五)循环神经网络_第3张图片
  • 情况2:有分支,具有多条链路
    DataWhale深度学习(五)循环神经网络_第4张图片

例如如下计算图的求导,其中黑色实现代表数据流动方向,红色和黄色代表导数传播方向:
DataWhale深度学习(五)循环神经网络_第5张图片

  • a = 3 , b = 1 a=3,b=1 a=3,b=1可以得到 c = 4 , d = 2 , e = 6 c=4,d=2,e=6 c=4,d=2,e=6
  • 从e到a只有一条链路
    ∂ e ∂ a = ∂ e ∂ c ∂ c ∂ a = d = b + 1 = 2 \frac{\partial e}{\partial a}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial a}=d=b+1=2 ae=ceac=d=b+1=2
  • 从e到b有两条链路
    ∂ e ∂ b = ∂ e ∂ c ∂ c ∂ b + ∂ e ∂ d ∂ d ∂ b = d + c = b + 1 + a + b = 5 \frac{\partial e}{\partial b}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial b}+\frac{\partial e}{\partial d}\frac{\partial d}{\partial b}=d+c=b+1+a+b=5 be=cebc+debd=d+c=b+1+a+b=5

计算图可以很好的表示导数的前向传递和后向传递的过程
DataWhale深度学习(五)循环神经网络_第6张图片
DataWhale深度学习(五)循环神经网络_第7张图片

2 RNN基本原理

CNN大量应用于图像处理领域,然而现实生活中还存在很多序列化结构,我们需要建立一种更好的模型来处理序列化数据。这就是RNN发展的初衷。

循环神经网络是一种人工神经网络,它的节点间的连接形成一个遵循时间序列的有向图。它的核心思想是,样本间存在顺序关系,每个样本和它之前的样本存在关联。通过神经网络在时序上的展开,我们能够找到样本之间的序列相关性。RNN的一般结构如下:
DataWhale深度学习(五)循环神经网络_第8张图片
其中 x t , s t , o t x_t,s_t,o_t xt,st,ot分别表示 t t t时刻的输入、记忆和输出。 U , V , W U,V,W U,V,W分别表示RNN的连接权重, b s , b o b_s,b_o bs,bo是偏置项, σ , φ \sigma,\varphi σ,φ是激活函数, σ \sigma σ常选用tanh或sigmod, φ \varphi φ常选用softmax。

RNN举例:
对“我/n,爱/v购物/n”进行词性标注
将神经元的输出存到memory中,memory中值会作为下一时刻的输入。在最开始时刻,给定 memory初始值,然后逐次更新memory中的值。
DataWhale深度学习(五)循环神经网络_第9张图片

常见RNN的一般结构:

  • Elman Network
    DataWhale深度学习(五)循环神经网络_第10张图片
  • Jordan Network
    DataWhale深度学习(五)循环神经网络_第11张图片
  • 其他不同RNN的结构
    DataWhale深度学习(五)循环神经网络_第12张图片

3 RNN训练算法BPTT

CNN中利用BP算法进行模型训练,定义损失函数 Loss 来表示输出 y ^ \hat{y} y^ 和真实标签 y y y 的误差,通过链式法则自顶向下求得Loss对网络权重的偏导。沿梯度的反方向更新权重的值, 直到Loss收敛。而这里的BPTT算法就是加上了时序演化,后面的两个字母TT就是Through Time。
DataWhale深度学习(五)循环神经网络_第13张图片

  1. 定义模型输出为: s t = t a n h ( U x t + W s t − 1 ) y ^ = s o f t m a x ( V s t ) s_t=tanh(Ux_t+Ws_{t-1}) \\ \hat{y}=softmax(Vs_t) st=tanh(Uxt+Wst1)y^=softmax(Vst)
  2. 再定义损失函数: E t ( y t , y ^ t ) = − y t l o g y ^ t E ( y , y ^ ) = ∑ t E t ( y t , y ^ t ) = − ∑ t y t l o g y ^ E_t(y_t,\hat{y}_t)=-y_tlog\hat{y}_t \\ E(y,\hat{y})=\sum_tE_t(y_t,\hat{y}_t)=-\sum_ty_tlog\hat{y} Et(yt,y^t)=ytlogy^tE(y,y^)=tEt(yt,y^t)=tytlogy^
  3. 分别求损失函数 E E E U U U V V V W W W的梯度:
    ∂ E ∂ V = ∑ t ∂ E t ∂ V ∂ E ∂ W = ∑ t ∂ E t ∂ W ∂ E ∂ U = ∑ t ∂ E t ∂ U \frac{\partial E}{\partial V}=\sum_t\frac{\partial E_t}{\partial V} \\ \frac{\partial E}{\partial W}=\sum_t\frac{\partial E_t}{\partial W} \\ \frac{\partial E}{\partial U}=\sum_t\frac{\partial E_t}{\partial U} VE=tVEtWE=tWEtUE=tUEt
    • E E E V V V的梯度,先求 E 3 E_3 E3 V V V的梯度: ∂ E 3 ∂ V = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ V = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ z 3 ∂ z 3 ∂ V \frac{\partial E_3}{\partial V}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial V}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial z_3}\frac{\partial z_3}{\partial V} VE3=y^3E3Vy^3=y^3E3z3y^3Vz3其中 z 3 = V s 3 z_3=V_{s_3} z3=Vs3,然后求和即可。
    • E E E V V V的梯度,先求 E 3 E_3 E3 W W W的梯度: ∂ E 3 ∂ W = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ W s 3 = t a n h ( U x 3 + W s 2 ) ∂ E 3 ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ( ∏ j = k + 1 3 ∂ s j ∂ s j − 1 ) ∂ s k ∂ W \frac{\partial E_3}{\partial W}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial W} \\ s_3=tanh(Ux_3+Ws_2) \\ \frac{\partial E_3}{\partial W}=\sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial W} \\ =\sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}(\prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}})\frac{\partial s_k}{\partial W} WE3=y^3E3s3y^3Ws3s3=tanh(Ux3+Ws2)WE3=k=03y^3E3s3y^3sks3Wsk=k=03y^3E3s3y^3(j=k+13sj1sj)Wsk其中 s 3 s_3 s3依赖于 s 2 s_2 s2,而 s 2 s_2 s2又依赖于 s 1 s_1 s1 W W W,依赖关系一直传递到 t = 0 t=0 t=0时刻。因此,当计算对 W W W的偏导时,不能把 s 2 s_2 s2看作常数项
    • E E E V V V的梯度,先求 E 3 E_3 E3 U U U的梯度: ∂ E 3 ∂ U = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ U = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ U \frac{\partial E_3}{\partial U}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial U} \\ = \sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial U} UE3=y^3E3s3y^3Us3=k=03y^3E3s3y^3sks3Usk
DataWhale深度学习(五)循环神经网络_第14张图片

4 LSTM基本原理

LSTM,即长短时记忆网络,于1997年被Sepp Hochreiter 和Jürgen Schmidhuber提出来,LSTM是一种用于深度学习领域的人工循环神经网络(RNN)结构。一个LSTM单元由输入门、输出门和遗忘门组成,三个门控制信息进出单元。
DataWhale深度学习(五)循环神经网络_第15张图片

  • LSTM依靠贯穿隐藏层的细胞状态实现隐藏单元之间的信息传递,其中只有少量的线性操作
  • LSTM引入了“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆
  • “门”机制由一个Sigmoid激活函数层和一个向量点乘操作组成,Sigmoid层的输出控制了信息传递的比例
  1. 遗忘门: LSTM通过遗忘门(forget gate)实现对细胞状态信息遗忘程度的控制,输出当前状态的遗忘权重,取决于 h t − 1 h_{t-1} ht1 x t x_t xt
    f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f \cdot [h_{t-1},x_t]+b_f) ft=σ(Wf[ht1,xt]+bf)

  2. 输入门: LSTM通过输入门(input gate)实现对细胞状态输入接收程度的控制,输出当前输入信息的接受权重,取决于 h t − 1 h_{t-1} ht1 x t x_t xt
    i ˙ t = σ ( W i ˙ ⋅ [ h t − 1 , x t ] + b i ˙ ) C ~ t = t a n h ( W C ⋅ [ h t − 1 , x t ] + b C ) \dot{i}_t=\sigma(W_{\dot{i}} \cdot [h_{t-1},x_t]+b_{\dot{i}}) \\ \tilde{C}_t=tanh(W_C \cdot [h_{t-1},x_t]+b_C) i˙t=σ(Wi˙[ht1,xt]+bi˙)C~t=tanh(WC[ht1,xt]+bC)
    DataWhale深度学习(五)循环神经网络_第16张图片

  3. 输出门: LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于 h t − 1 h_{t-1} ht1 x t x_t xt
    o t = σ ( W σ ⋅ [ h t − 1 , x t ] + b σ ) o_t=\sigma(W_{\sigma}\cdot [h_{t-1},x_t]+b_{\sigma}) ot=σ(Wσ[ht1,xt]+bσ)
    DataWhale深度学习(五)循环神经网络_第17张图片

  4. 状态更新: “门”机制对细胞状态信息进行添加或删除,由此实现长程记忆。
    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 \ast C_{t-1}+i_t\ast C_t \\ h_t=o_t\ast tanh(C_t) Ct=ftCt1+itCtht=ottanh(Ct)
    DataWhale深度学习(五)循环神经网络_第18张图片

5 其他RNN网络

  • Gated Recurrent Unit(GRU)
    Gated Recurrent Unit (GRU),是在2014年提出的,可认为是LSTM 的变种,它的细胞状态与隐状态合并,在计算当前时刻新信息的方法和LSTM有 所不同;GRU只包含重置门和更新门;在音乐建模与语音信号建模领域与LSTM具有相似的性能,但是参数更少,只有两个门控。
    DataWhale深度学习(五)循环神经网络_第19张图片

  • Peephole LSTM
    让门层也接受细胞状态的输入,同时考虑隐层信息的输入。
    DataWhale深度学习(五)循环神经网络_第20张图片

  • Bi-directional RNN(双向RNN)
    Bi-directional RNN(双向RNN)假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关,例如:完形填空,它由两个RNNs上下叠加在一起组成,输出由这两个RNNs的隐藏层的状态决定。
    DataWhale深度学习(五)循环神经网络_第21张图片

  • Continuous time RNN(CTRNN)
    CTRNN利用常微分方程系统对输入脉冲序列神经元的影响 进行建模。CTRNN被应用到进化机器人中,用于解决视觉、协作和最 小认知行为等问题。
    DataWhale深度学习(五)循环神经网络_第22张图片

6 RNN主要应用

  • 语言模型
    问答系统DataWhale深度学习(五)循环神经网络_第23张图片

  • 自动作曲
    DataWhale深度学习(五)循环神经网络_第24张图片

  • 机器翻译
    DataWhale深度学习(五)循环神经网络_第25张图片

  • 自动写作
    根据现有资料自动写作,当前主要包括新闻写作和诗歌创作。主要是基于RNN&LSTM的文本生成技术来实现,需要训练大量同 类文本,结合模板技术。
    目前主要产品有:腾讯Dreamwriter写稿机器人、今日头条xiaomingbot、第一财经DT稿王(背后是阿里巴巴) 、百度Writing-bots…

  • 图像描述
    DataWhale深度学习(五)循环神经网络_第26张图片

参考资料

DataWhale水很深的深度学习——RNN

你可能感兴趣的:(深度学习,神经网络,机器学习,pytorch)