LSTM及其激活函数理解

一、LSTM简介

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

二、LSTM结构介绍

2.1从LSTM整体出发

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



LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数

LSTM改激活函数 lstm用什么激活函数_循环神经网络_02

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

2.2 “LSTM细胞”介绍

    根据前面的介绍,LSTM本质上还是一个RNN循环神经网络,但它具有内部的LSTM细胞循环(自环),这个细胞是LSTM的核心所在,用贯穿细胞的水平线表示。

LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_03


    LSTM网络通过一种被称为门的结构对细胞的状态进行删除或添加信息,而在一个LSTM里包含三个门控制细胞状态,其中包括遗忘门、输入门和输出门。值得一提的是,LSTM中贯穿细胞的水平线LSTM改激活函数 lstm用什么激活函数_循环神经网络_04代表了其中的长时记忆,下面的LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_05代表了工作记忆或短时记忆

2.3逐步理解LSTM

2.3.1遗忘门

    首先,LSTM的首要工作就是决定细胞状态需要丢弃的信息,这也就是遗忘门的作用。因为在一个序列数据里,不同的数据随着time_step的变化,前后侧重点会有所变化,忘记不需要及不重要的信息,这也是遗忘门产生的原因。

LSTM改激活函数 lstm用什么激活函数_lstm_06


    根据上图,首要的工作是要对输入数据LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_07LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_08进行拼接操作,比如说LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_08是15位的向量,LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_07是60位的向量,那么拼接起来就是75位的向量进行输入。之后,通过权重矩阵与LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_11相乘并加上偏置项LSTM改激活函数 lstm用什么激活函数_循环神经网络_12通过sigmoid单元进行处理。

    对于sigmoid函数来说,它是平滑的阶梯函数,可导;它可以将任何值转化为0~1之间,用于二分类。其公式和图像如下所示(红色为原函数、蓝色为导函数):

LSTM改激活函数 lstm用什么激活函数_激活函数_13


LSTM改激活函数 lstm用什么激活函数_神经网络_14


    可以看到,sigmoid函数的输出为0-1的值,这代表具体有多少的信息能够流过sigmoid层,0表示不能通过(丢弃),1表示能通过(保留)。

2.3.2输入门

LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_07LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_08通过一个tanh层得到新的候选细胞信息LSTM改激活函数 lstm用什么激活函数_神经网络_17,这些新的信息会被更新到细胞信息中,如下图所示。

LSTM改激活函数 lstm用什么激活函数_循环神经网络_18


    在进行完上述步骤后,需要对旧的细胞信息LSTM改激活函数 lstm用什么激活函数_激活函数_19进行更新完善,变为新的细胞信息LSTM改激活函数 lstm用什么激活函数_循环神经网络_04。而更新的原则则是将通过遗忘门的旧细胞信息与通过输入门的候选细胞信息LSTM改激活函数 lstm用什么激活函数_神经网络_17相结合得到新的细胞信息LSTM改激活函数 lstm用什么激活函数_循环神经网络_04,具体操作步骤如下所示。

LSTM改激活函数 lstm用什么激活函数_lstm_23

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

LSTM改激活函数 lstm用什么激活函数_神经网络_24


LSTM改激活函数 lstm用什么激活函数_循环神经网络_25

2.3.3输出门

LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_07LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_08来判断需要输出细胞的哪些状态特征,而这就要输出门作为保安进行判断。将LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_07LSTM改激活函数 lstm用什么激活函数_LSTM改激活函数_08经过输出门的sigmoid激活函数得到判断条件(即哪些细胞信息需要输出),然后将细胞状态信息LSTM改激活函数 lstm用什么激活函数_循环神经网络_04经过tanh层得到范围为[-1,1]的向量,然后与输出门得到的判断条件进行相乘得到该RNN模块(time_step=t)的输出,具体步骤如下图。

LSTM改激活函数 lstm用什么激活函数_神经网络_31

三、LSTM图示理解

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


LSTM改激活函数 lstm用什么激活函数_激活函数_32


四、总结

    通过查阅相关资料,本文从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