AI光影社
AI光影社
Published on 2025-03-07 / 5 Visits

马老师教AI:第一篇 神经网络是如何实现的(九)

一篇 神经网络是如何实现的(九)

清华大学计算机系 马少平

第九节:长短期记忆网络

艾博士:我们到目前介绍的循环神经网络中,每个子网络还比较简单,存在不少问题。比如当句子比较长时,也存在类似梯度消失的问题,只是这种梯度消失不是沿着纵向发生的,而是沿着横向产生。

小明不解地问:横向产生是什么意思呢?

艾博士:我们以图1.51所示的句子情感分类为例说明。这种方法其实是先将句子编码为一个向量,再利用该向量进行情感分类。这样在用BP算法求解时,梯度是从最后的输出反传到句子的最后一个词,再到倒数第二个词……,这样一个词一个词地最后传到第一个词。这样的反传过程中,和层数比较多的神经网络一样,可能会造成梯度消失问题。

小明:原来这样也会产生梯度消失问题。

艾博士:除了梯度消失问题外,还有其他问题。对不同的任务,一句话中不同的词所起的作用是不一样的。比如对于情感分类问题,“我非常喜欢看这部城市题材电影”这句话中,“非常”、“喜欢”的作用就比较大,“这部”作用就比较小,“城市”、“题材”也有些作用,但远没有“喜欢”的作用大。但是如果是对于内容分类任务来说,“看”、“电影”的作用可能就比较大,而“喜欢”可能作用就小得多。所以对于相同的一句话,对于不同的任务,句中每个词的作用是不一样的,在网络中应该尽可能体现出这种不同。

小明:艾博士您说的很对,确实应该这样。

艾博士:为了解决普通循环神经网络存在的这种不足,研究者提出了改进方案,长短期记忆网络就是其中的一种。图1.60给出了一个长短期记忆网络模块示意图,简称为LSTM(Long Short-Term Memory),该模块相当于普通循环神经网络中的子网络。

图1.60 长短期记忆网络模块示意图

小明:看起来这个模块挺复杂的,还是请艾博士解释一下吧。

艾博士:在LSTM中,最主要的是引入了遗忘门、输入门和输出门3个门。

小明:门?什么是门呢?

图1.61 “门”的示意图

艾博士:所谓“门”其实就是一个只有输入层和输出层的神经网络,输出层连接sigmoid激活函数,每个神经元的输出为0、1之间的一个值,用于对某些信息进行选择。如图1.61(a)给出了一个门的示意图,图1.61(b)是它的简化图,其中虚线框出部分就是一个“门”,输入为x=[x1,x2,...,xn]  ,输出为 g=[g1,g2,...,gm] ,由于在输出层使用了sigmoid激活函数,所以输出层的每个神经元的输出值gi  都满足0<=gi<=1  。门是一种可选地让信息通过的方式,如果用  gi 去乘以某个量,则实现了对该量有选择地通过的目的。当 gi=1 时,则该量全部通过,  gi=0时,则该量被阻挡,而当 gi 介于0和1之间时,则该量部分通过,这也是“门”名称的由来。图1.61(a)中最上边 s=[s1,s2,...,sm] 就是被门控制的向量,其每个元素 si 与 gi 相乘(图中“⊗”表示相乘),根据gi  的大小对 si 进行选择,选择后的结果形成向量 :

小明:我明白了什么是门,以及门的作用。

图1.62 LSTM中的状态s

艾博士:我们再回过头来看图1.60所示的LSTM模块,图中  是模块的输出,与图1.53所示的普通循环神经网络中的 h^(t) 含义是一样的。与普通循环神经网络不同的是多了一个表示状态的向量,如图1.62红色部分所示。引入状态是为了信息在横向连接的各模块中畅通,其作用是防止信息被淹没和梯度消失现象。但是状态并不是直接传递到下一个模块的,而是经过了一个被称作遗忘门的选择(图中红色部分的“⊗”)以及添加了与当前输入有关的信息后(图中红色部分的“⊕”)再传递到下一个模块,其作用就是有选择地对之前的状态信息加以利用,并同时叠加上当前输入的信息。

