目录
RNN 循环/递归神经网络
RNN概述
为什么有RNN
传统的神经网络,CNN(卷积神经网络), 他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果. 但是, 对于一些与时间先后有关的, 比如视频的下一时刻的预测,文档前后文内容的预测等, 这些算法的表现就不尽如人意了.
并且传统的网络结构是采用固定大小的输入并产生固定大小的输出 RNN 它专注于处理文本,其输入和输出的长度是可变的,比如,一对一,一对多,多对一,多对多。
什么是RNN
RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能.
RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
应用:
情感分析,机器翻译、自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理 机器写小说、语音识别图像描述生成、文本相似度计算 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域.
RNN模型
缺点:当序列过长的时候,
https://github.com/hzy46/Char-RNN-TensorFlow
参考:https://blog.csdn.net/qq_32241189/article/details/80461635
LSTM长短记忆网络
它处理时间序列的问题的效果很好, 但是仍然存在着一些问题, 其中较为严重的是容易出现梯度消失或者梯度爆炸的问题(*BP算法和长时间依赖*造成的). 注意: 这里的梯度消失和BP的不一样,这里主要指由于时间过长而造成记忆值较小的现象. 因此, 就出现了一系列的改进的算法, 这里介绍主要的两种算法: LSTM 和 GRU.LSTM 和 GRU对于梯度消失或者梯度爆炸的问题处理方法主要是:
对于梯度消失: 由于它们都有特殊的方式存储”记忆”,那么以前梯度比较大的”记忆”不会像简单的RNN一样马上被抹除,因此可以一定程度上克服梯度消失问题。 对于梯度爆炸:用来克服梯度爆炸的问题就是gradient clipping,也就是当你计算的梯度超过阈值c或者小于阈值-c的时候,便把此时的梯度设置成c或-c。
有选择保留有选择忘记
和RNN不同的是: RNN中,就是个简单的线性求和的过程. 而LSTM可以通过“门”结构来去除或者增加“细胞状态”的信息,实现了对重要内容的保留和对不重要内容的去除(信息选择通过). 通过Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”.
c控制参数 决定什么样的信息会保留或者忘记
GRU算法
GRU是2014年提出的一种LSTM改进算法. 它将忘记门和输入门合并成为一个单一的更新门, 同时合并了数据单元状态和隐藏状态, 使得模型结构比之于LSTM更为简单.
词向量模型 词嵌入模型 Word2vector
使用LSTM进行情感分析
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:RNN 循环/递归神经网络入门 - Python技术站