RNN循环神经网络
1.前言
CNN已经取得巨大成功,为什么需要RNN?
CNN只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理前后有关的序列的信息,即前面的输入和后面的输入是有关系的。
序列数据建模
- 文本:是字母和词汇的序列
- 语音:是音节的序列
- 视频:图像帧的序列
- 时态数据:气象观测数据,股票交易数据、房价数据等
例子:词性标注
- 我/n,爱/v 购物/n,
- 我/n在/pre某宝/n购物/v
如果直接用普通的神经网络来做,给网络的训练数据格式了就是我->我/nn,这样的多个单独的单词->词性标注好的单词。
但是很明显,一个句子中,前一个单词其实对于当前单词的词性预测是有很大影响的,比如预测购物的时候,由于前面的爱是一个动词,那么很显然购物作为名词的概率就会远大于动词的概率,因为动词后面接名词很常见,而动词后面接动词很少见。
所以为能够更好的处理序列的信息,RNN就出现了。
2. RNN
循环神经网络的定义
循环神经网络是一种人工神经网络,它的节点间的连接形成一个遵循时间序列的有向图。
核心思想
样本间存在顺序关系,每个样本和它之前的样本存在关联。通过神经网络在时序上的展开,我们能够找到样本之间的序列相关性
RNN结构
x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);
U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。
那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。
我们从上图就能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。现在看上去就比较清楚了,这个网络在t时刻接收到输入 Xt之后,隐藏层的值是 St ,输出值是 Ot。关键一点是, St的值不仅仅取决于 Xt ,还取决于 St-1 。
3.LSTM
RNN的梯度消失问题
不能有效解决长时依赖问题(由梯度消失引起的)
梯度消失的原因
- BPTT算法
- **函数Tanh
解决方案
- ReLU函数
- 门控RNN(LSTM)
LSTM组成
- a cell
- an input gate
- an output gate
- a forget gate
基本结构
LSTM依靠贯穿隐藏层的细胞状态实现隐藏单元之间的信息传递,其中只有少量的线性操作
LSTM引入了“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆
“门”机制由一个Sigmoid**函数层和一个向量点乘操作组成,Sigmoid层的输出控制了信息传递的比例
遗忘门
LSTM通过遗忘门(forget gate)实现对细胞状态信息遗忘程度的控制,输出当前状态的遗忘权重,取决于$h_{t-1}$
和$x_t$
输入门
LSTM通过输入门(input gate)实现对细胞状态输入接收程度的控制,输出当前输入信息的接受权重,取决于$h_{t-1}$
和$x_t$
输出门
LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于$h_{t-1}$
和$x_t$