小明:对状态的选择是不是就是通过门进行的?

图1.63 LSTM中的遗忘门

艾博士:小明你真聪明,刚学的就用上了,真是学以致用。你看图1.63中的红色部分就是LSTM的遗忘门,输入是前一个模块的输出  与当前输入  的拼接,输出是  。如同前面介绍过的,遗忘门就是一个典型的只有输入层和输出层的全连接神经网络,只是输入由x^(t)  和  h^(t-1)两部分组成,相当于两个向量拼接成一个长度为n+m的向量共同组成输入。图1.64给出了遗忘门的示意图。

图1.64 遗忘门示意图

遗忘门的具体计算如下:

  

其中  为前一个模块的输出第j个分量  到遗忘门输出层第i个神经元的连接权重,  为当前输入第j个分量  到遗忘门输出层第i个神经元的连接权重,  为遗忘门输出层第i个神经元的偏置, σ 为sigmoid激活函数。

小明有些疑惑地问:为什么叫遗忘门呢?

艾博士说:遗忘门的作用是对前一个状态s^(t-1)  进行选择,重要的信息选择通过,非重要的信息选择不通过,也就是“遗忘”,所以叫遗忘门。s^(t-1)  经选择后再加上当前输入信息有关的内容,成为该模块的状态输出 s^(t) 。具体的计算方法等介绍完输入信息的处理后再详细介绍。

艾博士继续讲解说:LSTM模块的第二个门是输入门,是对当前输入信息进行选择,如图1.65所示。输入门的结构与遗忘门基本是一样的,其输入也是前一个模块的输出  与当前输入  的拼接,输出是  。输入门的具体计算如下:

  

其中  为前一个模块的输出第j个分量  到输入门输出层第i个神经元的连接权重,  为当前输入第j个分量  到输入门输出层第i个神经元的连接权重,   为输入门输出层第i个神经元的偏置,  为sigmoid激活函数。

图1.65 LSTM中的输入门

图1.66 LSTM中输入处理单元示意图

小明:输入门控制的是输入相关的信息,LSTM是如何处理输入相关的信息呢?

艾博士:图1.66给出了LSTM处理输入信息的示意图,为了表述方便我们称为输入处理单元。从图中可以看出,输入处理单元与输入门也基本一样,只是输出的激活函数换成了双曲正切(tanh),输入也是前一个模块的输出  与当前输入  的拼接,输出是  。这里的  i^(t)就是对输入信息处理的结果,每一维  是一个正负1之间的数值,然后用输入门与其按位相乘,实现对输入信息的选择。具体计算如下:

  

其中  为前一个模块的输出第j个分量  到输入处理单元输出层第k个神经元的连接权重,  为当前输入第j个分量  到输入处理单元输出层第k个神经元的连接权重,   为输入处理单元输出层第k个神经元的偏置,激活函数为tanh激活函数。

图1.67 新状态获取示意图

有了遗忘门和输入门之后,就可以获得新的状态信息了,图1.67给出了示意图。简单说就是用遗忘门对前一个状态  s^(t-1)进行选择,用输入门对当前输入相关信息i^(t) 进行选择,然后二者相加得到新的状态  。具体计算方法如下:

  

图1.68 LSTM中的输出门

LSTM模块的第三个门是输出门,顾名思义是对模块的输出信息进行选择,如图1.68所示。输出门的结构同遗忘门基本也是一样的,其输入是前一个模块的输出  与当前输入  的拼接,输出是  。输入门的具体计算如下:

图1.69 LSTM的输出处理单元

其中  为前一个模块的输出第j个分量  到输出门输出层第i个神经元的连接权重,  为当前输入第j个分量  到输出门输出层第i个神经元的连接权重,  为输出门输出层第i个神经元的偏置,σ  为sigmoid激活函数。

