【深度学习笔记】6.循环神经网络

循环神经网络

计算图

计算图的引入是为了后面更方便的表示网络,计算图是描述计算结构的一种图,它的元素包括节点(node)和边(edge),节点表示变量,可以是标量、矢量、张量等,而边表示的是某个操作,即函数。

【深度学习笔记】6.循环神经网络_第1张图片

下面这个计算图表示复合函数

【深度学习笔记】6.循环神经网络_第2张图片

关于计算图的求导,我们可以用链式法则表示,有下面两种情况。

  • 情况1

【深度学习笔记】6.循环神经网络_第3张图片

  • 情况2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUose3jf-1638344566342)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.4.png)]

求导举例

例1

【深度学习笔记】6.循环神经网络_第4张图片

假设a = 3, b = 1 可以得到 c = 3, d = 2, e = 6
∂ e ∂ a = ∂ e ∂ c ∂ c ∂ a = d = b + 1 = 2 ∂ e ∂ b = ∂ e ∂ c ∂ c ∂ b + ∂ e ∂ d ∂ d ∂ b = d + c = b + 1 + a + b = 5 \frac{\partial e}{\partial a}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial a}=d=b+1=2 \\ \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 ae=ceac=d=b+1=2be=cebc+debd=d+c=b+1+a+b=5
例2

【深度学习笔记】6.循环神经网络_第5张图片
∂ Z ∂ X = α δ + α ϵ + α ζ + β δ + β ϵ + β ζ + γ δ + γ ϵ + γ ζ = ( α + β + γ ) ( δ + ϵ + ζ ) \frac{\partial Z}{\partial X}=αδ+αϵ+αζ+βδ+βϵ+βζ+γδ+γϵ+γζ=(α+β+γ)(δ+ϵ+ζ) XZ=αδ+αϵ+αζ+βδ+βϵ+βζ+γδ+γϵ+γζ=(α+β+γ)(δ+ϵ+ζ)
计算图可以很好的表示导数的前向传递和后向传递的过程【深度学习笔记】6.循环神经网络_第6张图片

【深度学习笔记】6.循环神经网络_第7张图片

循环神经网络

现实生活中存在很多序列化结构,我们需要建立一种更优秀的序列数据模型。比如:

  • 文本:字母和词汇的序列
  • 语音:音节的序列
  • 视频:图像帧的序列
  • 时态数据:气象观测数据,股票交易数据、房价数据等

基于这种大前提下,就会出现循环神经网络(RNN)。循环神经网络是一种人工神经网络,它的节点间的连接形成一个遵循时间序列的有向图,它的核心思想是,样本间存在顺序关系,每个样本和它之前的样本存在关联。通过神经网络在时序上的展开,我们能够找到样本之间的序列相关性。

结构如下:

【深度学习笔记】6.循环神经网络_第8张图片

在神经网络图里面,输入到输出要么从左到右,要么从下到上。而循环神经网络通常会采用下到上的形式来展示。

  • 其中下表带t的变量代表着上一个、当前、下一个等时间单位

  • U、V、W代表着网络权重

  • b代表网络偏置

  • \omega 和 \phi代表着激活函数。通常\omega选用tanh或sigmiod,而\phi选用softmax

其中 softmax 函数,用于分类问题的概率计算。本质上是将一个K维的任意实数向量压缩 (映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。

RNN案例

比如词性标注,

  • 我/n,爱/v购物/n,
  • 我/n在/pre华联/n购物/v

Word Embedding:自然语言处理(NLP)中的 一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向量。比如这里映射到三个向量然后输入:

【深度学习笔记】6.循环神经网络_第9张图片

将神经元的输出存到memory中,memory中值会作为下一时刻的输入。在最开始时刻,给定 memory初始值,然后逐次更新memory中的值。

【深度学习笔记】6.循环神经网络_第10张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vm3FOjK-1638344566346)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.13.png)]

RNN一般结构

Elman Network

【深度学习笔记】6.循环神经网络_第11张图片

Jordan Network

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLdMOdmJ-1638344566346)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.15.png)]

其他结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XELLshkb-1638344566347)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.16.png)]

RNN训练算法 - BPTT

我们先来回顾一下BP算法,就是定义损失函数 Loss 来表示网络输出与实际输出的误差,通过链式法则自顶向下求得 Loss 对网络权重的偏导。沿梯度的反方向更新权重的值, 直到 Loss 收敛。而这里的 BPTT 算法就是加上了时序演化,后面的两个字母 TT 就是 Through Time。

