任务
- RNN的结构。循环神经网络的提出背景、优缺点。着重学习RNN的反向传播、RNN出现的问题(梯度问题、长期依赖问题)、BPTT算法。
- 双向RNN
- 递归神经网络
- LSTM、GRU的结构、提出背景、优缺点。
- 针对梯度消失(LSTM等其他门控RNN)、梯度爆炸(梯度截断)的解决方案。
- Memory Network(自选)
- Text-RNN的原理。
- 利用Text-RNN模型来进行文本分类。
- Recurrent Convolutional Neural Networks(RCNN)原理。
- 利用RCNN模型来进行文本分类(自选)
RNN
下图是一个简单的循环神经网络图,它由输入层、一个隐藏层和一个输出层组成:
- x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈)
- s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同)
- U是输入层到隐藏层的权重矩阵;
- o也是一个向量,它表示输出层的值;
- V是隐藏层到输出层的权重矩阵。
那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。
- 权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
LSTM/GRU
由于当间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力;
LSTM网络通过精妙的门控制将短期记忆与长期记忆结合起来,在一定程度上解决了梯度消失的问题。
-
GRU门控制单元
其中涉及到的公式及含义:
- C为记忆单元
- 为可能要更新的值
- 为更新们,sigmoid函数在0到1之间决定了更新的比例,0 表示“完全保留”,1 表示“完全舍弃”
- 由网络来决定为0还是1,即是否要记忆前一步
- C为记忆单元
-
LSTM结构:
用了三个门来解决梯度消失的问题
-
忘记门层:
第一步:丢弃信息
其中sigmoid函数是确定旧的细胞状态的保留比例
其中1 表示“完全保留”,0 表示“完全舍弃”
-
输入门层:
第二步:确定新信息
tanh作为激活函数创新一个新的候选值C ̃_t,其中sigmoid函数是确定新的细胞状态的保留比例
-
更新细胞状态:
第三步:更新细胞状态
根据忘记门层的sigmoid函数确定需要丢弃的信息,根据输入门层的sigmoid函数确定需要更新的信息
-
确定输出值
通过tanh激活函数处理细胞状态的得到一个在-1到1之间的数据,sigmoid函数确定输出部分的比例
-
- LSTM的核心思想
LSTM的关键在于细胞的状态整个(绿色的图表示的是一个cell),和穿过细胞的那条水平线。
细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
若只有上面的那条水平线是没办法实现添加或者删除信息的。而是通过一种叫做 门(gates) 的结构来实现的。
门 可以实现选择性地让信息通过,主要是通过一个 sigmoid 的神经层 和一个逐点相乘的操作来实现的。
sigmoid 层输出(是一个向量)的每个元素都是一个在 0 和 1 之间的实数,表示让对应信息通过的权重(或者占比)。比如, 0 表示“不让任何信息通过”, 1 表示“让所有信息通过”。
LSTM通过三个这样的本结构来实现信息的保护和控制。这三个门分别输入门、遗忘门和输出门。
Text-RNN
-
原理:
-
单向RNN结构:
其中权重矩阵U、V、W共享
-
双向RNN结构:
正向计算和反向计算不共享权值
-
-
实现
根据2016年复旦大学IJCAI 上的发表的关于循环神经网络在多任务文本分类上的应用(Recurrent Neural Network for Text Classification with Multi-Task Learning)的RNN框架来实现一个RNN模型:
其中模型结构包括:- 一层embedding
- 一层双向LSTM
- 一层全连接层
- 一个softmax分类函数
参考资料:
TextRNN