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

版权声明:随便转载,互相学习,注明来源即可,不想注明也没事 https://blog.csdn.net/yangwohenmai1/article/details/89060777

本系列文章是对《Python深度学习》这本书阅读过程中,提炼出来的读书笔记。

《Python深度学习》这本书的作者是Kreas之父,也是Tensorflow框架的贡献者,本书的特点是,作者从一个编程学习者的角度来描述机器学习,而不是堆上来复杂的数学公式和函数变换。所有的数学理论或者公式,都用程序的方式描述出来,对于没有数学功底的开发者来说是一个很大的福利。不过当然,后期还是离不开数学,但作为入门来说这本书就相当的好了。

本章讲的是循环神经网络的变种LSTM等,这也是书中不好理解的部分,作者也没有很清晰的描述出LSTM原理。从作者对LSTM所处理的问题来看,我认为作者也并没有真正的了解LSTM原理和应用场景,文中的笔记一部分来自《TensorFlow实战Google深度学习框架》这本书,一部分来自网上的资料:

https://blog.csdn.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单元中设计三个不同的变幻,

遗忘门f对应判断输入的状态Ct-1的价值,输入门z对应判断输入数值i的价值,输出门o用于判断输出数据Ct的价值。“门”通过和数据做⊗(Kronecker乘积)的方式对数据进行过滤。

状态值Ct-1和遗忘门f做⊗(Kronecker乘积),得:Ct-1 ⊗ f

输入值i与输入门z做⊗(Kronecker乘积),得:i ⊗ z

二者异或得新的状态值:Ct = (Ct ⊗ f ) ⊕ (i ⊗ z)

新状态Ct+1和输出门o做⊗(Kronecker乘积),得到输出:ht = o ⊗ Ct = o ⊗ (Ct-1 ⊗ f ) ⊕ (i ⊗ z)

为了简洁,此处省略了偏置向量b

(3)更哲学的解释

状态和遗忘门相乘是为了故意遗忘携带数据中的不相关信息,输入和输入门都提供关于当前的信息,可以用来更新信息携带轨道。但这种解释本质上是没有意义的。

3.LSTM数据流转原理图

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

 

 

猜你喜欢

转载自blog.csdn.net/yangwohenmai1/article/details/89060777