参考原文链接:https://colah.github.io/posts/2015-08-Understanding-LSTMs/
更新中
写在最前
1.感觉通信方面的知识真的是有用的!!
2.网络不会“学习”,人也从未“思考”——只有数据修正模型。
3.水平十分有限,如果发现任何错误,欢迎吐槽,欢迎指教,欢迎指导——总之只要有助于修正问题,一概欢迎。
4.旗帜鲜明的反对从csdn上抄博客,从github上抄代码出书且不注明引用的行为。
任何形式的转载请标明引用——手打不易,混饭不易。
1.Recurrent Neural Networks 递归神经网络
人们在阅读文章时,对于一个单词的理解需要结合当前看到的单词之前的内容。但是,在阅读文章的过程当中,我们并没有一遍一边地重复阅读当前单词之前的内容。例如:I will always be with you.我们在读到单词be时,可能需要结合前文的will一词,因此我们在理解时需要有对一定时期/距离之外的一些内容的依赖。但同时,我们并不需要重新阅读这之前的部分——I will always be.在此之后,读到单词you时,也不会重新阅读i will always be with这一部分。在这一过程中,我们的理解实际上是一个持续性的过程。嗯。。。这有点类似于一个Mealy型状态机——输出由当前状态与输入决定,理解由已阅读的部分与当前看到的单词确定,然后又构成一个新的状态。
全连接的神经网络并不适合这种问题,原因个人理解有以下几点:
1.全连接神经网络不具备一个类似滑动窗口的结构,或者说如果真的将网络在序列上滑动,代价极大且与前文部分内容是冲突的——固定输入数目或许并不是最大的问题,因为按照类似Markov链的思路来想,依赖的程度随着时间/距离的增加必然是逐渐下降的,因此对于特定的任务而言,确定一个最大的可能存在依赖关系的范围作为网络的输入的数目应该是可行的。然而,考虑一个长度为10的序列,假定最大依赖的长度为5,则网络输入假定为5,则需要将6组数据送入网络,存在大量的重复计算问题,可能带来极高的latency,而且实际上按照Mealy机的思路,我们需要的仅仅是一个状态,而不是之前的时刻的输入。
2.(假定按照1中滑动窗口的思路是可行的)全连接神经网络的输出的问题(CTC或许可以解决):对于翻译等任务,输出需要与标签对正。
按照上面的思路,我们可以很自然地根据Mealy机想到:旧的一个时刻的输入和初始状态经过一个MLP形成一个代表状态的特征向量和旧的输出,然后再与当前的时刻的输入一起送入一个MLP形成新的状态变量和当前的输出,然后一直这么循环下去。或者从当前时刻来看,状态一直递归下去。
我们很自然地能够想到如下的递归神经网络的结构:
2.The Problem of Long-Term Dependencies 长期依赖关系带来的问题
3.LSTM Networks LSTM网络
4.The Core Idea Behind LSTMs LSTM 网络背后的核心思想
5.Step-by-Step LSTM Walk Through 逐步理解LSTM
第一步:LSTM要决定从状态中丢弃哪些信息。
第二步:确定要在LSTM单元的状态中保存的新的信息。