1.为什么需要循环神经网络
普通神经网络适合固定长度的数据
对于长度不固定的输入问题,即序列式问题,需要循环神经网络
循环神经网络可以解决的问题:
- 1对多:输入图片生成不定长的文字描述
- 多对1:输入不定长的文本分类(文本情感分析)
- 多对多:机器翻译
- 实时多对多:视频解说,实时翻译
2.循环神经网络
- 维护一个中间状态包含上下文信息,作为下一步的额外输入
- 每一步使用同样的激活函数和参数
- 最简单的循环神经网络
- 字符语言模型(根据当前字符预测下一个字符)
- 训练阶段:词典:[j,e,p],样本:jeep
-
- 测试阶段:上一步的输出作为下一步的输入
循环神经网络的正向传播:
循环神经网络的反向传播:
反向传播特点:
- 激活函数:tanh输出在-1和1之间
- 容易发生梯度消失:输出值接近-1和1时,梯度很小;序列很长时,从末端往回传梯度,每次乘上-1和1之间的数,容易发生梯度消失,使得较远的步骤对当前步骤的贡献很小
- 切换其他激活函数后,可能导致梯度爆炸
多层网络与双向网络
3.LSTM(长短期记忆网络)
对于普通的循环神经网络,所有隐藏层单元共享一个参数矩阵W,该参数承载了太多的任务,当一个序列过长时,W无法记住过多的信息,因此,实际上W只能记住最近的一些信息,LSTM网络解决了该问题。
LSTM引入选择性输入,输出,和遗忘机制,用门实现:在某个位置计算一个[0,1]之间的数控制需要记住或需要遗忘的程度,减少没有用的输入,当前不需要输出的信息不进行输出,选择性遗忘之前的状态信息。
4. 基于LSTM的文本分类模型(TextRNN与HAN)
网络识别输入文本,判断文本类别。
对本文分词,对每个词用embedding的形式进行编码,编码成一个向量,将向量输入到LSTM中,最后一个词输入后拿到输出该输出向量编码了句子中所有信息,输出向量经过一个普通的神经网络得到分类结果。
embedding编码:
对每一次进行长度为5的编码,embedding变量是可训练的。
双向LSTM,组合每一步的输出,避免例最终输出较远的信息无法保存下来。
attention(注意力机制) :给与一些关键词更高的关注,分词的输出编码与参数计算,得到的注意力值,对编码加权,所有分词编码加权平均值作为句子的编码,上层再对所有句子加权编码作为段落的编码。
5.基于CNN的文本分类模型(TextCNN)
由于CNN不能解决忽长忽短的序列问题,可以将所有句子变成固定长度的句子(扩充/截断)。
将句子每个词对应的每一列看做是这个句子的一个通道,使用若干不同尺寸的卷积核进行卷积,得到多个不同和长度的结果,对卷积结果做池化操作,将多个结果拼接作为这个句子的表示,最后送入到全连接计算类别。
6.RNN与CNN融合解决文本分类
R-CNN左边是一个双向的LSTM网络,提取当前词的输出向量和上下文对应的向量,进行组合作为当前词的输出信息,对改向量进行1维卷积得到输出,在经过最大池化层,输出层得到分类结果。该模型同时利用了双向RNN提取信息的能力和一维卷积去做信息抽象的能力
为了避免embedding层次参数量过大造成过拟合和无法使用的问题,需要对embedding进行压缩:普通的embedding层,使用固定长度(embed_size)的向量表示每一个词,参数个数为:,使用共享压缩方法进行压缩:使用2个长度为子向量组合表示一个词,将所有词排列为一个矩形,矩形为正方形时,子向量个数最小为,因此,压缩后参数个数为.