《白话深度学习与Tensorflow》学习笔记(3)HMM RNN LSTM

RNN:循环神经网络

与CNN最大的不同是记忆暂存功能,可以把过去输入的内容所产生的远期影响量化后与当前时间输入内容一起反应到网络中参与训练。尤其是对时间序列、自然语言(上下文关系)的处理,具有优势。

马尔科夫链:在给定当前的知识或信息下,观测对象过去的历史状态对于将来的预测是无关的,只需要观测当前状态即可得出。

HMM:隐马尔可夫模型,隐马尔可夫链的模型相对简化,是贝叶斯信念的一个特例。

假如三个骰子,分别是正方体D6、四面体D4和八面体D8。

无序的扔这三个骰子,可能出现了一串序列,2,1,8。这就叫做可见状态链,而其中还存在隐含状态链,如D4,D6,D8。HMM中的马尔科夫链一般是指隐含状态链,实际是隐含状态之间的转化概率。隐含状态和可见状态直接的概率叫做输出概率。

HMM隐马尔可夫模型,即通过统计的方法可以去观察和认知一个事件序列上邻近事件发生的概率转换问题。

如何训练HMM模型:输入Xi序列和Oi序列,全部通过统计学模型完成,得到的模型结果就是一个转移矩阵。一个输出概率矩阵和一个隐含状态转移矩阵。这样可以对下一个输出状态进行基于概率的预测。

RNN为如下的结构:


《白话深度学习与Tensorflow》学习笔记(3)HMM RNN LSTM_第1张图片
RNN单元结构

输入向量是Xt,得到Wx与Xt的乘积之后会有一个Ht,这个Ht会和下一次进入网络的Xt一起再次输入网络进行计算,调整权值,这样就可以使得前一次输入的向量所产生的结果对于本次输出的结果有一定影响,计算公式:



最终得到WH和Wx的矩阵。

RNN的模型在时间上可以进行展开(仅仅在时间上展开即随着时间的推移更新网络权值):


《白话深度学习与Tensorflow》学习笔记(3)HMM RNN LSTM_第2张图片
RNN在时间上展开

【图片来自:http://blog.csdn.net/heyongluoyao8/article/details/48636251】

误差传播:

由于误差的计算其中的


涉及很长的连乘,计算量颇大,所以会造成灾难,因此传统的RNN理论上虽然说得通,但是训练效果不理想。

改进的RNN:LSTM

LSTM:长短期记忆网络(long stort-term memory)由LSTM算法对标准RNN进行改进。规避了标准RNN中的梯度爆炸和梯度消失的问题。

忘记门(forget gate)某个X值可能会影响一个在时间上或者空间上比较远的hj输出,训练的过程就是学习到这个影响被量化的过程。LSTM可以是一个很大的方阵,中间部分是一个个LSTM单元,如下图所示:

http://www.jianshu.com/p/9dc9f41f0b29这篇文章中有详细的解释。

首先是从左到右的向量传输过去(输入的C(t-1)先进行乘法运算再叠加一个向量)。乘法器乘的系数可以考到左侧的h(t-1)和下面的Xt经过连接操作,再通过Sigmoid函数生成0-1之间的数。

忘记门:忘记就是这个相乘的过程,如果Sigmoid输出为1就完全记住,0就完全忘记,中间的值就是记忆的比例。


《白话深度学习与Tensorflow》学习笔记(3)HMM RNN LSTM_第3张图片
RNN忘记门

3、Tanh也是神经网络的一个层,可以把一个值映射到一个-1,1之间的数。



到这里其实决定本次输出的Ct究竟有多少采纳本次输入的信息,多少采纳上次遗留的信息。在语言模型中,表示前一个主语到当前是否应该被遗忘,而新的主语是否应该代替原先的主语出现。

最后的输出:2个,一个输出到同层下一个单元,一个输出到下一层的单元上。

应用:分类器、翻译器、有限状态机、聊天机器人等。

RNN+CNN 实现图片特征标注:

CNN用于提取特征,RNN用这些特征的Feature向量和描述向量来做训练。

你可能感兴趣的:(《白话深度学习与Tensorflow》学习笔记(3)HMM RNN LSTM)