小明问道:输出门是不是和输入门类似,是控制模块的输出信息呢?

艾博士回答说:是这样的。图1.69给出了LSTM处理输出信息的示意图。同样,为了表述方便我们称为输出处理单元。但是与输入处理单元不同的是,输出处理单元没有参数,只是简单地用一个tanh激活函数对状态  进行转换,然后用输出门对其进行选择,得到模块的输出  ,如图1.70所示。具体计算如下:

  

图1.70 LSTM模块的输出

艾博士总结说:至此我们介绍完了LSTM,与一般的循环神经网络相比,主要引入了一个状态s,用于传递不同模块之间的信息,通过引入遗忘门、输入门和输出门三个门,对状态、输入和输出进行有针对性的选择。三个门结构上是完全一样的,输入也一样,但是各自有自己的参数,也就是权重,从而实现对不同信息的选择。

需要强调的是,LSTM是循环神经网络的一种具体实现,与一般的循环神经网络中子网络是共用的一样,LSTM模块也是共用的,并不是有多个模块横向串联在一起,只是不同的时刻t输入信息不一样,输出也不同。当LSTM处理完一个序列后,最后的输出就是对该序列的一个表达。

另外,LSTM还有多个变种,其中最常用的一个简化版是GRU,我们就不一一介绍了,有兴趣的读者请参阅有关资料。

小明听完了艾博士的讲解说道:LSTM看起来有点复杂,但是用的都是已有的知识,您这样分解讲解后,就清楚多了。

艾博士接着说:是的,每一部分的组成和功能都很清晰。

小明:但是这样的LSTM应该怎么用呢?

艾博士:与前面介绍过的普通循环神经网络用法一样,事实上,前面说过的所有循环神经网络中的子网络,都可以用LSTM模块代替。模块中的权重等参数也是通过BP算法进行学习的。

最后作为的例子,我们给出一个用LSTM实现的机器翻译示意图,如1.71所示,输入是中文“我是一个学生”,输出是英文翻译“I am a student”,其中表示一句话的结束。

图1.71 用LSTM实现的机器翻译示意图

图中分为编码和解码两部分,绿色虚线框出的是编码部分,输入是一句中文,句中每个词均用词向量表示,经过LSTM处理后,得到这句话的向量表示。黄色虚线框出的是解码部分,将编码后的中文作为输入,经LSTM解码后得到对应的英文。

小明看着图示,忍不住插嘴道:这个就跟图1.59所示的序列到序列的循环神经网络是一样的吧?只是用LSTM模块代替了其中的子网络。

艾博士回答说:完全正确,就是一样的。就像刚才讲过的一样,LSTM是循环神经网络的一种,前面介绍过的汉语分词、看图说话等中用到的循环神经网络,都可以用LSTM替换。

小明读书笔记

长短期记忆网络LSTM是循环神经网络的一种具体实现,主要是为了解决长序列输入时遇到的梯度消失问题。与一般的循环神经网络相比,LSTM模块引入了一个保持信息传递的状态量s。LSTM模块主要包含了三个处理过程:

  • 遗忘过程:通过遗忘门对前一个状态信息进行选择,简单说就是:保留重要的信息,遗忘不重要的信息。

  •  记忆阶段:通过输入门对当前的输入信息进行有选择地记忆,也就是说,着重记忆输入信息中有用的信息,减少不重要信息的记忆。选择后的输入信息叠加到状态信息中

  • 输出阶段:通过输出门对经过tanh函数处理后的状态信息进行选择,得到模块的输出。

遗忘门、输入门和输出门三个门的结构是完全一样的,只是分别拥有自己的参数即权重。三个门的输入都是前一个模块的输出和当前输入的拼接,输出是0、1之间的数值,分别构成了不同的选择信号,用于对不同信息的选择。

未完待续