0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# LSTM

在上一节里边,我们已经说到了如何使用门控单元对某些无关内容的忽略。也提到了其实首先是出现了LSTM,后来才出现了GRU,但是因为GRU更简单。所以现在很多都会先讲GRU。上一节已经讲完了GRU那这一节就来讲一讲LSTM。

Long Short-Term Memory | MIT Press Journals & Magazine | IEEE Xplore

长短期存储器(long short-term memory, LSTM) 它有许多与门控循环单元一样的属性。长短期记忆网络的设计比门控循环单元稍微复杂一些,却比门控循环单元早诞生了近20年。

1 输入门、忘记门、输出门

image.png

和GRU有两个门,LSTM有三个门,它分别是输入门、忘记门和输出门。

假设有 $h$ 个隐藏单元,批量大小为 $n$,输入数为 $d$。因此,输入为 $\mathbf{X}t \in \mathbb{R}^{n \times d}$,前一时间步的隐藏状态为 $\mathbf{H}{t-1} \in \mathbb{R}^{n \times h}$。相应地,时间步 $t$ 的门被定义如下:输入门是 $\mathbf{I}_t \in \mathbb{R}^{n \times h}$,遗忘门是 $\mathbf{F}_t \in \mathbb{R}^{n \times h}$,输出门是 $\mathbf{O}_t \in \mathbb{R}^{n \times h}$。

公式如下:

$$
\begin{aligned}
&\mathbf{I}_t = \sigma(\mathbf{X}t \mathbf{W}{xi} + \mathbf{H}{t-1} \mathbf{W}{hi} + \mathbf{b}_i),\
&\mathbf{F}_t = \sigma(\mathbf{X}t \mathbf{W}{xf} + \mathbf{H}{t-1} \mathbf{W}{hf} + \mathbf{b}_f),\
&\mathbf{O}_t = \sigma(\mathbf{X}t \mathbf{W}{xo} + \mathbf{H}{t-1} \mathbf{W}{ho} + \mathbf{b}_o),
\end{aligned}
$$

  • 其中 $\mathbf{W}{xi}, \mathbf{W}{xf}, \mathbf{W}{xo} \in \mathbb{R}^{d \times h}$ 和 $\mathbf{W}{hi}, \mathbf{W}{hf}, \mathbf{W}{ho} \in \mathbb{R}^{h \times h}$ 是权重参数
  • $\mathbf{b}_i, \mathbf{b}_f, \mathbf{b}_o \in \mathbb{R}^{1 \times h}$ 是偏置参数。
  • 激活函数依旧使用sigmoid

当然也可以合并起来写:

$$
\begin{aligned}
&\mathbf{I}_t = \sigma([\mathbf{X}t ,\mathbf{H}{t-1}] \mathbf{W}_{i} + \mathbf{b}_i),\
&\mathbf{F}_t = \sigma([\mathbf{X}t ,\mathbf{H}{t-1}] \mathbf{W}_{f} + \mathbf{b}_f),\
&\mathbf{O}_t = \sigma([\mathbf{X}t ,\mathbf{H}{t-1}] \mathbf{W}_{o} + \mathbf{b}_o),
\end{aligned}
$$

2 候选记忆单元

长短期记忆网络引入了存储记忆单元(memory cell),或简称为单元(cell)。有些文献认为存储单元是隐藏状态的一种特殊类型。

image.png
然后是候选记忆单元的计算。LSTM中候选记忆单元是直接进行计算的。这一点和GRU不太相同。GRU这一步是结合遗忘门来进行候选隐藏状态的计算。

候选记忆单元就是将本步的输入和上一步的隐状态进行计算。

候选记忆单元公式如下:

$$
\tilde{\mathbf{C}}_t = \text{tanh}(\mathbf{X}t \mathbf{W}{xc} + \mathbf{H}{t-1} \mathbf{W}{hc} + \mathbf{b}_c)
$$

  • $\mathbf{W}{xc} \in \mathbb{R}^{d \times h}$ 和 $\mathbf{W}{hc} \in \mathbb{R}^{h \times h}$ 是权重参数。
  • $\mathbf{b}_c \in \mathbb{R}^{1 \times h}$ 是偏置参数。
  • 候选记忆单元使用的激活函数是tanh。

3 记忆单元

先来回顾一下在GRU当中,我们使用重置门来决定是否忽略上一步的隐藏状态。使用更新门来计算新的隐藏状态。而更新门的作用是决定使用多少本步的候选隐藏状态和上一步的隐藏状态。

类似地,在长短期记忆网络中,也有两个门用于这样的目的:输入门 $\mathbf{I}_t$ 控制采用多少来自 $\tilde{\mathbf{C}}_t$ 的新数据,而遗忘门 $\mathbf{F}t$ 控制保留了多少旧记忆单元 $\mathbf{C}{t-1} \in \mathbb{R}^{n \times h}$ 的内容。

image.png
公式如下:

$$
\mathbf{C}_t = \mathbf{F}t \odot \mathbf{C}{t-1} + \mathbf{I}_t \odot \tilde{\mathbf{C}}_t
$$

因为输入门、忘记门他们都使用的sigmoid作为激活函数。因此它们两个的值都是趋近于0或者近于1的。

  • 如果遗忘门为 $1$ 且输入门为 $0$,则过去的记忆单元 $\mathbf{C}_{t-1}$ 将随时间被保存并传递到当前时间步。
  • 如果遗忘门为 $0$ 且输入门为 $1$,则过去的记忆单元 $\mathbf{C}_{t-1}$ 被丢弃掉,仅使用当前的候选记忆单元$\tilde{\mathbf{C}}_t$。

引入这种设计是为了缓解梯度消失问题,并更好地捕获序列中的长距离依赖关系。

4 隐藏单元

输入门遗忘门都介绍了,输出门的作用就在隐藏单元计算这一步。

image.png.

公式如下:

$$
\mathbf{H}_t = \mathbf{O}_t \odot \tanh(\mathbf{C}_t)
$$

  • 输出门接近 $1$,我们就能够把我们的记忆单元信息传递下去。
  • 输出门接近 $0$,我们只保留存储单元内的所有信息。
举报

相关推荐

0 条评论