文章目录
- 1. LSTM cell
- 2. 门结构
- 3. 门的公式
- 4. 门的参数
- 5. 重点关系厘清
1. LSTM cell
- 如文章 LSTM网络与参数学习笔记 中介绍, LSTM cell指的是一个包含隐藏层所有神经元的结构.
- 但是LSTM门控单元的公式如何理解、门和LSTM cell神经元如何对应、门函数的参数维度、不同时间步不同隐藏层之间数据如何传递等, 这些问题将在本文厘清
2. 门结构
-
RNN存在长期记忆逐渐消失以及梯度消失/爆炸的问题
-
LSTM通过引入cell state保存长期记忆, 通过设置精妙的门控机制很大程度缓解梯度消失/爆炸问题.
-
LSTM中有三个门, 分别是遗忘门, 输入门和输出门
-
遗忘门: f门
- 决定我们会从细胞状态中丢弃什么信息
- 它接收 h t − 1 h_{t-1} ht−1和 x t x_{t} xt作为输入参数,通过 s i g m o i d sigmoid sigmoid层得到对应的遗忘门的参数
- 弄清楚今天发生的事情(输入 x x x)和最近发生的事情(隐藏状态 h h h),二者会影响你对情况的长期判断(细胞状态 C C C)
-
输入门: i门
- 确定什么样的新信息被存放在细胞状态中
- s i g m o i d sigmoid sigmoid层得到输入门参数 i t i_t it, 确定要更新的信息, t a n h tanh tanh层产生新的候选值 C ~ t \widetilde{C}_t C t. 最后将 i t i_t it和 C ~ t \widetilde{C}_t C t相乘得到更新的信息;同时将上面得到的遗忘门 f t f_t ft和旧元胞状态 C t − 1 C_{t-1} Ct−1相乘,以忘掉其中的一些信息。二者相结合,便得到更新后的状态 C t C_t Ct
- 最近发生的事情(隐藏状态 h h h)和今天发生的事情(输入 x x x)中的哪些信息需要记录到你对所处情况的长远判断中(细胞状态 C C C)
-
输出门:o门
- 计算最后的输出信息
- 通过 t a n h tanh tanh层将细胞状态的值规范到 − 1 ∼ 1 -1\sim 1 −1∼1之间, 然后由 s i g m o i d sigmoid sigmoid层得到输出门参数 o t o_t ot, 最后将 o t o_t ot与规范化后的细胞状态点乘, 得到最终过滤后的结果 h t h_t ht
- 得到所处情况的短期判断, 比如近期跟老板提加薪会不会答应
-
3. 门的公式
-
首先回顾输入和输出的维度
-
batch_first = true
input(batch_size, seq_len, input_size) output(batch_size, seq_len, hidden_size * num_directions)
-
batch_first = false
input(seq_len, batch_size, input_size) output(seq_len, batch_size, hidden_size * num_directions)
-
-
遗忘门
-
公式:
-
输入: h t − 1 h_{t-1} ht−1, x t x_{t} xt的联合,即 [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt]
-
输出:由于使用了 s i g m o i d sigmoid sigmoid函数,输出值在 0 ∼ 1 0\sim 1 0∼1之间。0表示完全丢弃,1表示完全保留
-
维度:如下。 f t f_t ft的维度是hidden_size,也就是 s i g m o i d sigmoid sigmoid层有hidden_size个神经元
变量 维度 h t − 1 h_{t-1} ht−1 hidden_size x t x_{t} xt feature_size [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt] hidden_size + feature_size W f W_{f} Wf [hidden_size, hidden_size + feature_size] b f b_{f} bf hidden_size f t f_{t} ft hidden_size -
公式合并
-
-
输入门
-
公式:
-
输入: i t i_t it和 C ~ t \widetilde{C}_t C t都以 [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt]为输入; i t i_t it通过 s i g m o i d sigmoid sigmoid层来实现; C ~ t \widetilde{C}_t C t通过 t a n h tanh tanh层来实现
-
输出:
- 同样的 i t i_t it在 0 ∼ 1 0\sim 1 0∼1之间, C ~ t \widetilde{C} _{t} C t^在 − 1 ∼ 1 -1\sim 1 −1∼1之间; *不是矩阵乘法, 是对应元素点乘
- 将要更新的信息 i t ∗ C ~ t i_t*\widetilde{C} _{t} it∗C t和要忘记的信息 f t ∗ C t − 1 f_t*C_{t-1} ft∗Ct−1相结合得到更新后的状态 C t C_t Ct
-
含义:
- f ∗ C t − 1 f*C_{t-1} f∗Ct−1的点乘(按元素相乘)实际上是在决定哪些信息从上一时刻的cell state中保留下来,哪些被遗忘。保留和遗忘的比例就是 f f f的值
- i t ∗ C ~ t i_t*\widetilde{C} _{t} it∗C t表示有多少cell state候选值的新信息要更新到cell state中,更新的比例就是输入门 i t i_t it的值
- C t = f t ∗ C t − 1 + i t ∗ C ~ t C_t=f_t*C_{t-1}+i_t*\widetilde{C} _{t} Ct=ft∗Ct−1+it∗C t将旧的信息(可能已被遗忘部分)与新的信息结合,形成当前时刻的cell state
-
维度:如下。 s i g m o i d sigmoid sigmoid层有hidden_size个神经元, t a n h tanh tanh层有hidden_size个神经元
变量 维度 h t − 1 h_{t-1} ht−1 hidden_size x t x_{t} xt feature_size [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt] hidden_size + feature_size i t i_{t} it hidden_size C ~ t \widetilde{C} _{t} C t hidden_size C t − 1 C_{t-1} Ct−1 hidden_size C t C_{t} Ct hidden_size W i W_{i} Wi [hidden_size, hidden_size + feature_size] W C W_{C} WC [hidden_size, hidden_size + feature_size] -
公式合并:
-
-
输出门
-
公式
-
输入: o t o_t ot以 [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt]为输入。 C t C_t Ct需要经过 t a n h tanh tanh层进行值缩放
-
输出:这里的输出不是LSTM网络的输出,LSTM网络输出包括网络的 o u t p u t output output和 h n , c n h_n, c_n hn,cn
-
含义:
- t a n h ( C t ) tanh(C_t) tanh(Ct)将cell state的值压缩到-1和1之间,使得信息的表示更加集中
- o t ∗ t a n h ( C t ) o_t*tanh(C_t) ot∗tanh(Ct)的点乘决定cell state的哪些信息将被传到隐藏状态中,压缩后的cell state的传入比例通过 o t o_t ot的值来控制
-
维度:如下。 s i g m o i d sigmoid sigmoid层有hidden_size个神经元, t a n h tanh tanh层也有hidden_size哥神经元;*是点乘,按元素相乘
变量 维度 o t o_{t} ot hidden_size h t h_{t} ht feature_size W o W_o Wo [hidden_size, hidden_size + feature_size] -
公式合并:
-
4. 门的参数
-
参数矩阵
-
参数维度
变量 维度 x t , h t − 1 , f t , i t , C ~ t , C t − 1 , C t , o t x_t, h_{t-1},f_t, i_t, \widetilde{C} _{t}, C_{t-1},C_t,o_t xt,ht−1,ft,it,C t,Ct−1,Ct,ot hidden_size x t x_{t} xt feature_size [ h t − 1 , x t ] [h_{t-1}, x_{t}] [ht−1,xt] hidden_size + feature_size W f , W i , W C , W o W_{f},W_{i},W_{C},W_{o} Wf,Wi,WC,Wo [hidden_size, hidden_size + feature_size] b f , b i , b C , b o b_f, b_i, b_C, b_o bf,bi,bC,bo hidden_size s i g m o i d sigmoid sigmoid网络, t a n h tanh tanh网络 hidden_size 个神经元 ∗ * ∗ 对应元素点乘,维度不变
5. 重点关系厘清
- (1) 图中黄色框都是前馈神经网络, 神经元个数都是hidden_size个, 激活函数就是sigmoid和tanh
- (2) 主要涉及到的参数就是 W f , W i , W C , W o W_{f},W_{i},W_{C},W_{o} Wf,Wi,WC,Wo权重参数和 b f , b i , b C , b o b_f, b_i, b_C, b_o bf,bi,bC,bo偏置参数
- (3) 这些参数不是存在于神经元的数据结构中,而是存在于神经元之间的连接。由此理解,网络的要点就是"连接",神经元只是对应的数学运算
- (4) LSTM cell的整个隐藏层实现了这三个门,这三个门是LSTM cell的一部分
- (5) LSTM cell的hidden_size是一个超参,是遗忘门/输入门/输出门的神经元个数
- (6) 遗忘门/输入门/输出门各自维护自己的神经网络,不是共用神经网络。如图1中每个黄色框都是一个神经网络
- (7) 每个门都有一组自己的权重和参数,也就是章节4中剃刀的W和b参数,这些参数在所有时刻是权值共享的,权值随着时间步在不断地更新
- (8) b的参数个数 4 ∗ h i d d e n _ s i z e 4*hidden\_size 4∗hidden_size个,W的参数个数 4 ∗ ( h i d d e n _ s i z e ∗ ( h i d d e n _ s i z e + f e a t u r e _ s i z e ) ) 4*(hidden\_size * (hidden\_size + feature\_size)) 4∗(hidden_size∗(hidden_size+feature_size)),即 4 ∗ n u m _ u n i t s ∗ ( h t − 1 + x t ) 4*num\_units*(h_{t-1}+x_t) 4∗num_units∗(ht−1+xt)
- (9) 每个门的神经元个数也决定了其输出的维度
- (10) 如上图,输出门和神经网络的输出不是同一个东西。输出门得到的 h t h_t ht只是短期状态信息,输入到下一时刻或下一层使用;而LSTM网络的最终输出是输出层接 s i g m o i d / s o f t m a x sigmoid/softmax sigmoid/softmax等全连接层后的结果
- (11) 如上图,多层LSTM的情况, h t h_t ht横向传递给下一时刻作为 h t − 1 h_{t-1} ht−1,纵向传递给下一层作为 x t x_t xt
创作不易,如有帮助,请 点赞 收藏 支持
[参考文章]
[1].通俗理解门的原理, 推荐
[2].门的公式的衔接和多层LSTM输出的关系
[3].同样,门的公式
[4].cell的内部参数图和公式推导
[5].参考逻辑结构:门和神经元之间的关系, 推荐
[6].对hidden_size的理解,门的计算过程
[7].反向传播的推导
[8].反向传播算法推导过程
created by shuaixio, 2024.05.21