Datawhale2021年11月组队学习——循环神经网络

本文介绍了循环神经网络(RNN)的计算图概念,重点剖析了RNN结构、BPTT训练算法,并深入探讨了LSTM的遗忘门、输入门和输出门机制,以及如何通过LSTM解决RNN的梯度消失问题。涵盖了词性标注和长短时记忆网络在自然语言处理的应用。
摘要由CSDN通过智能技术生成

以下学习笔记源于Datawhale“水很深的深度学习”课程的循环神经网络
原文链接: https://datawhalechina.github.io/unusual-deep-learning/

RNN

计算图

计算图的引入是为了更方便的表示网络,计算图是描述计算结构的一种图,它的元素包括节点(node)和边(edge),节点表示变量,可以是标量、矢量、张量等,而边表示的是某个操作,即函数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3orKvV3r-1638278361786)(./1638155192737.png)]

复合函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jusljuH7-1638278361788)(./1638155349425.png)]

计算图的求导,有两种情况:

  • 情况1
    在这里插入图片描述

  • 情况2
    在这里插入图片描述

求导举例:
例1:
在这里插入图片描述

  • a = 3, b = 1 可以得到 c = 4, d = 2, e = 8
  • ∂ e ∂ a = ∂ e ∂ c ∂ c ∂ a \frac{∂e}{∂a}=\frac{∂e}{∂c}\frac{∂c}{∂a} ae=ceac=d=b+1=2
  • ∂ e ∂ b = ∂ e ∂ c ∂ c ∂ b + ∂ e ∂ d ∂ d ∂ b \frac{∂e}{∂b}=\frac{∂e}{∂c}\frac{∂c}{∂b}+\frac{∂e}{∂d}\frac{∂d}{∂b} be=cebc+debd=d+c=b+1+a+b=6

例2:
在这里插入图片描述

∂ Z ∂ X = \frac{∂Z}{∂X}= XZ= =αδ+αϵ+αζ+βδ+βϵ+βζ+γδ+γϵ+γζ=(α+β+γ)(δ+ϵ+ζ)

计算图可以很好的表示导数的前向传递和后向传递的过程,在例2中,前向传递 ∂ ∂ X \frac{∂}{∂X} X,后向传递 ∂ ∂ Z \frac{∂}{∂Z} Z
在这里插入图片描述

循环神经网络

一些常见的序列化结构:

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

RNN的发展历程:
在这里插入图片描述

核心思想
样本间存在顺序关系,每个样本和它之前的样本存在关联。通过神经网络在时序上的展开,我们能够找到样本之间的序列相关性。

RNN一般结构:
在这里插入图片描述

各个符号的表示: x t , s t , o t x_{t},s_{t},o_{t} xt,st,ot分别表示的是t时刻的输入、记忆和输出, U , V , W U,V,W U,V,W是RNN的连接权重, b s , b o b_{s},b_{o} bs,bo是RNN的偏置, σ , φ σ,φ σ,φ是激活函数, σ σ σ通常选tanh或sigmoid, φ φ φ通常选用softmax。

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

RNN案例

比如词性标注:

  • 我/n,爱/v购物/n
  • 我/n在/pre华联/n购物/v
  • 中文/nz分词/n是/v文本处理/n不可或缺/l的/uj一步/m!/x

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

将神经元的输出存到memory(记忆单元)中,memory中值会作为下一时刻的输入。在最开始时刻,给定 memory初始值,然后逐次更新memory中的值。
在这里插入图片描述

RNN一般结构

  • Elman Network
    在这里插入图片描述

  • Jordan Network
    在这里插入图片描述

  • 各种结构RNN
    在这里插入图片描述

RNN训练算法-BPTT

BPTT即BP算法加上了时序演化,TT即(Through Time)
在这里插入图片描述

定义输出函数
s t = t a n h ( U x t + W s t − 1 ) s_{t}=tanh(Ux_{t}+Ws_{t-1}) st=tanh(Uxt+Wst1) y t ^ = s o f t m a x ( V s t ) \hat{y_{t}}=softmax(Vs_{t}) yt^=softmax(Vst)
定义损失函数
E t ( y t , y t ^ ) = − y t l o g y t ^ E_{t}(y_{t},\hat{y_{t}})=-y_{t}log\hat{y_{t}} Et(yt,yt^)=ytlogyt^
E ( y , y ^ ) = ∑ t E t ( y t , y t ^ ) E(y,\hat{y})=\sum_{t}E_{t}(y_{t},\hat{y_{t}}) E(y,y^)=tEt(yt,yt^)
= − ∑ t y t l o g y t ^ =-\sum_{t}y_{t}log\hat{y_{t}} =tytlogyt^

在这里插入图片描述

分别求损失函数E对U、V、W的梯度:
∂ E ∂ V = ∑ t ∂ E t ∂ V \frac{∂E}{∂V}=\sum_{t}\frac{∂E_{t}}{∂V} VE=tVEt
∂ E ∂ V = ∑ t ∂ E t ∂ V \frac{∂E}{∂V}=\sum_{t}\frac{∂E_{t}}{∂V} VE=tVEt
∂ E ∂ V = ∑ t ∂ E t ∂ V \frac{∂E}{∂V}=\sum_{t}\frac{∂E_{t}}{∂V} VE=tVEt

  • 求E对V的梯度,以 E 3 E_{3} E3举例,先求 E 3 E_{3} E3对V的梯度
    ∂ E 3 ∂ V = ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ V \frac{∂E_{3}}{∂V}=\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂V} VE3=y3^E3Vy3^
    = ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ z 3 ∂ z 3 ∂ V =\frac{∂E_{3}}{∂\hat{y_{3}}} \frac{∂\hat{y_{3}}}{∂z_{3}} \frac{∂z_{3}}{∂V} =y3^E3z3y3^Vz3

