参考博客:http://www.jianshu.com/p/9dc9f41f0b29
希望大家在阅读下面文字的时候,已经读完上面的文章了,因为下面的文字是根据上面文章来写的。
首先,深度学习模型已经在各种研究领域中取得了很大的发展,主要说一下自己就CNN和RNN,LSTM模型的一些理解。(适合理解不透彻或者掌握不到精髓的读者,初学者可以看上面的博客,大神可以忽略)
首先,CNN是为了获取图像或者文本的local information 的,局部信息特征的获取比较擅长。但是光靠这些局部信息也不算完美啊,而且现在很多处理的数据都是序列的,一个接着一个,并且前后有规律或者关系可寻的。比如像文本序列,一个句子,前后的词是有关系的。
那么为了获取这些序列的前后关系,RNN就提出了。
引入上面文章的一个图
x0,x1,x2,x3,x4这样一个序列,在处理x3的时候,可能会考虑x0,x1这些前面的信息,这就捕捉了与前部分序列之间的关系了。
(那么与后面序列的关系怎么捕捉呢?这就有人提出了双向的RNN模型,具体有biLSTM。)
那么当遇到下面这样的情况怎么办了?就是Xt+1其实是和X0,X1有很大的关系的,但是他们的具体非常远,这种现象较 Long Term Dependency(长期依赖)。遇到这样的情况,一般RNN就会丧失这种捕捉序列长远距离的信息特征。
有些科学家可以通过设置初始权重矩阵等等方法来缓和这种情况,但是难度 实在太大。
所以有人又提出了LSTM模型。
和一般RNN模型的区别在于,它可以记忆memory,也可以忘记forget。就是可以选择性的保留序列的特征,留一部分重要的,忘记一部分不重要的。距离很远地方的序列部分,虽然没有可能留下所有信息,也可以留下一部分,这和一个sigmoid值有关,如果为1就是留下全部信息,0就是都忘记,都不留。假如是0~1之间的值,就对表示信息的向量相乘,就表示留这么多的信息。可以理解为0.2时,相乘后就表示向量的20%留下,80%忘记。(这一点可能是LSTM的核心,只是通俗的表达,我的理解是这样,这样比较好理解,但可能不太科学)
下面讲一下一般RNN和LSTM有何不同。
看这幅图,可以看出RNN隐层的操作比较简单,LSTM的操作比较复杂,就是这样看上去比较复杂的操作,才实现了记忆重要的,忘记不重要的。
看过一些LSTM的都知道,里面有三个门层,分别是forget gate遗忘门;input gate输入门;output gate输出门。
这里是上图中图标的意思。
下面看每个门的作用,时刻记住保留重要的,忘记不重要的。
上面三个门,基本对应了三个操作。
决定我们会从细胞状态中丢弃什么信息。
焦点放在红色边框包住的内容。h(t-1)是上一个输出的信息,经过sigmoid函数后,h(t-1)就会保留一些,忘记一些。同时也保留了xt的一部分,忘记了一部分。
确定哪些新的信息留在细胞状态中,并更新细胞状态
注意图中的箭头指向,以及数据信息的流动情况,就很容易看懂。