循环神经网络属于时间递归神经网络,主要解决序列数据的处理,比如文本、语音、视频等等
PS:因为我现在在做图像,CNN用的比较多,所以RNN和LSTM的学习一笔带过
一、序列数据与词嵌入
序列数据:比如文本、语音、视频等等。这类数据的样本间存在顺序关系,每个样本和它之前的样本存在关联。比如说,在文本中,一个词和它前面的词是有关联的;在气象数据中,一天的气温和前几天的气温是有关联的。一组观察数据定义为一个序列,从分布中可以观察出多个序列。
词嵌入( word embedding) :不能直接将文字符号输入网络,所以需要将词语转换为数值形式
之前写过一篇关于 word2vec 的博客:
https://sophia0130.github.io/2018/08/01/NLP%E2%80%94%E2%80%94word2vec/
二、RNN(recurrent neural networks)
1.什么是RNN?
将循环神经网络进行展开成神经网络,隐含层h的边实际上是和上一时刻的h相连,这是一个时间序列
输入单元(Input units):{x0,x1,…,xt,xt+1,…}
输出单元(Output units):{y0,y1,…,yt,yt+1.,..}
隐藏单元(Hidden units):{h0,h1,…,ht,ht+1,…}
1)循环函数(recurrence formula ):ht = Fθ (ht−1,xt)
2)ht:隐藏层的第t步的状态,它是网络的记忆单元,取决于当前输入层的输入与上一步隐藏层的状态
3)yt:第t步的输出,yt = softmax(Vst)
不同于 ht包含了前面所有步的隐藏层状态,输出层的输出yt只与当前步的ht有关
2.RNN 的参数共享
RNN看上去和HMM很像。两者最大的区别在于,RNN的参数是跨时刻共享。也就是说,任意时刻的网络参数都是相同的。
共享参数使得模型的复杂度减少,这和CNN是相通的,CNN在二维数据的空间位置之间共享卷积核参数,而RNN则是在序列数据的时刻之间共享参数。
3.输入输出的模式
one-to-many
many-to-one
sequence to sequence:many-to-one + one-to-many
三、梯度消失和梯度爆炸
(Gradient Vanishing/Exploding )
对于深层网络(其层数过深)或循环神经网络(其递归结构),反向传播的连乘使得误差梯度累积,然后导致网络权重的大幅更新,并因此使网络变得不稳定。
1. 梯度消失
通常神经网络所用的激活函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x)),因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。
2. 梯度爆炸
由于初始化权值过大,反向传播时会导致误差梯度在更新中累积,变成非常大的梯度,对于比较浅的层数,其网络权重的大幅更新,使网络变得不稳定。
3.解决方法
使用 ReLU 激活函数
使用长短期记忆网络(LSTM)
使用梯度截断(Gradient Clipping)
使用权重正则化(Weight Regularization)
四、LSTM 长短时记忆(Long-Short Term Memory)
1. LSTM的作用
权重指数级爆炸或消失,使得普通 RNN 没有办法回忆起久远记忆,而结合不同的LSTM可以很好解决这个问题
2. LSTM 多了三个控制器
概念理解 :https://blog.csdn.net/hust_tsb/article/details/79485268
- 输入门(input gate):输入门打开,数据就写入记忆细胞(门的打开和关闭通过学习得到)
遗忘门(forget gate):是否将记忆中的值保留,刷新记忆
LSTM 模型的关键之一就在于这个“遗忘门”, 它能够控制训练时候梯度在这里的收敛性(从而避免了 RNN 中的梯度 vanishing/exploding 问题),同时也能够保持长期的记忆性。
- 输出门(output gate):是否将记忆中的值读出(通过学习)
3. LSTM核心计算
(1)输入时选择忘记过去某些信息
(2)记忆现在的信息
包含两个部分:
- sigmoid 层:决定什么值我们将要更新
- tanh 层:创建一个新的候选向量 Ct~,被加入到状态中。 语言模型的例子中,我们希望增加新的代词的类别到细胞状态中,来替代旧的需要忘记的代词。
(3)将输入和更新后的细胞状态合并
更新旧细胞状态,Ct-1到Ct
旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息,接着加上新的候选值it∗Ct~
(4)output gate:输出结果
4.LSTM模型流程
(1)输入节点(gc):接受上一个时刻隐藏节点的输出以及当前的输入作为输入,然后通过一个tanh激活函数
(2)输入门(ic):将输入节点(gc)的输出相乘与将输入门(ic)的输出(输入门为 sigmoid,其输出为0-1之间,以起控制信息量的作用)
(3)忘记门(fc):将上一个时刻的内部状态节点的输出(sc)与忘记门(fc)的输出相乘(忘记门为 sigmoid,其输出为0-1之间,起控制信息量的作用)
(4)内部状态节点(sc):被输入门过滤的当前输入和经过忘记门的上一个时刻内部状态节点输出之
(5)输出门(oc):将内部状态节点的输出(sc)与输出门(oc)相乘(输出门为 sigmoid,其输出为0-1之间,起控制信息量的作用)