揭秘LSTM的核心计算原理

1. 输入门(Input Gate)计算

输入门决定当前时刻网络要向细胞状态中添加多少新信息。

  • 首先,将当前时刻输入 xt​ 与上一时刻隐藏状态 ht−1​ 进行向量拼接,然后通过一个带有 Sigmoid 激活函数(σ)的全连接层,得到输入门的输出 it​:it​=σ(Wi​⋅[ht−1​,xt​]+bi​)Sigmoid 函数输出范围在 (0,1),值越接近 1 表示 “允许大量新信息输入”,越接近 0 表示 “阻止新信息输入”。

2. 候选细胞状态(c~t​)计算

候选细胞状态是当前时刻可能要加入细胞状态的 “新候选信息”。

  • 同样将 xt​ 与 ht−1​ 向量拼接后,通过带有 Tanh 激活函数的全连接层,得到候选细胞状态 c~t​:c~t​=tanh(Wc​⋅[ht−1​,xt​]+bc​)Tanh 函数输出范围在 (−1,1),用于生成 “可被输入门调节的候选内容”。

3. 遗忘门(Forget Gate)计算

遗忘门决定上一时刻细胞状态 ct−1​ 有多少要被 “遗忘”(即保留多少到当前时刻)。

  • 把 xt​ 与 ht−1​ 向量拼接后,通过 Sigmoid 激活函数的全连接层,得到遗忘门输出 ft​:ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)Sigmoid 输出的 ft​ 同样在 (0,1) 之间,值越接近 1 表示 “保留越多上一时刻细胞状态”,越接近 0 表示 “遗忘越多”。

4. 细胞状态 ct​ 的更新

当前时刻细胞状态 ct​ 由两部分组成:

  • 上一时刻细胞状态经遗忘门 “筛选” 后保留的部分:ft​⊙ct−1​(⊙ 表示向量元素乘)。
  • 当前时刻候选细胞状态经输入门 “筛选” 后加入的部分:it​⊙c~t​。两者相加得到新的细胞状态:ct​=ft​⊙ct−1​+it​⊙c~t​

5. 输出门(Output Gate)与隐藏状态 ht​ 计算

输出门决定细胞状态 ct​ 有多少要被输出为当前时刻的隐藏状态 ht​。

  • 先计算输出门:将 xt​ 与 ht−1​ 向量拼接后,通过 Sigmoid 激活函数的全连接层,得到输出门 ot​:ot​=σ(Wo​⋅[ht−1​,xt​]+bo​)
  • 再对细胞状态 ct​ 做 Tanh 变换(将值压缩到 (−1,1)),然后与输出门 ot​ 做向量元素乘,得到当前时刻隐藏状态 ht​:ht​=ot​⊙tanh(ct​)

通过遗忘门、输入门、输出门的协同作用,LSTM 能灵活控制信息的 “遗忘”“输入” 与 “输出”,从而有效处理长序列的依赖关系。

公式中符号的意义

sigma(\cdot) :Logistic函数,将输入映射到 [0,1] 区间,用于遗忘门、输入门、输出门的激活,控制信息流通比例。

tanh(\cdot) :双曲正切函数,将输入映射到 [-1,1] 区间,用于生成候选记忆 \tilde{C_t} ,引入非线性变换。

odot :向量元素级乘积(Hadamard乘积),实现门控单元与记忆状态的逐元素相乘,按比例控制信息保留/传递。

C_t :LSTM内部状态(记忆单元),专门传递长程信息,记录序列关键记忆。

 h_t :隐藏层外部状态,接收并输出经非线性处理的信息,作为后续输入。

C_{t-1} :上一时刻内部状态(记忆单元),承载历史记忆信息。

tilde{C_t} :当前时刻候选记忆,由输入与上一时刻外部状态经非线性变换生成,待融入记忆单元。

 f_t :遗忘门,输出 [0,1] 区间向量,控制上一时刻记忆 C_{t-1} 的遗忘比例。

 i_t :输入门,输出 [0,1] 区间向量,控制候选记忆 \tilde{C_t} 的融入比例。

 o_t :输出门,输出 [0,1] 区间向量,控制内部状态 C_t 向外部状态 h_t 的输出比例。

x_t :当前时刻输入向量,为序列在 t 时刻的输入信息。

W_i, U_i, b_i 等(权重、偏置):模型可训练参数,对输入 x_t 和上一时刻外部状态 h_{t-1} 做线性变换,是门控与记忆计算的核心参数。

### 双向 LSTM计算原理及工作机制 双向 LSTM (Bidirectional Long Short-Term Memory, BiLSTM) 是一种特殊的循环神经网络架构,旨在更好地捕获序列数据中的上下文信息。与单向 LSTM 不同的是,BiLSTM 同时考虑了前向和后向的时间步信息。 #### 基本概念 LSTM 通过设计特定的门控机制解决了传统 RNN 中存在的梯度消失问题[^4]。为了进一步增强模型性能,研究者提出了双向 LSTM 架构。这种架构的核心思想在于分别从前向和后向两个方向处理输入序列,并最终将两者的结果结合起来[^1]。 #### 工作机制 在双向 LSTM 中,整个网络由两部分组成: - **前向 LSTM**:按照正常的时间顺序(从左至右)依次读取输入序列 $x_1, x_2, ..., x_T$ 并生成对应的隐藏状态表示 $\overrightarrow{h}_t$。 - **后向 LSTM**:逆序读取输入序列(从右至左),即先处理最后一个时间步的数据再逐步向前推进,得到反向隐藏状态表示 $\overleftarrow{h}_t$。 对于任意给定位置 $t$ 上的状态输出,则可以通过连接或者求平均等方式融合来自正反两个方向上的特征表达: $$ h_t = [\overrightarrow{h}_t; \overleftarrow{h}_t] $$ 其中,“;” 表示拼接操作[^3]。 以下是具体的公式描述: 设当前时间为$t$, 输入为$x_t$, 则前向传播过程中更新规则如下所示: $$ \begin{aligned} &f_t=\sigma(W_f[x_{t}, h_{t-1}]+b_f),\\ &i_t=\sigma(W_i[x_{t}, h_{t-1}]+b_i), \\ &o_t=\sigma(W_o[x_{t}, h_{t-1}]+b_o),\\ &\tilde{c}_{t}=tanh(W_c[x_{t}, h_{t-1}]+b_c), \end{aligned} $$ 而后向传播过程与此类似只是改变了遍历的方向而已. 最后综合起来形成完整的bi-directional output vector as concatenation of both directions' outputs at each time step. ```python import torch.nn as nn class BidirectionalLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_layers=1): super(BidirectionalLSTM, self).__init__() self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, bidirectional=True, batch_first=True) def forward(self, x): out, _ = self.lstm(x) return out ``` 此代码片段定义了一个基于PyTorch框架实现的标准双向往复长短时记忆单元类[BidirectionalLSTM], 它接受三个主要参数: `input_size`, 即每个样本点维度大小;`hidden_size`, 隐藏层节点数以及可选层数量控制变量`num_layers`.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值