【深度学习笔记】6.循环神经网络_第12张图片

假设我们定义输出函数
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}) \\ \widehat{y}=softmax(Vs_t) st=tanh(Uxt+Wst1)y =softmax(Vst)
再定义损失函数
E t ( y t , y ^ t ) = − y t l o g ( y ^ t ) E ( y t , y ^ t ) = ∑ t E t ( y t , y ^ t ) = − ∑ t y t l o g ( y ^ t ) E_t(y_t,\widehat{y}_t)=-y_tlog(\widehat{y}_t) \\ E(y_t,\widehat{y}_t)=\sum_tE_t(y_t,\widehat{y}_t) \\ =-\sum_ty_tlog(\widehat{y}_t) Et(yt,y t)=ytlog(y t)E(yt,y t)=tEt(yt,y t)=tytlog(y t)
【深度学习笔记】6.循环神经网络_第13张图片

我们分别求损失函数 E 对 U、V、W的梯度:
∂ E ∂ V = ∑ t ∂ E t ∂ V ∂ E ∂ U = ∑ t ∂ E t ∂ U ∂ E ∂ W = ∑ t ∂ E t ∂ W \frac{\partial E}{\partial V}=\sum_t\frac{\partial E_t}{\partial V} \\ \frac{\partial E}{\partial U}=\sum_t\frac{\partial E_t}{\partial U} \\ \frac{\partial E}{\partial W}=\sum_t\frac{\partial E_t}{\partial W} VE=tVEtUE=tUEtWE=tWEt

  • 求 E 对 V 的梯度,先求 E_3对 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 \widehat{y}_3}\frac{\partial \widehat{y}_3}{\partial V}\\ =\frac{\partial E_3}{\partial \widehat{y}_3}\frac{\partial \widehat{y}_3}{\partial z_3}\frac{\partial z_3}{\partial V} VE3=y 3E3Vy 3=y 3E3z3y 3Vz3

其中z_3=V_s_3,然后求和即可。

  • 求E对W的梯度,先求E_3对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 ∂ E 3 ∂ 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 \widehat{y}_3}\frac{\partial \widehat{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 \widehat{y}_3}\frac{\partial \widehat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial W}\\ \frac{\partial E_3}{\partial W}=\sum_{k=0}^{3}\frac{\partial E_3}{\partial \widehat{y}_3}\frac{\partial \widehat{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 3sks3WskWE3=k=03y 3E3s3y 3(j=k+13sj1sj)Wsk

其中:s_3依赖于s_2,而s_2又依赖与s_1和W,依赖关系一致传递到t=0的时刻。因此我们计算对于W的偏导时,不能把s_2看作时常数项

  • 求E对U的梯度,先求E_3对U的梯度

∂ E 3 ∂ U = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ U S 3 = t a n h ( U x 3 + W s 2 ) ∂ E 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 \widehat{y}_3}\frac{\partial \widehat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial U}\\ S_3=tanh(Ux_3+Ws_2)\\ \frac{\partial E_3}{\partial U}=\sum_{k=0}^{3}\frac{\partial E_3}{\partial \widehat{y}_3}\frac{\partial \widehat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial U} UE3=y 3E3s3y 3Us3S3=tanh(Ux3+Ws2)UE3=k=03y 3E3s3y 3sks3Usk

长短时记忆网络

在RNN中,存在一个很重要的问题,就是梯度消失问题,一开始我们不能有效的解决长时依赖问题,其中梯度消失的原因有两个:BPTT算法和激活函数Tanh。

为了解决这两种问题,后续提出了两个解决方案

  • 使用ReLU函数代替Tanh
  • 使用门控RNN来空值是否记忆,其中出名的就有LSTM和GRU

LSTM

LSTM,及长短时记忆网络,属于RNN的范畴。它的核心思想就是提出门控的概念,通过门口决定当前时刻是否需要记忆上一时刻的结果。一个LSTM单元由输入门、输出门和遗忘门组成,三个门控制信息进出单元。

【深度学习笔记】6.循环神经网络_第14张图片

  • LSTM依靠贯穿隐藏层的细胞状态实现隐藏单元之间的信息传递,其中只有少量的线性操作
  • LSTM引入了“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆
  • “门”机制由一个Sigmoid激活函数层和一个向量点乘操作组成,Sigmoid层的输出控制了信息传递的比例

遗忘门:LSTM通过遗忘门(forget gate)实现对细胞状态信息遗忘程度的控制,输出当前状态的遗忘权重,取决于 h_{t-1}和x_t
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)
【深度学习笔记】6.循环神经网络_第15张图片

输入门:LSTM通过输入门(input gate)实现对细胞状态输入接收程度的控制,输出当前输入信息的接受权重,取决于h_{t-1}和x_t
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 ) i_t=\sigma(W_i·[h_t-1,x_t]+b_i)\\ C_t=tanh(W_C·[h_t-1,x_t]+b_C) it=σ(Wi[ht1,xt]+bi)Ct=tanh(WC[ht1,xt]+bC)
【深度学习笔记】6.循环神经网络_第16张图片

