机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)
本系列文章是对《Python深度学习》这本书阅读过程中,提炼出来的读书笔记。
《Python深度学习》这本书的作者是Keras之父,也是Tensorflow框架的贡献者,本书的特点是,作者从一个编程学习者的角度来描述机器学习,而不是堆上来复杂的数学公式和函数变换。所有的数学理论或者公式,都用程序的方式描述出来,对于没有数学功底的开发者来说是一个很大的福利。不过当然,后期还是离不开数学,但作为入门来说这本书就相当的好了。
前置课程:
机器学习的数学基础—— 《Python深度学习》读书笔记(1)
机器学习的模型概念和构建方法入门—— 《Python深度学习》读书笔记(2)
机器学习建模的数据特征工程—— 《Python深度学习》读书笔记(3)
机器学习:循环神经网络RNN原理分析—— 《Python深度学习》读书笔记(4)
本章讲的是循环神经网络的变种LSTM等,这也是书中不好理解的部分,作者也没有很清晰的描述出LSTM原理。从作者对LSTM所处理的问题来看,我认为作者也并没有真正的了解LSTM原理和应用场景,文中的笔记一部分来自《TensorFlow实战Google深度学习框架》这本书,一部分来自网上的资料:
https://blog.****.net/littlehaes/article/details/82819973
https://www.cnblogs.com/liujshi/p/6159007.html
本章知识点:
LSTM的特点
LSTM最大特点是解决了普通RNN的梯度消失问题,LSTM在普通RNN的基础上增加了一个“信息携带轴”,用于将过去的信息直接传递到当下,因此解决了梯度消失。
LSTM对于NPL处理有很大优势,处理近期数据影响大于过去数据影响的序列也十分好用。
1.什么是梯度消失
梯度消失就是随着网络层数的增加,早期的loss在传递过程中被弱化,导致后面感知不到前方的loss,这样网络就无法继续训练。
2.LSTM单个神经元内部原理
笔记中第一个图展示了RNN和LSTM的区别,这个LSTM的图并不正确,从图中我们只要理解作者是想让我们知道,比较RNN而言,LSTM多了一个信息携带轴,每次迭代过程中都可以有历史信息参与到当下运算中,当下的运算又会产生新的携带信息即可。
第二个图源自于《TensorFlow实战Google深度学习框架》,很好的描述了每个LSTM单元节点里到底发生了什么。图中说明一个LSTM单元中,包含:输入状态,遗忘门,输入值,输入门,以及输出门,这几个节点。
(1)什么是“门”?“门”的原理
首先我们要理解“门”的概念。“门”是一个过滤器或者判断器,用来判断一个数据的价值大小。“门”好比是一个[0,1]之间的数字,可以是0,可以是1,也可以是0.5或0.6。
“门”是如何实现过滤功能的呢?一个“门”对应一组数据,当一个“门”认为他所负责判断的这个数据是有价值的,那就给这个数据乘以一个接近1的数字,这个数据就可以尽可能多的传递下去,就好像数据传递之门开了一样。当一个“门”认为他所负责判断的这个数据是没有价值的,那就给这个数据乘以一个接近0的数字,此时这个数据就只能传递很少的信息出去,甚至无法再继续传递,就好像数据传递之门被关上了一样。
门就是通过这种方式,把有价值的信息传递出去,没有价值的信息让他消失不见。
(2)LSTM中“门”的对应关系和运算原理
LSTM单元中涉及三个不同的变换,每个变换就是一组数据和一个“门”进行一次⊗(Kronecker乘积)运算。这一段建议结合笔记中画的图来看。
遗忘门对应判断输入的状态
的价值,输入门
对应判断输入数值
的价值,输出门
用于判断输出数据
的价值。“门”通过和数据做⊗(Kronecker乘积)运算的方式,对数据进行过滤。
状态值和遗忘门
做⊗(Kronecker乘积)运算,得:
输入值i与输入门做⊗(Kronecker乘积)运算,得:
二者进行“异或”⊕运算,得新的状态值:
新状态和输出门
做⊗(Kronecker乘积)运算,得到输出
:
其中新状态向后传递,作为下一次迭代运算的输入状态,输出
向后传递,作为下一次迭代运算的输入值,一次迭代过程就结束了。为了简洁,此处省略了偏置向量b
这就是LSTM网络单元内部发生的所有事情。
(3)更哲学的解释
状态和遗忘门相乘是为了故意遗忘携带数据中的不相关信息。
输入和输入门都提供关于当前的信息,可以用来更新信息携带轨道。
但这种解释本质上是没有意义的。
3.LSTM数据流转原理图
这个图的原理和LSTM单元内部原理图相同,但是放在整个数据流中,使得对LSTM运作原理看起来更加的直观,具体见笔记中最下方的数据流转图。