2.LSTM

LSTM详解
部署运行你感兴趣的模型镜像

LSTM(long short-Term Memory,长短时记忆模型)

一、LSTM简述

    LSTM是基于RNN进行修改,属于RNN的一种变形,为了避免RNN中出现的梯度消失问题。对比RNN,LSTM中多了一条贯穿所有状态的记忆状态,所有的遗忘门、记忆们、输出门也都结合记忆状态进行操作。

二、LSTM的具体结构

    其中LSTM内部结构由1个记忆状态(细胞状态)和3个控制门控神经元组成(输入门、输出门、遗忘门)

三、结构模块解析

    3.1、遗忘门(forget gate):以一定概率控制遗忘掉多少上一层的记忆状态(隐藏细胞)。具体结构如下图:

    其中ht-1表示上一层的隐藏状态,xt表示该层的特征输入,再通过一个激活函数sigmoid,得到遗忘门的输出ft,由于ft的值是在0-1之间,这里就代表了遗忘掉多少上一层的记忆状态。用数学公式表示为:
    f(t)=σ(Wf · h(t−1) + Uf · x(t) + bf)
    其中Wf, Uf, bf为线性关系的系数和偏差。σ为sigmoid激活函数。

    3.2、输入门(input data):负责处理当前位置的输入,决定有多少新的输入信息需要存入到记忆状态。

    从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为i(t),第二部分使用了tanh激活函数,输出为a(t), 两者的结果后面会相乘再去更新细胞状态。用数学表达式即为:
     i(t) = σ(Wi · h(t−1) + Ui · x(t) + bi)
     a(t) = tanh(Wa · h(t−1) + Ua · x(t) + ba)
    其中Wi,Ui,bi,Wa,Ua,ba,为线性关系的系数和偏差。σ为sigmoid激活函数。

    3.3、记忆状态的更新:选择性的移除前一时刻的旧信息(记忆状态)并且选择性的添加当前时刻的新信息

    细胞状态C(t)由两部分组成,第一部分是C(t−1)和遗忘门输出f(t)的乘积,第二部分是输入门的i(t)和a(t)的乘积,即:
    C(t) = C(t−1) ⊙ f(t) + i(t) ⊙ a(t)
    其中,⊙为Hadamard积。

     3.4、LSTM输出门:决定当前时刻多少记忆状态用于输出。即决定当前状态的输出以及下一状态隐藏状态的输入。

     当前状态的输出以及该状态隐藏状态的输出ht:

     o(t) = σ(Wo · h(t−1) + Uo · x(t) + bo)
     h(t) = o(t) ⊙ tanh(C(t))

四、LSTM的前向传播
     LSTM模型有一个隐藏状态h(t),以及记忆状态C(t),模型参数几乎是RNN的4倍,因为现在多了Wf,Uf,bf,Wa,Ua,ba,Wi,Ui,bi,Wo,Uo,bo这些参数。
     1)更新遗忘门输出:
          f(t) = σ(Wf · h(t−1) + Uf · x(t) + bf)
     2)更新输入门两部分输出:
         i(t) = σ(Wi · h(t−1) + Ui · x(t) + bi)
     a(t) = tanh(Wa · h(t−1) + Ua · x(t) + ba)
     3)更新记忆状态:
          C(t) = C(t−1) ⊙ f(t) + i(t) ⊙ a(t)
     4)更新输出门输出:
          o(t) = σ(Wo · h(t−1) + Uo · x(t)+bo)
          h(t) = o(t) ⊙ tanh(C(t))
     5)更新当前序列索引预测输出:
          y^(t)=σ(V · h(t)+c)

五、参考学习链接
     https://www.cnblogs.com/pinard/p/6519110.html,其中反向传播也可以参考该链接。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 定义多层 LSTM 网络及全连接层的 PyTorch 实现 在 PyTorch 中,`torch.nn.LSTM` 是一种内置模块,可以直接用来创建多层 LSTM 网络。通过设置参数 `num_layers` 来指定层数,并结合全连接层完成端到端的任务。 以下是具体的实现方法: #### 多层 LSTM 的定义 `torch.nn.LSTM` 提供了一个简单的方式来定义多层 LSTM 结构。其核心参数包括输入维度 (`input_size`)、隐藏状态维度 (`hidden_size`) 和层数 (`num_layers`)。这些参数决定了网络的整体架构[^1]。 #### 全连接层的作用 全连接层通常被放置在网络的最后一部分,用于将 LSTM 输出转换为目标输出形式。例如,在时间序列预测任务中,全连接层会将最后一个时间步的隐藏状态映射为所需的预测值[^4]。 #### 示例代码 以下是一个完整的多层 LSTM 及全连接层的实现示例: ```python import torch import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, num_layers, output_dim): super(LSTMModel, self).__init__() # 初始化LSTM层 self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True) # 设置batch_first=True以便输入形状更直观 # 初始化全连接层 self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): # 前向传播过程 lstm_out, _ = self.lstm(x) # 获取LSTM的输出 (batch_size, seq_length, hidden_dim) out = self.fc(lstm_out[:, -1, :]) # 使用最后的时间步的隐藏状态并通过全连接层得到结果 return out # 参数配置 input_dim = 10 # 输入特征数 hidden_dim = 32 # 隐藏层大小 num_layers = 2 # LSTM层数 output_dim = 1 # 输出维度(如回归问题) # 创建模型实例 model = LSTMModel(input_dim=input_dim, hidden_dim=hidden_dim, num_layers=num_layers, output_dim=output_dim) print(model) ``` 上述代码展示了如何利用 `nn.LSTM` 构建一个多层 LSTM 模型并附加一个全连接层。其中,`lstm_out[:, -1, :]` 表示取最后一个时间步的隐藏状态作为后续处理的数据。 #### 关于 LSTMCell 层的应用 如果希望手动控制每一层的行为,则可以使用 `LSTMCell` 替代 `LSTM` 模块。这种方式允许开发者逐层操作隐藏状态和细胞状态,适合一些复杂的自定义场景[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值