这是在看了台大李宏毅教授的课程之后的一点总结和感想。本文中所使用的图片均来自于李宏毅教授的课程ppt。本篇博客就是对视频的一些记录加上了一些个人的思考。
一、什么是LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
二、单个LSTM单元的结构
(1) LSTM单元由四个输入和一个输出组成,输入分别是图中的Z、Zi、Zf、Zo,而输出是图中对应的a。其中输入Zi(输入门)、Zf(遗忘门)、Zo(输出门)分别对应LSTM的三个门。
(2)Z、Zi、Zf、Zo 的由来:首先将当前的输入向量input与上一轮得到的输出向量a拼接得到一个较长的向量[input,a],暂且称为向量X;将拼接后的向量X经过四次不同的线性变换后即可得到向量Z、Zi、Zf、Zo,其中四次线性变换所使用的参数是网络中带训练的参数。
(3)Z、Zi、Zf、Zo的维数是一样的,Zf 的每一维分别对应一个具体的LSTM单元遗忘门的输入,Zi 的每一维分别对应一个具体的LSTM单元输入们的输入(Z和Zo同理),因此Z、Zi、Zf、Zo的维数和LSTM单元的个数相同。
(4)LSTM单元中有一个memory cell,该部件主要是存储此刻的输入input之前的所有输入的综合信息
三、LSTM的数据处理流程
图中的Xt对应t时刻的输入,ht-1对应t-1时刻的输出。假设神经网络的该层是由hidden_size个LSTM排列形成的;该层的输入X的维数是input_size;ht-1是该层之前时刻的输出,故维数和LSTM的个数相同,也是hidden_size维;Ct-1的维数也和LSTM的个数相同是hidden_size维。
LSTM的数据处理流程如下:
(1)ht-1和Xt拼接形成一个维数是hidden_size+input_size的向量,暂且称为向量IN
(2)向量IN经过四次线性变换后的到Z、Zi、Zf、Zo(即向量IN右乘四个不同的矩阵,即向量IN经过四个不同的全连接层)。参与四次线性变化的参数是一个二维矩阵,形状是[hidden_size+input_size, hidden_size]。得到的四个向量的维数是hidden_size维。
(3)使向量Zi、Zf、Zo通过sigmoid函数激活,使用sigmoid激活后值会处于0~1之间;使向量Z通过tanh函数激活。
(4)将激活后的Zi与Z进行按位置计算的乘法,由于Zi的值都介于0~1之间,因此得到的结果记为It,可以理解为允许多少输入进入LSTM单元。
(5)将激活后的Zf与Ct-1进行按位置计算的乘法,结果记为Ct-1_temp,该结果可以理解为之前的信息我该保留多少。
(6)将向量Ct-1_temp与向量It进行按位置的加法,形成新的Ct。
(7)将Ct通过tanh函数激活,将激活后的结果与Zo进行按位置操作的乘法形成ht