LSTM 单元的理解
从RNN说起
所谓的RNN就是想要记住一些过去的信息,所以它具有环(loops)的形式,如下所示
上面的模块A 的输入为xt ,输出为ht ,记忆体现在它将当前步的信息又送入下一步中,如果我们沿时间轴来看,RNN长这样
这一结构考虑了过去的信息,但是随着时间间隔的增大,RNN其实记不住太久之前发生的信息了
比如上图中的t+1 时刻的输出可能与t0,t1 时刻的输入相关,但是由于时间间隔太大,RNN无法为它们建立起连接。(这也叫做长距离依赖 )
LSTM它来了
LSTM的设计就是为了避免长距离依赖的问题,lstm的结构也是和上面RNN一样的链式结构,只是将模块A替换成了一个更加复杂的模块
乍一眼确实复杂,一步步解开就清楚了。
LSTM中的创新在于引入了cell这个状态,cell 的状态是一个向量,是有多个数字构成。
可以理解为这就像是长期记忆,如果你不对状态进行修改,它就会直接一直往后传递。但是记忆总会有所改变吧,所以需要增加一些修正记忆的模块,这里就是加入一些“门”的概念,门就是让一些信息能通过,一些信息被门给过滤了
比如说通过sigmoid层输出一个数值都在0到1之间的向量,将这个向量和cell状态进行向量的逐点相乘(这就是个信息过滤的操作),在lstm中有三个这样的“门”结构。
输入假设(仅为说明模型参数计算,输入为什么这样,可以参考下一篇解释。)
假设现有一个样本,Shape=(13,5),时间步是13,每个时间步的特征长度是5(比如一个句子分为13个词组成,每个词用维度为5的特征向量表示)。形象点,我把一个样本画了出来:
每个时间 步经过LSTM后,得到的中间隐向量是10维(意思是5->10维),13个时间步的数据进去得到的是(13*10)的数据.
每个时间步对应神经元个数(参数个数)一样.也就是算一个LSTM中神经元个数,算一个时间步中参与的神经元个数即可.下面将对LSTM每个计算部分进行神经元分析.
遗忘门
就像一个人的记忆有限,首先你需要遗忘掉一些信息,才能记住新的信息,所以遗忘门首先出现了
根据上一时刻的输出状态h t-1 和当前时刻的输入xt ,我们需要确定有多少长期记忆Ct-1 需要抹掉,这个遗忘的比率就是
输入门
忘了点东西总要再补充点进去,因此输入门紧接其后
当前时刻接收到的信息可以表示为
![]()
但是一次性都记住太吃力了,所以也要有选择地记住,选择的比率就是
公式中的四个值,均是前面计算得到的结果,因此该过程没有参数需要学习.
输出门
记忆更新完后就到了输出的时候了
在这里我们同样不能直接把cell中所有记忆都输出,仍然是有选择输出,这个选择率的计算和上面一样的
LSTM小结
1、过程: 可以类比为人记忆的容量有限,每个时刻遗忘掉一些旧的知识,再输入(记住)一些新的知识,最后根据需要输出一些知识(就像考试一样有选择地输出)。 2、 上一次的状态 h(t-1)是怎么和下一次的输入 x(t) 结合(concat)起来的? concat, 直白的说就是把 二者直接拼起来 ,比如 x是28位的向量,h(t-1)是128位的,那么拼起来就是156位的向量。 3、cell 权重共享。
三个绿色的大框,代表三个 cell 对吧,但是实际上,它只是代表了 一个 cell 在不同时序时候的状态 ,所有的数据只会通过一个 cell,然后不断更新它的权重。
2、一层的 LSTM 的参数有多少个?
参数的数量是由 cell 的数量决定的,这里只有一个 cell,所以参数的数量就是这个 cell 里面用到的参数个数。
把公式(1),(2),(3)的神经元加起来,就是该LSTM的神经元个数了.
LSTM的变种
- Peephole LSTM:无论计算遗忘、输入、还是输入的选择率时都要考虑cell的状态
-
- 耦合遗忘门和输入门:就是遗忘率和输入率总和为1
- GRU: 遗忘和输入合并 为更新,c ell状态和隐藏状态合并
参考链接:
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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
