我们如何将数据传递给 RNN?

数据挖掘 深度学习 rnn 语言模型 nlp
2021-09-18 19:50:00

假设我们在语料库中有 A1、A2、...、Am 不同的文章,每个文章都有 W1、W2、......、Ww 词。我们正在训练他们的语言模型。我们要不要:

方案一

  1. 将第一批数据作为每篇文章的第一个 S(时间步数)(S1, S2, .., Ss)字(为简单起见,我们假设批大小 = m)
  2. 设置初始隐藏状态 H0 =[0,0,..,0]
  3. 计算该批次的损失和梯度并更新参数
  4. 向前移动一个词并从每篇文章中获取下 S 个词(因此 S2、S3、...、Ss 与上一批中的词相同)
  5. 使用从上一步计算的 H1 并将其用作本次迭代中的 H0
  6. 这样做到最后

*在这个方案中,我们必须在最后一批使用零填充(在文章末尾)

方案 2 与方案 1 相同,但在第 5 步中,我们将 H0 重新初始化为一个零向量

方案 3 与方案 1 相同,但在第 4 步中,我们将每篇文章中的 s 词向前移动到下一个不重叠的 s 词,并将上次迭代的 H0 初始化为 Hs

方案 4, 5, 6 与方案 1, 2, 3 相同,但不是取 s 个连续的单词,而是取每篇文章的第一句并将它们补零到长度 S

将数据提供给 RNN 的正确方法是什么,请同时给出原因。我认为它应该是方案 1,但它可能真的很慢

1个回答

根据我了解的程度,我建议正确的方案是第三个,即

  1. 将第一批数据作为每篇文章中的第一个 S(时间步数)(S1,S2,..,Ss)个单词(为简单起见,我们假设批量大小 = m)
  2. 设置初始隐藏状态 H0 = [0,0,..,0]
  3. 计算该批次的损失和梯度并更新参数
  4. 我们将每篇文章中的 s 词向前移动到下一个不重叠的 s 词,并将上次迭代的 H0 初始化为 Hs
  5. 这样做到最后

为什么我们不会采用方案 1方案 3之外的任何内容,因为: H0 仅应在没有可用上下文时使用零向量初始化(如果您有一些附加信息,为什么不使用它?!)。目标是最大化每篇文章的概率,并且句子不是独立的。此外,没有理由不对待“经期”。作为一个步骤本身。我们也计算它的词嵌入

为什么不使用方案 1 - 因为灾难性的干扰方案 1中的网络一次又一次地输入相同的输入)加上缓慢的学习会导致