文章目录
- 1.传统方法、卷积神经网络、循环神经网络是如何进行文本分类任务的?
- 2.为什么RNN会出现梯度消失或梯度爆炸,有哪些改进方案?
- 2.1 为什么RNN会出现梯度消失或梯度爆炸?
- 2.2 梯度爆炸问题的改进方案
- 2.3 梯度消失问题的改进方案
- 3. 循环神经网络中能否使用ReLU作为激活函数?
- 中有哪几个门,分别使用什么激活函数?
- 相比于传统的RNN解决了什么问题?LSTM为什么可以解决梯度消失的问题?
- 5.1 LSTM相比于传统的RNN解决了什么问题?
- 5.2 LSTM为什么可以解决梯度消失的问题?
循环神经网络理论及实战传送门:
深度学习TF—9.循环神经网络RNN及其变体GRU、LSTM
深度学习TF—10.循环神经网络RNN及其变体LSTM、GRU实战
插眼:
- 百面机器学习—1.特征工程
- 百面机器学习—2. 特征工程与模型评估要点总结
- 百面机器学习—3.逻辑回归与决策树要点总结
- 百面机器学习—模型基础知识
- 百面机器学习—要点总结
- 百面机器学习—与LDA要点总结
- 百面机器学习—均值算法、EM算法与高斯混合模型要点总结
- 百面机器学习—8.概率图模型之HMM模型
- 百面机器学习—9.前馈神经网络面试问题总结
- 百面机器学习—10.循环神经网络面试问题总结
- 百面机器学习—11.集成学习(GBDT、XGBoost)面试问题总结
- 百面机器学习—12.优化算法
1.传统方法、卷积神经网络、循环神经网络是如何进行文本分类任务的?
-
传统方法
用传统方法进行文本分类任务时,通常将一篇文章对应的TF-IDF
向量作为特征输入,其中TF-IDF向量的维度是词汇表的大小
TF-IDF算法介绍及实现
缺点:将
TF-IDF
向量作为特征输入,会丢失输入的文本序列中每个单词的顺序 -
前馈神经网络—卷积神经网络
卷积神经网络,通常接受一个定长的向量作为输入。卷积神经网络对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文本中的一些局部特征
缺点:两个单词之间的长距离依赖关系还是很难被学习到
-
循环神经网络
循环神经网络能很好地处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。
由图可见,一个长度为 T T T的序列用循环神经网络建模,其中,第 t t t层的隐含状态 h T h_T hT,编码了序列中前 t t t个输入的信息,可以通过当前的输入 x T x_T xT,和上一层神经网络的状态 h T − 1 h_{T-1} hT−1计算得到;最后一层的状态 h T h_T hT编码了整个序列的信息,因此可以作为整篇文档的压缩表示,以此为基础的结构可以应用于多种具体任务。例如,在h后面直接接一个Softmax层,输出文本所属类别的预测概率y,就可以实现文本分类。相比于卷积神经网络等前馈神经网络,循环神经网络由于具备对序列顺序信息的刻画能力,能够捕捉长距离输入之间的依赖(循环设计网络的设计初衷),往往能得到更准确的结果。
2.为什么RNN会出现梯度消失或梯度爆炸,有哪些改进方案?
2.1 为什么RNN会出现梯度消失或梯度爆炸?
如果将循环神经网络按时间展开成
T
T
T层的前馈神经网络来理解,就和普通的前馈神经网络的反向传播算法没有区别了。
传统神经网络的梯度求解:
与前馈神经网络一样,仍然是每一层神经元对上一层的输出的偏导的连乘
如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么随着离输出的越来越远,每层的梯度大小会呈指数缩小,导致梯度消失;如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,那么随着离输出的越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸。
2.2 梯度爆炸问题的改进方案
梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩。
在tensorflow 文档中,可以看到Gradient Clipping板块有五个函数。这里,我们仅仅介绍其中两个:
tf.clip_by_norm(t,clip_norm,name=None)
tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)
tf.clip_by_norm(t,clip_norm,name=None)
参数说明: t: a tensor ; clip_norm: 阈值,即maximum L2-norm。
如果 tensor的L2-norm大于clip_norm,则 t = t * clip_norm / l2norm(t)
否则t = t
tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)
参数说明: t_list: multiple tensors; clip_norm: a clipping ratio; use_norm: 如果你
已经计算出global_norm,你可以在use_norm进行指定。
tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)更慢一些,因为它需要
等所有的梯度都求出来才可以进行梯度截断。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2.3 梯度消失问题的改进方案
对于循环神经网络来说,长短时记忆模型及其变种门控循环单元(Gated recurrent unit,GRU)等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。
3. 循环神经网络中能否使用ReLU作为激活函数?
答案肯定是可以的,但是需要对矩阵的初值做一定的限制,否则容易引发数值问题。RNN的核心点在于权值共享,每一个time_step中的W全是相同的,U 和 V 也一样。因此,在梯度反向传播过程中,最终会包含 t t t个 W W W的连乘。如果 W W W不是单位矩阵,最终结果将会趋近于0或者无穷。那为什么前馈神经网络中不会出现这样的现象?这是因为前馈神经网络中每一层的权重矩阵 W W W是不同的,并且在初始化时它们是独立同分布的,因此可以相互抵消。总结来说,RNN可以使用 R e L U ReLU ReLU作为激活函数,但是需要初始化 W W W为单位矩阵。
4.LSTM中有哪几个门,分别使用什么激活函数?
LSTM有输入门
i
t
i_t
it,遗忘门
f
t
f_t
ft,输出门
o
t
o_t
ot以及内部记忆单元
c
t
c_t
ct。
关于激活函数的选取,在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh 作为激活函数。值得注意的是,这两个激活函数都是饱和的,也就是说在输入达到一定值的情况下,输出就不会发生明显变化了。如果是用非饱和的激活函数,例如ReLU,那么将难以实现门控的效果。Sigmoid函数的输出在0~1
之间,符合门控的物理定义。且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在-1~1
之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh 函数在输入为О附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。
相比于传统的RNN解决了什么问题?LSTM为什么可以解决梯度消失的问题?
5.1 LSTM相比于传统的RNN解决了什么问题?
解决了梯度消失问题
5.2 LSTM为什么可以解决梯度消失的问题?
这条路径上只有逐元素相乘和相加的操作。由于总的远距离梯度=各条路径的远距离梯度之和,即便其他远距离路径梯度消失了,只要保证有一条远距离路径梯度不消失,总的远距离梯度就不会消失(正常梯度+消失梯度=正常梯度)。因此LSTM通过改善一条路径上的梯度问题拯救了总体的远距离梯度。
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!