LSTM 单元的理解

从RNN说起

所谓的RNN就是想要记住一些过去的信息,所以它具有环(loops)的形式,如下所示 LSTM 单元的理解 上面的模块A 的输入为xt ,输出为ht  ,记忆体现在它将当前步的信息又送入下一步中,如果我们沿时间轴来看,RNN长这样 LSTM 单元的理解 这一结构考虑了过去的信息,但是随着时间间隔的增大,RNN其实记不住太久之前发生的信息了 LSTM 单元的理解 比如上图中的t+1 时刻的输出可能与t0,t1 时刻的输入相关,但是由于时间间隔太大,RNN无法为它们建立起连接。(这也叫做长距离依赖

LSTM它来了

LSTM的设计就是为了避免长距离依赖的问题,lstm的结构也是和上面RNN一样的链式结构,只是将模块A替换成了一个更加复杂的模块 LSTM 单元的理解 乍一眼确实复杂,一步步解开就清楚了。 LSTM中的创新在于引入了cell这个状态,cell 的状态是一个向量,是有多个数字构成。 LSTM 单元的理解 可以理解为这就像是长期记忆,如果你不对状态进行修改,它就会直接一直往后传递。但是记忆总会有所改变吧,所以需要增加一些修正记忆的模块,这里就是加入一些“门”的概念,门就是让一些信息能通过,一些信息被门给过滤了 LSTM 单元的理解 比如说通过sigmoid层输出一个数值都在0到1之间的向量,将这个向量和cell状态进行向量的逐点相乘(这就是个信息过滤的操作),在lstm中有三个这样的“门”结构。 输入假设(仅为说明模型参数计算,输入为什么这样,可以参考下一篇解释。) 假设现有一个样本,Shape=(13,5),时间步是13,每个时间步的特征长度是5(比如一个句子分为13个词组成,每个词用维度为5的特征向量表示)。形象点,我把一个样本画了出来: LSTM 单元的理解 每个时间 步经过LSTM后,得到的中间隐向量是10维(意思是5->10维),13个时间步的数据进去得到的是(13*10)的数据. 每个时间步对应神经元个数(参数个数)一样.也就是算一个LSTM中神经元个数,算一个时间步中参与的神经元个数即可.下面将对LSTM每个计算部分进行神经元分析.

遗忘门

就像一个人的记忆有限,首先你需要遗忘掉一些信息,才能记住新的信息,所以遗忘门首先出现了 LSTM 单元的理解 根据上一时刻的输出状态h t-1 和当前时刻的输入xt ,我们需要确定有多少长期记忆Ct-1 需要抹掉,这个遗忘的比率就是 LSTM 单元的理解

图中公式的 LSTM 单元的理解 是上一个状态的隐向量(已设定隐向量长度为10), LSTM 单元的理解 为当前状态的输入(长度为5),那么 LSTM 单元的理解 的长度就是10+5=15了. LSTM 单元的理解LSTM 单元的理解 为该层的参数. 该层输出是中间隐向量的长度(10),经过 LSTM 单元的理解 激活前后的长度不变.只需要考虑 LSTM 单元的理解 里面的操作得到10维特征即可. LSTM 单元的理解 是(1,15)的向量,与 LSTM 单元的理解 相乘得到(1,10)的向量,根据矩阵相乘规律,得到 LSTM 单元的理解 是(15,10)的矩阵,得到(1,10)矩阵后,与该门层偏置相加,偏置也应该有相同的形状,即 LSTM 单元的理解 是(1,10)的矩阵. 即:该层神经元为: LSTM 单元的理解

输入门

忘了点东西总要再补充点进去,因此输入门紧接其后 LSTM 单元的理解 当前时刻接收到的信息可以表示为

LSTM 单元的理解

但是一次性都记住太吃力了,所以也要有选择地记住,选择的比率就是

LSTM 单元的理解 那么将选择记忆的比率乘以当前时刻接收到的信息就是本次要放进cell里的信息了。也就是有选择地保留一些过去的信息  LSTM 单元的理解  ,然后有选择地记住一些当前的信息  LSTM 单元的理解  ,即 LSTM 单元的理解 上面这个式子就是记忆的遗忘和补充的过程了。 可以看到,这里公式和前面的一样的, LSTM 单元的理解LSTM 单元的理解 都是激活函数,不影响参数个数. 同理这过程的神经元个数是: LSTM 单元的理解 更新过程 LSTM 单元的理解 公式中的四个值,均是前面计算得到的结果,因此该过程没有参数需要学习. 

输出门

记忆更新完后就到了输出的时候了 LSTM 单元的理解 在这里我们同样不能直接把cell中所有记忆都输出,仍然是有选择输出,这个选择率的计算和上面一样的 LSTM 单元的理解 经过选择后输出的记忆就是选择率乘以cell中的记忆了 LSTM 单元的理解 一样的公式,神经元个数一样.即个数为: LSTM 单元的理解

LSTM小结

1、过程: 可以类比为人记忆的容量有限,每个时刻遗忘掉一些旧的知识,再输入(记住)一些新的知识,最后根据需要输出一些知识(就像考试一样有选择地输出)。 2、 上一次的状态 h(t-1)是怎么和下一次的输入 x(t) 结合(concat)起来的? concat, 直白的说就是把 二者直接拼起来 ,比如 x是28位的向量,h(t-1)是128位的,那么拼起来就是156位的向量。 3、cell 权重共享。 LSTM 单元的理解 三个绿色的大框,代表三个 cell 对吧,但是实际上,它只是代表了 一个 cell 在不同时序时候的状态 ,所有的数据只会通过一个 cell,然后不断更新它的权重。 2、一层的 LSTM 的参数有多少个? 参数的数量是由 cell 的数量决定的,这里只有一个 cell,所以参数的数量就是这个 cell 里面用到的参数个数。 把公式(1),(2),(3)的神经元加起来,就是该LSTM的神经元个数了. LSTM 单元的理解 其实,我们可以把这个问题一般化,不看这个例子,假设你一个时间步的特征长度是n,经过该LSTM得到的长度是m,这样就可以算出该LSTM层的神经元个数为: LSTM 单元的理解 加上输出的时候的激活函数的参数,假设是10个类的话,就是m*10的 W 参数和10个bias 参数 5、cell 和 ht的理解。 cell 最上面的一条线的状态即 s(t) 代表了 长时记忆 ,而下面的 h(t)则代表了 工作记忆或短时记忆。 长期状态由Tanh函数激活,然后通过输出门过滤后得到短期状态,而用来输入到全连接层计算模型输出的是短期状态。 h t 一方面往上传递去计算当前时刻的模型输出,另一方面顺时间传递去计算下一个隐状态h t-1。

LSTM的变种

  • Peephole LSTM:无论计算遗忘、输入、还是输入的选择率时都要考虑cell的状态
  • LSTM 单元的理解
  • 耦合遗忘门和输入门:就是遗忘率和输入率总和为1
LSTM 单元的理解
  • GRU: 遗忘和输入合并 为更新,c ell状态和隐藏状态合并
LSTM 单元的理解 参考链接: 1、 https://colah.github.io/posts/2015-08-Understanding-LSTMs/ 2、 https://zhuanlan.zhihu.com/p/340486028 3、 https://www.cnblogs.com/wushaogui/p/9176617.html 4、 https://www.cnblogs.com/Luv-GEM/p/10788849.html
上一篇:Pytorch的nn.LSTM和Keras中LSTM对比


下一篇:ABSA入门笔记