机器学习: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乘积)运算。这一段建议结合笔记中画的图来看。

遗忘门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)对应判断输入的状态机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)的价值,输入门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)对应判断输入数值机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)的价值,输出门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)用于判断输出数据机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)的价值。“门”通过和数据做⊗(Kronecker乘积)运算的方式,对数据进行过滤。

状态值机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)和遗忘门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)做⊗(Kronecker乘积)运算,得:机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5) 

输入值i与输入门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)做⊗(Kronecker乘积)运算,得:机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)

二者进行“异或”⊕运算,得新的状态值:机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)

新状态机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)和输出门机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)做⊗(Kronecker乘积)运算,得到输出机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)

其中新状态机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)向后传递,作为下一次迭代运算的输入状态,输出机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)向后传递,作为下一次迭代运算的输入值,一次迭代过程就结束了。为了简洁,此处省略了偏置向量b

这就是LSTM网络单元内部发生的所有事情。

(3)更哲学的解释

状态和遗忘门相乘是为了故意遗忘携带数据中的不相关信息。

输入和输入门都提供关于当前的信息,可以用来更新信息携带轨道。

但这种解释本质上是没有意义的。

3.LSTM数据流转原理图

这个图的原理和LSTM单元内部原理图相同,但是放在整个数据流中,使得对LSTM运作原理看起来更加的直观,具体见笔记中最下方的数据流转图。
 

机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)

机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)

机器学习:LSTM网络单元内部原理深度解析—— 《Python深度学习》读书笔记(5)