Keras中LSTM单元工作机制解析与疑问解答
Q0) Keras的LSTM实现是否与Colah博客一致?
Keras的LSTM核心实现和该博客讲解的标准LSTM结构完全一致,都包含输入门、遗忘门、输出门以及细胞状态的更新机制。你提供的示例代码中,输入为单时间步单标量时输出形状(32,1)、参数数量12,完全符合标准LSTM的参数计算逻辑。
示例代码:
import tensorflow as tf N_u,N_x=1,1 model = tf.keras.Sequential([ tf.keras.layers.LSTM(N_u, stateful=True, batch_input_shape=(32, 1, N_x)) ]) model.summary()
Q1) 此处是否为1个LSTM单元/细胞?按图示计算的12个参数是否正确?
是的,这里定义的是1个LSTM单元(细胞)。参数计算完全正确:
标准LSTM每个单元包含4个门(输入门、遗忘门、输出门、细胞候选门),每个门的参数由三部分组成:
- 输入特征到门的权重:
N_x * N_u - 前一时刻隐藏状态到门的权重:
N_u * N_u - 门的偏置:
N_u
总参数公式为4 * (N_x*N_u + N_u*N_u + N_u)。代入N_u=1、N_x=1,得到4*(1*1 +1*1 +1)=12,和示例结果一致。
Q2) 当N_u,N_x=1,2时,参数数量变为16,是否因新增x_2与LSTM单元连接的4个权重参数?
完全正确。代入公式计算:4*(2*1 +1*1 +1)=4*(2+1+1)=16。新增的4个参数就是第二个输入特征x₂对应4个门的权重(每个门1个权重,共4个)。
Q3) 当N_u,N_x=2,1时,参数数量为32而非预期的24,两个单元是否相互影响?
是的,两个单元之间存在相互影响。此时总参数按公式计算为4*(1*2 +2*2 +2)=4*(2+4+2)=32。
差异来源在于:每个LSTM单元的门不仅接收输入特征,还会接收所有隐藏单元的前一时刻状态。当有2个单元时,隐藏状态到每个门的权重是N_u*N_u=2*2=4,4个门就是16个参数;而如果单元间无影响,这部分权重会是N_u*1=2,4个门仅8个参数,总参数就会是24。实际的32个参数正说明单元间存在连接权重,即相互影响。
Q4) N_u,N_x=2,2时参数为40,需基于前两点理解原因。
结合Q2和Q3的逻辑,代入公式计算:4*(2*2 +2*2 +2)=4*(4+4+2)=40。拆解来看:
- 输入特征到4个门的权重:
2(输入特征数)*2(单元数)*4(门数)=16 - 隐藏状态到4个门的权重(单元间相互影响的部分):
2*2*4=16 - 4个门的偏置:
2*4=8
三者相加16+16+8=40,完全符合参数数量。
Q5) Keras的LSTM实现基于哪篇文档或论文?
Keras的LSTM基础实现基于Hochreiter和Schmidhuber在1997年发表的经典论文《Long Short-Term Memory》。同时,其实现也兼容后续的优化变体(比如默认关闭的peephole连接,参考Graves在2013年的相关工作),但核心结构遵循原始的标准LSTM设计。
内容的提问来源于stack exchange,提问作者deltasata