输出门:LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于h_{t-1}和x_t
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)
【深度学习笔记】6.循环神经网络_第17张图片

状态更新:“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆。
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*C_{t-1}+i_t*\widetilde{C}_t \\ h_t=o_t*tanh(C_t) Ct=ftCt1+itC tht=ottanh(Ct)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZ0lqMMd-1638344566350)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.24.png)]

下面给出一个标准化的RNN例子

#构造RNN网络,x的维度5,隐层的维度10,网络的层数2
rnn_ seq = nn.RNN(510,2)
#构造一个输入序列,长为6,batch是3,特征是5
X =V(torch. randn(635))
#out,ht = rnn_ seq(x, h0) # h0可以指定或者不指定
out,ht = rnn_ seq(x)
# q1:这里out、ht的size是多少呢? out:6*3*10, ht:2*3*10

#输入维度50,隐层100维,两层
Lstm_ seq = nn.LSTM(50100,num layers=2 )
#输入序列seq= 10,batch =3,输入维度=50
lstm input = torch. randn(10350)
out, (h, c) = lstm_ seq(lstm_ _input) #使用默认的全0隐藏状态

GRU

GRU可以认为是LSTM的变种,本质上也是通过门控来空值网络的记忆能力。但在计算当前时刻新信息的方法和LSTM有 所不同;GRU只包含重置门和更新门;在音乐建模与语音信号建模领域与LSTM具有相似的性能,但是参数更少,只有两个门控。

所以一般情况下,GRU的计算量比LSTM要小,而准确性就要视具体问题及数据而定。

【深度学习笔记】6.循环神经网络_第18张图片

其他经典的循环神经网络

Peephole LSTM

让门层也接受细胞状态的输入,同时考虑隐层信息的输入。

【深度学习笔记】6.循环神经网络_第19张图片

Bi-directional RNN(双向RNN)

Bi-directional RNN(双向RNN)假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关,例如:完形填空,它由两个RNNs上下叠加在一起组成,输出由这两个RNNs的隐藏层的状态决定。

【深度学习笔记】6.循环神经网络_第20张图片

【深度学习笔记】6.循环神经网络_第21张图片

Continuous time RNN(CTRNN)

CTRNN利用常微分方程系统对输入脉冲序列神经元的影响 进行建模。CTRNN被应用到进化机器人中,用于解决视觉、协作和最 小认知行为等问题。

【深度学习笔记】6.循环神经网络_第22张图片

循环神经网络的主要应用

语音模型

根据之前和当前词预测下一个单词或者字母

【深度学习笔记】6.循环神经网络_第23张图片

问答系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTEyMIm5-1638344566352)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.30.png)]

自动作曲

【深度学习笔记】6.循环神经网络_第24张图片

Music AI Lab: https://musicai.citi.sinica.edu.tw/

【深度学习笔记】6.循环神经网络_第25张图片

机器翻译

将一种语言自动翻译成另一种语言

【深度学习笔记】6.循环神经网络_第26张图片

自动写作

根据现有资料自动写作,当前主要包括新闻写作和诗歌创作。主要是基于RNN&LSTM的文本生成技术来实现,需要训练大量同 类文本,结合模板技术。

目前主要产品有:腾讯Dreamwriter写稿机器人、今日头条xiaomingbot、第一财经DT稿王(背后是阿里巴巴) 、百度Writing-bots等

图像描述

根据图像形成语言描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZG1CJX3m-1638344566355)(https://datawhalechina.github.io/unusual-deep-learning/PIC/6/6.34.png)]

参考资料:datawhale

你可能感兴趣的:(深度学习,python,深度学习,人工智能,循环神经网络,rnn)