LSTM及其激活函数理解

-------本文仅为学习笔记,不做任何商业用途-------

一、LSTM简介

    长短期记忆网络(LSTM)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题所设计出来的,可以解决RNN中的梯度消失和梯度爆炸的问题。
    长短期记忆网络由于其独特的设计结构适合处理和预测时间序列中间隔和延迟非常长的重要事件。相比于传统的RNN,LSTM的参数会随着输入序列而改变,同时会选择记住和遗忘输入序列里的相关信息。LSTM可以用于不分段的连续手写识别上,语音识别,自然语言处理以及计算机视觉领域。在最近阅读的一篇关于计算机视觉中human action recognition的论文中,就依托于LSTM方法对视频流里每帧图像动作进行了提取,得到了很不错的结果。

二、LSTM结构介绍

2.1从LSTM整体出发

    LSTM是一种特殊的RNN网络,所有的循环神经网络都具有神经网络的重复模块链的形式。在RNN中,每个模块内只包含了单个tanh层,但在LSTM的链式结构中,每个模块内包含了四个网络层,具体的对比图如下所示。

    之后,本文结合相关资料,对LSTM的每一个网络层进行详细介绍。

2.2 “LSTM细胞”介绍

    根据前面的介绍,LSTM本质上还是一个RNN循环神经网络,但它具有内部的LSTM细胞循环(自环),这个细胞是LSTM的核心所在,用贯穿细胞的水平线表示。
Alt
    LSTM网络通过一种被称为门的结构对细胞的状态进行删除或添加信息,而在一个LSTM里包含三个门控制细胞状态,其中包括遗忘门、输入门和输出门。值得一提的是,LSTM中贯穿细胞的水平线 C t C_t Ct代表了其中的长时记忆,下面的 h t h_t ht代表了工作记忆或短时记忆

2.3逐步理解LSTM

2.3.1遗忘门

    首先,LSTM的首要工作就是决定细胞状态需要丢弃的信息,这也就是遗忘门的作用。因为在一个序列数据里,不同的数据随着time_step的变化,前后侧重点会有所变化,忘记不需要及不重要的信息,这也是遗忘门产生的原因。
Alt
    根据上图,首要的工作是要对输入数据 h t − 1 h_{t-1} ht1 x t x_t xt进行拼接操作,比如说 x t x_t xt是15位的向量, h t − 1 h_{t-1} ht1是60位的向量,那么拼接起来就是75位的向量进行输入。之后,通过权重矩阵与 W f W_f Wf相乘并加上偏置项 b f b_f bf通过sigmoid单元进行处理。

    为什么要用sigmoid函数进行激活呢?

    对于sigmoid函数来说,它是平滑的阶梯函数,可导;它可以将任何值转化为0~1之间,用于二分类。其公式和图像如下所示(红色为原函数、蓝色为导函数):
Alt
Alt
    可以看到,sigmoid函数的输出为0-1的值,这代表具体有多少的信息能够流过sigmoid层,0表示不能通过(丢弃),1表示能通过(保留)。

2.3.2输入门

    在处理完哪些信息需要删除后,就到了输入门的操作部分。首先,需要考虑给细胞新增添的信息(即需要给细胞更新什么)。它利用 h t − 1 h_{t-1} ht1 x t x_t xt通过一个tanh层得到新的候选细胞信息 C t ~ \widetilde {C_t} Ct ,这些新的信息会被更新到细胞信息中,如下图所示。
Alt
    在进行完上述步骤后,需要对旧的细胞信息 C t − 1 C_{t-1} Ct1进行更新完善,变为新的细胞信息 C t C_t Ct。而更新的原则则是将通过遗忘门的旧细胞信息与通过输入门的候选细胞信息 C t ~ \widetilde {C_t} Ct 相结合得到新的细胞信息 C t C_t Ct,具体操作步骤如下所示。
Alt

    为什么要用tanh函数进行激活呢?

    对于tanh函数(即双曲正切)来说,它类似于幅度增大的sigmoid,输出范围为[-1,1],且导函数的取值范围为0-1之间,由于sigmoid的0到1/4,在一定程度上减轻了梯度消失的问题;同时,它需要做对数据的处理,不决定取舍,通过扩大输出范围进而决定输出放大或缩小。当然对于有更好效果,更便于计算的激活函数,也可以使用。其公式和图像如下所示(红色为原函数、蓝色为导函数):
Alt
Alt

2.3.3输出门

    在更新完细胞信息后,需要根据输入的 h t − 1 h_{t-1} ht1 x t x_t xt来判断需要输出细胞的哪些状态特征,而这就要输出门作为保安进行判断。将 h t − 1 h_{t-1} ht1 x t x_t xt经过输出门的sigmoid激活函数得到判断条件(即哪些细胞信息需要输出),然后将细胞状态信息 C t C_t Ct经过tanh层得到范围为[-1,1]的向量,然后与输出门得到的判断条件进行相乘得到该RNN模块(time_step=t)的输出,具体步骤如下图。
Alt

三、LSTM图示理解

    在查阅了相关资料后,发现了一副动图可以很好的表征和解释RNN,帮助更好的理解,这里引用其动图来表示RNN的工作原理。
    作者:刘大力
    链接:https://www.zhihu.com/question/41949741/answer/385019773
    来源:知乎

四、总结

    通过查阅相关资料,本文从RNN入手,对LSTM与RNN进行了对比,并对LSTM进行了详细的拆分介绍,充分理解了LSTM的相关结构原理,而且其对有长时间记忆需求的任务来说十分好用,当然对于其变形的其他结构网络也有很多,将在后面对用过的进行介绍。

Reference

[1]https://baike.baidu.com/item/%E9%95%BF%E7%9F%AD%E6%9C%9F%E8%AE%B0%E5%BF%86%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/17541107?fromtitle=LSTM&fromid=17541102&fr=aladdin
[2]https://www.jianshu.com/p/95d5c461924c
[3]https://www.zhihu.com/question/41949741
[4]https://www.jianshu.com/p/857d5859d2cc
[5]https://www.zhihu.com/question/61265076

注:本文所引用的图都已在Reference中进行说明。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