RNN
CV中对图片的处理,我们可以把图片理解为一个静态数据
而比如股票、天气、语音、文本等,都是随时间在变化的数据,叫做时序数据,
要处理这些变化的数据,需要RNN这种可以处理时序数据的模型,
不同人说“你好”的时长也不一样,所以RNN也可以处理不同时长的数据
原始的RNN模型:存在梯度爆炸和消失问题,所以推出了LSTM
原理:每个时刻都有一个输入,每个输入都会得到一个中间的表示h,在第二个时刻的h表示会使用到第一个时刻的h
最后每一时刻输入都会产生预测y,并计算出损失
RNN和HMM区别
HMM中对于状态的表示是使用one-hot,是稀疏的表示,比如6维的向量只能表示6中不同的状态,
而在RNN中,状态的表示采样分布式表示,向量中的值都是学习得到的,可能6维向量就可以表示100中状态
在语言模型中,
比如有句子s,要通过语言模型来计算概率p(s),也就是计算句子单词的联合概率,联合概率又可以写成连乘概率的形式
也就是要通过前边词来预测接下来词
构建一个语言模型来预测句子接下来是什么单词
首先将单词的one-hot表示形式经过一个embedding部分转换成词向量的表示形式x,然后得到预测结果预测下一个单词
RNN是在不同时间输入不同的单词,所以在时间维度上,它是一个深度模型。
而在隐式层,如果我每个单词都是经过多层的处理,那么也是一个深度模型。
所以这是从两个方面去看RNN,都是深度模型,这与CNN是有区别的
RNN的梯度爆炸和梯度消失
RNN中反向传播是沿着时序方向的,BPTT:BP Through Time。
其实就是有最终计算出的损失值,要计算梯度并反向传播,比如计算组中的损失loss对h1的梯度,那么我要考虑到中间h2、h3、h4的梯度
通过一个链式法则的推导可以求得loss对h1的梯度
在计算梯度的时候,因为计算loss对h1的梯度是考虑中间项的梯度的,也就是中间梯度的一个连乘,
那么,如果中间很多项的范数是小于1,那整个的乘积就会非常小,导致到达h1的梯度就不存在了。h1 = 0.10.10,1*,
如果中间很多范数大于1,那整个的乘积会变得非常大,导致h1的梯度爆炸.h1 = 1.11.11.1*…
gradient clipping
解决梯度爆炸问题:当梯度超过某个阈值时,进行归一化的操作,乘以阈值除以范数
LSTM
LSTM和RNN流程没区别,只是在计算每个h时,LSTM内部加了三个控制开关:forget gate、input gate、output gate
通过这三个门的开关来选择性地保留之前文本的信息,这样可以解决梯度爆炸和消失的问题,可以处理更长的文本数据。
但是并不是说使用了这个模型就可以保证不出现梯度爆炸和消失问题。
应用场景
第一个没有使用时序的模型,所以不是RNN,没有时序信息。这种更适合于处理图像,对图像进行识别或者分类
第二个适用于看图说话,输入图像,然后输出文本
第三个多输入,一个输出,适用于情感分析
第四个适用于机器翻译
第五个 适合于NER
参考博客
Bi-directional LSTM
在LSTM基础上,增加了反向的计算过程,这样一个h的计算表示是综合上下文得到的
在下边这个实验中,可以看出使用双向的LSTM会学到文本中的更多关键信息,效果优于RNN、LSTM
GRU
提出时间晚于LSTM
比LSTM简单,效果差不多,计算过程少于LSTM,所以计算速度更快
包含:update gate、reset gate