机器学习实战(第二版)读书笔记(2)—— LSTM&GRU

刚接触深度学习半年的时间,这期间有专门去学习LSTM ,这几天读机器学习实战这本书的时候又遇到了,感觉写的挺好的,所以准备结合本书写一下总结方便日后回顾。如有错误,欢迎批评指正。

一、LSTM

优势:可在一定程度上解决RNN短期记忆的问题。

注:由于数据在遍历RNN时会经过转换,因此在每个时间步长都会丢失一些信息。一段时间后,RNN的状态几乎没有任何最初输入的痕迹。

1.1 LSTM神经元

机器学习实战(第二版)读书笔记(2)—— LSTM&GRU_第1张图片 图1:LSTM单元

如上图所示LSTM神经元存在两个状态向量:h(t)和c(t)(可将h(t)视为短期状态,c(t)视为长期状态) 首先,将当前输入向量x(t)和先前的短期状态h(t-1)馈入四个不同的全连接层(FC)。它们都有不同的目的:

  • 主要层是输出g(t)的层:它通常的作用是分析当前输入x(t)和先前(短期)状态 h(t-1),得到本时间步的信息。

  • 遗忘门(由f(t)控制):控制长期状态的哪些部分应当被删除。

  • 输入门(由i(t)控制):控制应将g(t)的哪些部分添加到长期状态。

  • 输出门(由o(t)控制):控制应在此时间步长读取长期状态的哪些部分并输出 到h(t)和y(t)。

如图1,LSTM神经元运用了三个sigmoid激活函数和一个tanh激活函数,

  • Tanh 作用在于帮助调节流经网络的值,使得数值始终限制在 -1 和 1 之间。
  • Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到0~1 这样的设置有助于更新或忘记信息,可将其理解为比例(任何数乘以 0 都得 0,这部分信息就会剔除掉;同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来)因记忆能力有限,记住重要的,忘记不重要的。

例子:以输入门为例,首先输入x(t)和先前(短期)状态 h(t-1),得到本时间步的信息向量g(t) = (g1(t),g2(t),g3(t)……gn(t))(其中n个神经元的个数,g1(t)取值范围为(-1,1)),然后与向量i(t)=(i1(t),i2(t),i3(t)……in(t))(ii(t)取值范围为(0,1))对应元素相乘,得到向量(g1(t)*i1(t), g2(t)*i2(t)……gn(t)*in(t)),即本时间步有用信息,然后把他加上长期记忆c(t-1)中进行保存。

总结:LSM关键的思想是网络可以学习长期状态下存储的内容丢弃的内容以及从中读取的内容。当长期状态c(t-1)从左到右遍历网络时,可以看到它首先经过一个遗 忘门,丢掉了一些记忆,然后通过加法操作添加了一些新的记忆(由输入门选择的记忆)。结果c(t)直接送出来,无须任何进一步的转换。因此,在每个时间步长中,都会 丢掉一些记忆,并添加一些记忆。此外,在加法运算之后,长期状态被复制并通过tanh函数传输,然后结果被输出门滤波。这将产生短期状态h(t)(等于该时间步长的单元输出 y(t))。

1.2 LSTM计算公式

  

Wxi、Wxf、Wxo、Wxg是四层中的每层与输入向量x(t)连接的权重矩阵。

Whi、Whf、Who和Whg是四层中的每层与先前的短期状态h(t-1)连接的权重矩阵。

bi、bf、bo和bg是四层中每层的偏置项

1.3简单代码实现

如下所示:


   model = keras.models.Sequential([
       keras.layers.LSTM(20, return_sequences=True, input_shape=[None, 1]),
       keras.layers.LSTM(20, return_sequences=True),
       keras.layers.TimeDistributed(keras.layers.Dense(10))
])

二、GRU

2.1 GRU神经元

机器学习实战(第二版)读书笔记(2)—— LSTM&GRU_第2张图片 图2:GRU单元

GRU单元是LSTM单元的简化版,并且保留遗忘门(保留有用记忆)和输入门(学习新知识)。

主要简化如下:

  • 两个状态向量合并为一个向量h(t)。

  • 单个门控制器z(t)控制遗忘门和输入门。

  • 没有输出门(在每个时间步长都输出完整的状态向量)。

此外,GRU引入门控制器r(t)控制先前状态的哪一部分将显示给主要层(g(t))。

2.2 计算公式

机器学习实战(第二版)读书笔记(2)—— LSTM&GRU_第3张图片

三、不足点

LSTM和GRU尽管它们可以处理比简单RNN更长的序列,但它们的短期记忆仍然非常有限,而且很难学习100个或更多时间步长序列中的长期模式,解决这个问题的一种方法是缩短输入序列,例如使用一维卷积层(请看读书笔记(3))。

你可能感兴趣的:(机器学习,lstm,gru)