一文看懂从 RNN 到 LSTM

数据分析挖掘与算法

共 1849字,需浏览 4分钟

 ·

2020-07-24 08:22


fc83699c77006e581c88d14a42e8ea5b.webp

来自 | 知乎  作者 | 陈诚链接 | https://zhuanlan.zhihu.com/p/32085405


ba4a9b83e260d812f604105dfe225543.webp
这是在看了台大李宏毅教授的深度学习视频之后的一点总结和感想。看完介绍的第一部分 RNN 尤其 LSTM 的介绍之后,整个人醍醐灌顶。本篇博客就是对视频的一些记录加上了一些个人的思考。


   0. 从 RNN 说起

循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN 就能够很好地解决这类问题。

   1. 普通 RNN

先简单介绍一下一般的 RNN。其主要形式如下图所示(图片均来自台大李宏毅教授的PPT):3ff20d91f2f1bc681910ba7bee40730c.webp这里:9093eb1befcce7da4a955840433b50e1.webp 为当前状态下数据的输入, 25b01e4121ad3d7d284cfdeaf8a82c5c.webp 表示接收到的上一个节点的输入。1f7221c4c7b60410f741fab0c087970e.webp 为当前节点状态下的输出,而 c88bfbda64f266f926dba51e261a69a2.webp 为传递到下一个节点的输出。通过上图的公式可以看到,输出 h' 与 x 和 h 的值都相关。而 y 则常常使用 h' 投入到一个线性层(主要是进行维度映射)然后使用softmax进行分类得到需要的数据。对这里的 如何通过 h' 计算得到往往看具体模型的使用方式。通过序列形式的输入,我们能够得到如下形式的 RNN。f52ca5966648c3d77e9bfae32c0e5018.webp


   2. LSTM

2.1 什么是 LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的 RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的 RNN,LSTM 能够在更长的序列中有更好的表现。LSTM 结构(图右)和普通 RNN 的主要输入输出区别如下所示。8c94fb9a59756a884d979449b3cb473d.webp相比RNN只有一个传递状态 95cc15b522848d152bb90a6ecb4f477a.webp ,LSTM有两个传输状态,一个 71b1059a102930b2fb09b97059061c30.webp (cell state),和一个 95cc15b522848d152bb90a6ecb4f477a.webp(hidden state)。(Tips:RNN 中的 95cc15b522848d152bb90a6ecb4f477a.webp 对于 LSTM 中的 71b1059a102930b2fb09b97059061c30.webp )其中对于传递下去的 71b1059a102930b2fb09b97059061c30.webp 改变得很慢,通常输出的 71b1059a102930b2fb09b97059061c30.webp 是上一个状态传过来的 f025ee5fbd7b124a35cfa47965cad4b1.webp 加上一些数值。而 95cc15b522848d152bb90a6ecb4f477a.webp 则在不同节点下往往会有很大的区别。

2.2 深入 LSTM 结构

下面具体对 LSTM 的内部结构来进行剖析。首先使用 LSTM 的当前输入 c9c36eecea01c7b914e502eae9c60d9a.webp 和上一个状态传递下来的 4830486f6f669a153430494ef4ec72df.webp 拼接训练得到四个状态。9893497efa72763f1fa9e5e179691b00.webp43327100db4e126d7fa76b1b9cc0157f.webp其中, 61ea6af5365e2c8b42643a429febc2cd.webp , 93a5796341ed7440c5065d1e9cbfa56f.webp ,0f8cc60244943be033c9368103e893b1.webp 是由拼接向量乘以权重矩阵之后,再通过一个 bd62a36f8d625e7eb16d3f6880d7ad05.webp 激活函数转换成0到1之间的数值,来作为一种门控状态。而 7f6cef486c7074ee48cecae54f6abc77.webp 则是将结果通过一个 34d950532c60cf7410931051843e60d6.webp 激活函数将转换成-1到1之间的值(这里使用 34d950532c60cf7410931051843e60d6.webp 是因为这里是将其做为输入数据,而不是门控信号)。

下面开始进一步介绍这四个状态在 LSTM 内部的使用。(敲黑板)

e90f44fc546ca93a80b7b2d8f2bf946f.webp97e78c5a8e3d2c0f783cf0af2cbc553c.webp 是 Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。 0065db13c3f6c4058c80573b67a96375.webp 则代表进行矩阵加法。
LSTM 内部主要有三个阶段:1. 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。具体来说是通过计算得到的 61ea6af5365e2c8b42643a429febc2cd.webp (f表示forget)来作为忘记门控,来控制上一个状态的 f025ee5fbd7b124a35cfa47965cad4b1.webp 哪些需要留哪些需要忘。2. 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 c9c36eecea01c7b914e502eae9c60d9a.webp 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 7f6cef486c7074ee48cecae54f6abc77.webp 表示。而选择的门控信号则是由 93a5796341ed7440c5065d1e9cbfa56f.webp (i 代表 information)来进行控制。
将上面两步得到的结果相加,即可得到传输给下一个状态的 71b1059a102930b2fb09b97059061c30.webp 。也就是上图中的第一个公式。
3. 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 0f8cc60244943be033c9368103e893b1.webp 来进行控制的。并且还对上一阶段得到的 e6a2bb12a92b29003fad6fe4eb11e13b.webp 进行了放缩(通过一个 tanh 激活函数进行变化)。与普通 RNN 类似,输出 609c51f1126980aa67fccc62c51e0104.webp 往往最终也是通过 95cc15b522848d152bb90a6ecb4f477a.webp 变化得到。


   3. 总结

以上,就是 LSTM 的内部结构。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的 RNN 那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和 LSTM 相当但参数更少的 GRU 来构建大训练量的模型。— 完 

猜你喜欢

浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报