您现在的位置是:首页 >技术杂谈 >LSTM//循环神经网络的个人理解网站首页技术杂谈

LSTM//循环神经网络的个人理解

biao169 2023-06-15 12:00:03
简介LSTM//循环神经网络的个人理解

[TOP] LSTM/循环神经网络的理解

前言自省:

  • 作为一名已经研究深度学习网络多年的研究员,虽曾多次浅尝LSTM这种网络,但是都没有花时间对其进行深刻解读。
  • 本文只谈对LSTM在逻辑思想上的理解,不进行技术解析。

1. 经典LSTM原理图

在这里插入图片描述
这里边涉及“遗忘门”、“记忆门”、“输出门”,具体解析可以参考:

  1. 【知乎】LSTM - 长短期记忆递归神经网络

  2. “Understanding LSTM Networks.” Understanding LSTM Networks – Colah’s Blog

2. “长短时”记忆关于时间概念的理解

因为在pytorch里边,LSTM网络需要先定义输入的维度尺寸。
见下方代码,可以看到:

  • LSTM网络在没有预给定隐藏层状态 hidden时(A处)
    lstm在输出中包含隐藏层的状态,即hidden。可以看到这个hidden的维度和batch有关,而和seq_len无关。这不禁疑问,
  • 如此,在预定义隐藏层状态时(B处)
    定义的矩阵岂不是需要batch的信息。会略微麻烦。因为,一般地,我们都希望batch的信息和网络没有关系。
lstm = nn.LSTM(10, 20, 6, batch_first=True) # input_len, hidden_size, num_layers

x = torch.ones([2, 3, 10])  # [batch, seq_len, input_len]
y, hidden = lstm(x, )  # A
print(y.shape)
print('hidden:', hidden[0].shape, hidden[1].shape , len(hidden))
# >> torch.Size([6, 2, 20]) torch.Size([6, 2, 20]) 2
y, hidden = lstm(x, hidden)  # B
print(y.shape)
print('hidden:', hidden[0].shape, hidden[1].shape , len(hidden))
# >> torch.Size([6, 2, 20]) torch.Size([6, 2, 20]) 2

初理解: [LSTM最初是用于语义理解,即,解读文本预测与生成]
假如:

  • 每个句子长度为3,即有3个词/字。 ===> seq_len = 3
  • 每次输入网络的有2个句子。 ===> batch = 2
  • 所有使用的词/字种类为10种,即词向量维度为10。 ===> input_len=10

那么

  • 网络会依次读取这2个句子的第一个词,第二个词……
  • 循环3次(seq_len)次后结束

这里
循环的思想在于

LSTM会逐字读取

  • x_{t-1} 为句子中的上一个词,x_{t}为当前词;所以,每个词都会考虑到上一个词的影响

LSTM 句子间的关联

  • 按股票预测的案例(seq_len=1),每个batch内对于一个时间区内的 batch个时刻。每个时刻前后是有关联的,即,长短时记忆能力。
  • 因为hidden是可以选择保存到下一个batch使用的,因此,长时间记忆的功能在此体现。

但,说实话,一个batch内的时序关系,体现不是很明显。从hidden参数来看,它们共用一个矩阵,这更像是cnn的整体考量,而不是有时序关系的逐一考量。

自我感觉,本文对LSTM的体悟纯正一定的缺漏和不足,请读者海涵!

这里,还请大佬批评指正,谢谢!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。