pytorch中LSTM的细节分析理解

虽然看了一些很好的blog了解了LSTM的内部机制,但对框架中的lstm输入输出和各个参数还是没有一个清晰的认识,今天打算彻底把理论和实现联系起来,再分析一下pytorch中的LSTM实现。

先说理论部分。一个非常有名的blog把原理讲得很清楚,推荐参考。总之就是这些公式:
在这里插入图片描述
简单来说就是,LSTM一共有三个门,输入门,遗忘门,输出门, i , f , o i,f,o i,f,o分别为三个门的程度参数, g g g是对输入的常规RNN操作。公式里可以看到LSTM的输出有两个,细胞状态 c ′ c' c和隐状态 h ′ h' h c ′ c' c是经输入、遗忘门的产物,也就是当前cell本身的内容,经过输出门得到 h ′ h' h,就是想输出什么内容给下一单元。

那么实际应用时,我们并不关心细胞本身的状态,而是要拿到它呈现出的状态 h ′ h' h作为最终输出。以pytorch中的LSTM为例:

torch.nn.LSTM(*args, **kwargs)

官方API:
https://pytorch.org/docs/stable/nn.html?highlight=lstm#torch.nn.LSTM


  • 参数
    input_size
    hidden_size
    num_layers
    bias
    batch_first
    dropout
    bidirectional

  • 输入
    input (seq_len, batch, input_size)
    h_0 (num_layers * num_directions, batch, hidden_size)
    c_0 (num_layers * num_directions, batch, hidden_size)

  • 输出
    output (seq_len, batch, num_directions * hidden_size)
    h_n (num_layers * num_directions, batch, hidden_size)
    c_n (num_layers * num_directions, batch, hidden_size)

用起来很简单,当作黑箱时只要设置参数让它输出我们想要的shape就行了,但这些参数好像很难和前面公式里的那些联系起来,不便于理解和灵活使用。

先看一张很好的图(LSTM神经网络输入输出究竟是怎样的? - Scofield的回答 - 知乎):
在这里插入图片描述
这张图是以MLP的形式展示LSTM的传播方式(不用管左边的符号,输出和隐状态其实是一样的),方便理解hidden_size这个参数。其

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值