LSTM中点乘与加法运算机制疑问:针对timesteps=4等参数场景
LSTM细胞状态的点运算逻辑(结合参数timesteps=4, features=2, units=3)
明确各状态维度
- 输入维度:
(batch_size, 4, 2)(单个时间步输入为(batch_size, 2)) - 隐藏状态
h_t、细胞状态c_t维度:(batch_size, 3)(units=3,None对应批量维度batch_size)
时间步t1的核心计算流程
输入与隐藏状态拼接
时间步t1的输入x_t1((batch_size,2))和上一时间步隐藏状态h_t0((batch_size,3))在特征轴拼接,得到(batch_size, 5)的张量(2+3=5)。生成门控与候选状态
拼接后的张量通过3组独立全连接层(共享权重矩阵,偏置不同),分别输出:- 遗忘门
f_t1:(batch_size,3),sigmoid激活(输出0-1区间值) - 输入门
i_t1:(batch_size,3),sigmoid激活 - 候选细胞状态
~c_t1:(batch_size,3),tanh激活(输出-1到1区间值) - 输出门
o_t1:(batch_size,3),sigmoid激活
- 遗忘门
细胞状态的点运算(核心困惑解答)
这里的点运算是逐元素运算(element-wise),即同维度张量对应位置元素直接计算:- 遗忘阶段(乘法):上一步细胞状态
c_t0((batch_size,3))和遗忘门f_t1逐元素相乘,c_t0 * f_t1,作用是选择性丢弃旧细胞状态的信息。 - 更新阶段(加法):输入门
i_t1和候选细胞状态~c_t1逐元素相乘后,与遗忘后的细胞状态相加,得到新细胞状态c_t1 = (c_t0 * f_t1) + (i_t1 * ~c_t1)。
所有参与运算的张量维度均为(batch_size,3),维度完全匹配,因此可直接执行逐元素运算。
- 遗忘阶段(乘法):上一步细胞状态
隐藏状态更新
新细胞状态c_t1经tanh激活后,与输出门o_t1逐元素相乘,得到当前时间步隐藏状态h_t1 = o_t1 * tanh(c_t1)。
常见理解错误修正(基于标准LSTM逻辑)
如果你的附图存在以下问题,需要调整:
- 若拼接后未生成门控与候选状态,直接和细胞状态运算:错误,必须先通过全连接层生成门控与候选状态,再执行细胞状态的逐元素运算。
- 若运算采用矩阵乘法而非逐元素运算:错误,矩阵乘法会改变维度,不符合LSTM的设计逻辑,细胞状态与门控的交互只能是逐元素计算。
- 若细胞状态更新顺序颠倒:错误,必须先完成旧状态的遗忘,再添加新的候选状态,顺序不可调换。
内容的提问来源于stack exchange,提问作者Hasnat
相关产品推荐
相关产品推荐

