LSTM原理

LSTM是一种递归神经网络(RNN),用于处理序列数据。它具有比标准RNN更好的长期依赖性能力,这是通过使用称为“门控”机制的方法来实现的。

LSTM由四个主要部分组成:遗忘门(forget gate)、输入门(input gate)、单元状态(cell state)和输出门(output gate)。

在时间步 t t t处,假设输入为 x t x_t xt,前一时刻的隐藏状态为 h t − 1 h_{t-1} ht1,单元状态为 c t − 1 c_{t-1} ct1, LSTM的计算如下:

首先,计算遗忘门 f t f_t ft,控制前一时刻单元状态的遗忘程度:

f t = σ ( W f x t + U f h t − 1 + b f ) f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f) ft=σ(Wfxt+Ufht1+bf)

其中, W f W_f Wf是输入 x t x_t xt的权重矩阵, U f U_f Uf是前一时刻隐藏状态 h t − 1 h_{t-1} ht1的权重矩阵, b f b_f bf是偏置向量, σ \sigma σ是sigmoid函数。

然后,计算输入门 i t i_t it,控制新信息的输入程度:

i t = σ ( W i x t + U i h t − 1 + b i ) i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i) it=σ(Wixt+Uiht1+bi)

其中, W i W_i Wi是输入 x t x_t xt的权重矩阵, U i U_i Ui是前一时刻隐藏状态 h t − 1 h_{t-1} ht1的权重矩阵, b i b_i bi是偏置向量, σ \sigma σ是sigmoid函数。

接下来,计算新单元状态 c t ~ \tilde{c_t} ct~,用于更新当前单元状态:

c t ~ = tanh ⁡ ( W c x t + U c h t − 1 + b c ) \tilde{c_t} = \tanh(W_c x_t + U_c h_{t-1} + b_c) ct~=tanh(Wcxt+Ucht1+bc)

其中, W c W_c Wc是输入 x t x_t xt的权重矩阵, U c U_c Uc是前一时刻隐藏状态 h t − 1 h_{t-1} ht1的权重矩阵, b c b_c bc是偏置向量, tanh ⁡ \tanh tanh是双曲正切函数。

最后,计算当前时刻的单元状态 c t c_t ct,并更新隐藏状态 h t h_t ht

c t = f t ⊙ c t − 1 + i t ⊙ c t ~ c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c_t} ct=ftct1+itct~

h t = o t ⊙ tanh ⁡ ( c t ) h_t = o_t \odot \tanh(c_t) ht=ottanh(ct)

其中, ⊙ \odot 表示逐元素乘积, o t o_t ot是输出门,用于控制输出程度:

o t = σ ( W o x t + U o h t − 1 + b o ) o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o) ot=σ(Woxt+Uoht1+bo)

其中, W o W_o Wo是输入 x t x_t xt的权重矩阵, U o U_o Uo是前一时刻隐藏状态 h t − 1 h_{t-1} ht1的权重矩阵, b o b_o bo是偏置向量, σ \sigma σ是sigmoid函数。

LSTM通过门控机制控制信息的输入、输出和遗忘,从而有效地处理序列数据中的长期依赖关系。

在以上LSTM公式中,各变量的维度大小如下:

  • x t x_t xt:输入序列的维度为 ( b a t c h _ s i z e , i n p u t _ s i z e ) (batch\_size, input\_size) (batch_size,input_size),其中 b a t c h _ s i z e batch\_size batch_size 表示输入的样本数, i n p u t _ s i z e input\_size input_size 表示输入的每个特征的维度大小。
  • h t − 1 h_{t-1} ht1:隐藏状态的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),其中 h i d d e n _ s i z e hidden\_size hidden_size 表示隐藏状态的维度大小。
  • c t − 1 c_{t-1} ct1:单元状态的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • W f W_f Wf:输入到遗忘门的权重矩阵的维度为 ( h i d d e n _ s i z e , i n p u t _ s i z e ) (hidden\_size, input\_size) (hidden_size,input_size)
  • U f U_f Uf:隐藏状态到遗忘门的权重矩阵的维度为 ( h i d d e n _ s i z e , h i d d e n _ s i z e ) (hidden\_size, hidden\_size) (hidden_size,hidden_size)
  • b f b_f bf:遗忘门的偏置向量的维度为 ( h i d d e n _ s i z e , ) (hidden\_size,) (hidden_size,)
  • f t f_t ft:遗忘门的输出的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • W i W_i Wi:输入到输入门的权重矩阵的维度为 ( h i d d e n _ s i z e , i n p u t _ s i z e ) (hidden\_size, input\_size) (hidden_size,input_size)
  • U i U_i Ui:隐藏状态到输入门的权重矩阵的维度为 ( h i d d e n _ s i z e , h i d d e n _ s i z e ) (hidden\_size, hidden\_size) (hidden_size,hidden_size)
  • b i b_i bi:输入门的偏置向量的维度为 ( h i d d e n _ s i z e , ) (hidden\_size,) (hidden_size,)
  • i t i_t it:输入门的输出的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • c t ~ \tilde{c_t} ct~:新单元状态的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • W c W_c Wc:输入到新单元状态的权重矩阵的维度为 ( h i d d e n _ s i z e , i n p u t _ s i z e ) (hidden\_size, input\_size) (hidden_size,input_size)
  • U c U_c Uc:隐藏状态到新单元状态的权重矩阵的维度为 ( h i d d e n _ s i z e , h i d d e n _ s i z e ) (hidden\_size, hidden\_size) (hidden_size,hidden_size)
  • b c b_c bc:新单元状态的偏置向量的维度为 ( h i d d e n _ s i z e , ) (hidden\_size,) (hidden_size,)
  • c t c_t ct:当前单元状态的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • o t o_t ot:输出门的输出的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与隐藏状态的维度相同。
  • W o W_o Wo:输入到输出门的权重矩阵的维度为 ( h i d d e n _ s i z e , i n p u t _ s i z e ) (hidden\_size, input\_size) (hidden_size,input_size)
  • U o U_o Uo:隐藏状态到输出门的权重矩阵的维度为 ( h i d d e n _ s i z e , h i d d e n _ s i z e ) (hidden\_size, hidden\_size) (hidden_size,hidden_size)
  • b o b_o bo:输出门的偏置向量的维度为 ( h i d d e n _ s i z e , ) (hidden\_size,) (hidden_size,)
  • h t h_t ht:当前隐藏状态的维度为 ( b a t c h _ s i z e , h i d d e n _ s i z e ) (batch\_size, hidden\_size) (batch_size,hidden_size),与单元状态的维度相同。

你可能感兴趣的:(算法学习,lstm,深度学习,神经网络)