PyTorch LSTM模型深度解析:参数设置全指南

本文主要依据
Pytorch 中LSTM官方文档

,对其中的
模型参数


输入


输出

进行详细解释。

目录

基本原理

模型参数 Parameters

输入Inputs: input, (h_0, c_0)

输出Outputs: output, (h_n, c_n)

变量Variables

备注


基本原理

首先我们看下面这个LSTM图, 对应于输入时间序列中每个步长的LSTM计算。

对应的公式计算公式如下:

其中

表示时刻

时刻的隐含状态,

表示时刻

上的记忆细胞,

表示时刻

的输入(

对应于单个样本

),

表示隐含层在时刻

的隐含状态或者是在起始时间o的初始隐含状态,

,

,

表示对应的输入、遗忘、 输出门。σ 表示的是sigmoid 函数,⊙ 表示哈达玛积(Hadamard product)。

对于含多个隐含层的LSTM,第

层(

)的输入

​ 则对应的是前一层的隐含状态

与丢弃dropout

的乘积,其中每一个

是Bernoulli随机变量(以参数dropout 的概率等于0)。

如果参数指定proj_size > 0,则将对LSTM使用投影。他的运作方式包括以下几步。首先,

的维度将从hidden_size 转换为proj_size (

的维度也会同时被改变)。第二,每一个层的隐含状态输出将与一个(可学习)的投影矩阵相乘:

。注意,这种投影模式同样对LSTM的输出有影响,即变成proj_size.

模型参数 Parameters
  • input_size
    -- 输入变量x的特征数量
  • hidden_size
    -- 隐含层h的特征数量(即层中隐含单元的个数)
  • num_layers
    -- 隐含层的层数,比如说num_layers =2, 意味着这是包含两个LSTM层,默认值:1
  • bias
    -- 如果为False, 表示不使用偏置权重 b_ih 和 b_hh。默认值为:True
  • batch_first
    -- 如果为True,则输入和输出的tensor维度为从(seq, batch, feature)变成 (batch, seq, feature)。 注意,这个维度变化对隐含和细胞的层并不起做用。参见下面的Inputs/Outputs 部分的说明,默认值:False
  • dropout
    -- 如果非0,则会给除最后一个LSTM层以外的其他层引入一个Dropout层,其对应的丢弃概率为dropout,默认值:0
  • bidirectional
    -- 如果为True,则是一个双向的(bidirectional )的LSTM,默认值:False
  • proj_size
    -- 如果>0, 则会使用相应投影大小的LSTM,默认值:0
输入Inputs: input, (h_0, c_0)
  • input:
    当batch_first = False 时形状为(
    L,N,H
    _in),当 batch_first = True 则为(
    N, L, H
    _in) ,包含批量样本的时间序列输入。该输入也可是一个可变换长度的时间序序列,参见
    torch.nn.utils.rnn.pack_padded_sequence()
    或者是
    torch.nn.utils.rnn.pack_sequence()
    了解详情。
  • h_0
    :形状为(
    D∗num_layers, N,
    H
    _out),指的是包含每一个批量样本的初始隐含状态。如果模型未提供(
    h_0, c_0
    ) ,默认为是全0矩阵。
  • c_0
    :形状为(
    D∗num_layers, N, H
    _cell), 指的是包含每一个批量样本的初始记忆细胞状态。 如果模型未提供(
    h_0, c_0
    ) ,默认为是全0矩阵。

其中:

N

= 批量大小

L

= 序列长度

D

= 2 如果模型参数bidirectional = 2,否则为1

H

_in = 输入的特征大小(input_size)

H

_cell = 隐含单元数量(hidden_size)

H

_out = proj_size, 如果proj_size > 0, 否则的话 = 隐含单元数量(hidden_size)

输出Outputs: output, (h_n, c_n)
  • output
    : 当batch_first = False 形状为(
    L, N, D∗H
    _out) ,当batch_first = True 则为 (
    N, L, D∗H
    _out) ,包含LSTM最后一层每一个时间步长

    的输出特征(

    )。如果输入的是
    torch.nn.utils.rnn.PackedSequence
    ,则输出同样将是一个packed sequence。
  • h_n
    : 形状为(
    D∗num_layers, N, H
    _out),包括每一个批量样本最后一个时间步的隐含状态。
  • c_n
    : 形状为(
    D∗num_layers, N, H
    _cell),包括每一个批量样本最后一个时间步的记忆细胞状态。
变量Variables
  • ~LSTM.weight_ih_l[k]
    -- 学习得到的第k层的 input-hidden 权重 (W_ii|W_if|W_ig|W_io),当k=0 时形状为 (4*hidden_size, input_size) 。 否则,形状为 (4*hidden_size, num_directions * hidden_size)
  • ~LSTM.weight_hh_l[k]
    --学习得到的第k层的 hidden -hidden 权重(W_hi|W_hf|W_hg|W_ho), 想形状为 (4*hidden_size, hidden_size)。如果 Proj_size > 0,则形状为 (4*hidden_size, proj_size)
  • ~LSTM.bias_ih_l[k]
    -- 学习得到的第k层的input-hidden 的偏置 (b_ii|b_if|b_ig|b_io), 形状为 (4*hidden_size)
  • ~LSTM.bias_hh_l[k]
    -- 学习得到的第k层的hidden -hidden 的偏置 (b_hi|b_hf|b_hg|b_ho), 形状为 (4*hidden_size)
  • ~LSTM.weight_hr_l[k]
    -- 学习得到第k层投影权重,形状为 (proj_size, hidden_size)。仅仅在 proj_size > 0 时该参数有效。
备注
  • 所有的权重和偏置的初始化方法均取值于:
相关推荐
qzhqbb2 小时前
基于统计方法的语言模型
人工智能·语言模型·easyui
冷眼看人间恩怨2 小时前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_883041082 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌3 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭3 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246664 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k4 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫4 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班4 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型