其中 z 3 = V s 3 z_{3}=Vs_{3} z3=Vs3,然后求和即可

  • 求E对W的梯度,以 E 3 E_{3} E3举例,先求 E 3 E_{3} E3对W的梯度
    ∂ E 3 ∂ W = ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ s 3 ∂ s 3 ∂ W \frac{∂E_{3}}{∂W}=\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂s_{3}}\frac{∂s_{3}}{∂W} WE3=y3^E3s3y3^Ws3
    s 3 = t a n h ( U x 3 + W s 2 ) s_{3}=tanh(Ux_{3}+Ws_{2}) s3=tanh(Ux3+Ws2)
    ∂ E 3 ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ W \frac{∂E_{3}}{∂W}=\sum_{k=0}^{3}\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂s_{3}}\frac{∂s_{3}}{∂s_{k}}\frac{∂s_{k}}{∂W} WE3=k=03y3^E3s3y3^sks3Wsk
    ∂ 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{∂E_{3}}{∂W}=\sum_{k=0}^{3}\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂s_{3}}(\prod_{j=k+1}^{3}\frac{∂s_{j}}{∂s_{j-1}})\frac{∂s_{k}}{∂W} WE3=k=03y3^E3s3y3^(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,依赖关系一直传递到 t = 0 的时刻。因此,当计算对于 W 的偏导时,不能把 s 2 s_{2} s2看作是常数项

  • 求E对U的梯度,以 E 3 E_{3} E3举例,先求 E 3 E_{3} E3对U的梯度
    ∂ E 3 ∂ U = ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ s 3 ∂ s 3 ∂ U \frac{∂E_{3}}{∂U}=\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂s_{3}}\frac{∂s_{3}}{∂U} UE3=y3^E3s3y3^Us3
    s 3 = t a n h ( U x 3 + W s 2 ) s_{3}=tanh(Ux_{3}+Ws_{2}) s3=tanh(Ux3+Ws2)
    ∂ E 3 ∂ U = ∑ k = 0 3 ∂ E 3 ∂ y 3 ^ ∂ y 3 ^ ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ U \frac{∂E_{3}}{∂U}=\sum_{k=0}^{3}\frac{∂E_{3}}{∂\hat{y_{3}}}\frac{∂\hat{y_{3}}}{∂s_{3}}\frac{∂s_{3}}{∂s_{k}}\frac{∂s_{k}}{∂U} UE3=k=03y3^E3s3y3^sks3Usk

长短时记忆网络

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

  • ReLU函数
  • 门控RNN(LSTM)

LSTM

LSTM即长短时记忆网络,是一种用于深度学习领域的人工循环神经网络(RNN)结构。一个LSTM单元由输入门、输出门和遗忘门组成,三个门控制信息进出单元。
在这里插入图片描述

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

遗忘门: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}=σ(W_{f}⋅[h_{t-1,x_{t}}]+b_{f}) ft=σ(Wf[ht1,xt]+bf)
在这里插入图片描述

输入门: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 ) i_{t}=σ(W_{i}⋅[h_{t-1},x_{t}]+b_{i}) it=σ(Wi[ht1,xt]+bi)
C ~ = t a n h ( W c ⋅ [ h t − 1 , x t ] + b c ) \tilde{C}=tanh(W_{c}⋅[h_{t-1},x_{t}]+b_{c}) C~=tanh(Wc[ht1,xt]+bc)

在这里插入图片描述

输出门:LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于 h t − 1 h_{t-1} ht1 x t x_{t} xt
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_{t}=σ(W_{o}⋅[h_{t-1,x_{t}}]+b_{o}) ot=σ(Wo[ht1,xt]+bo)
在这里插入图片描述

状态更新:“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆。
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)
在这里插入图片描述

一个标准化的RNN的例子:

#构造RNN网络,x的维度5,隐层的维度10,网络的层数2
rnn_seq = nn.RNN(5,10,2)
#构造一个输入序列,长为6,batch是3,特征是5
X =V(torch.randn(6,3,5))
#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(50,100,num_layers=2)
#输入序列seq= 10,batch =3,输入维度=50
lstm_input = torch.randn(10,3,50)
out,(h,c) = lstm_seq(lstm_input) #使用默认的全0隐藏状态

其他经典循环神经网络

GRU

GRU可认为是LSTM 的变种,它的细胞状态与隐状态合并,在计算当前时刻新信息的方法和LSTM有 所不同;GRU只包含重置门和更新门;在音乐建模与语音信号建模领域与LSTM具有相似的性能,但是参数更少,只有两个门控。
在这里插入图片描述

Peephole LSTM

在这里插入图片描述

让门层也接受细胞状态的输入,同时考虑隐层信息的输入。
在这里插入图片描述

双向RNN

假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关,例如:完形填空,它由两个RNNs上下叠加在一起组成,输出由这两个RNNs的隐藏层的状态决定。
在这里插入图片描述

在这里插入图片描述

CTRNN

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

主要应用

  • 语言模型:根据之前和当前词预测下一个单词或者字母
    在这里插入图片描述

  • 问答系统:根据问题回答相关的内容
    在这里插入图片描述

  • 自动作曲:自动谱写曲目
    在这里插入图片描述

  • 机器翻译:将一种语言自动翻译成另一种语言
    在这里插入图片描述

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

  • 图像描述:根据图像形成语言描述
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值