如何训练编码器-解码器模型?
Posted
技术标签:
【中文标题】如何训练编码器-解码器模型?【英文标题】:How to train an encoder-decoder model? 【发布时间】:2021-03-25 05:32:34 【问题描述】:我不太了解用于训练 LSTM 编码器-解码器的明显(或实际上相同?)训练程序。
一方面,在教程中,他们使用 for 循环进行训练: https://www.tensorflow.org/tutorials/text/nmt_with_attention#training
但是在这里 https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html
(第一个模型)
只用一个简单的
# Run training
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2)
这里,两个程序都说,他们是通过教师强制方法进行训练。
但我不明白为什么两种方式都一样?
为什么我可以像普通模型训练那样在没有 for 循环的情况下训练编码器解码器,尽管我需要上一个解码步骤来训练下一个解码步骤?
【问题讨论】:
【参考方案1】:在 LSTM 中,时间步的输出仅取决于状态和之前的时间步。在第二个链接(keras 博客)中,训练期间发生的事情是没有使用最终状态……只有每步向量。在推理期间,状态会从一次迭代保存到下一次迭代。
以下答案解释了 LSTM 中时间步长的概念 What exactly is timestep in an LSTM Model?
为了讨论,这是一张有用的图片。
与LSTM Keras API协调:
当指定return_sequences=True时,keras会返回上面的每一步h0,hN向量; 当指定 return_state=True 时,将返回最后一侧的输出(最右侧 A 块中的右箭头)。在此图中,步骤 N 的输出仅取决于 [x0, xN]。
当您的链接中定义的模型仅取决于上图中的 h 值时,它们在计算损失/梯度时,无论您是一次性完成还是循环完成,数学都是相同的。
如果使用了最终的 LSTM 状态(图片中最右侧的 A 块的侧箭头),这将不成立。
来自 Keras LSTM API 文档:
return_state:布尔值。是否返回除了输出之外的最后一个状态。默认值:假。
代码中的相关注释:
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the
# return states in the training model, but we will use them in inference.
您可以尝试查看长度为 2 的序列。 如果一次性计算时间步长 0 和 1 的预测梯度,就 LSTM 而言,h0(时间步长 0 的输出)的梯度只依赖于对应的输入; h1 的梯度(时间步 1 的输出)取决于 x0 和 x1 以及通过 LSTM 的变换。如果你按时间步长计算梯度时间,你会得到完全相同的计算结果。
如果您查看转换器模型,您会发现它们使用掩码来屏蔽序列,以确保步骤 N 仅依赖于前一步 N。
【讨论】:
抱歉,但是当您使用非标准单词和 Espec 用于 RNN 时,很难理解这些单词并不准确:隐藏向量、单元状态。我不知道您所说的每步向量是什么意思... 为什么(你怎么知道)模型没有使用“最终”状态(不管你的意思是什么)?而且,为什么它只取决于 h 值。我假设你每一步都是隐藏状态? @cltid 根据答案:h0..hN 输出在 Keras API 中称为 return_sequences; “A”块最右边的箭头被 Keras API 称为最后或最终状态。 最右边的箭头是最后一个 A 单元之前的箭头吗?并且,最后一个状态意味着最后一个隐藏状态(与返回序列的意思是输出到最后一个单元格? 图中的每个单元格接受一个输入 (xN),在图中产生一个输出 (hX) 和一个状态(右箭头)。根据 Keras API,last state
是从最右边(序列结束)单元格开始的右箭头。图中未显示此箭头。以上是关于如何训练编码器-解码器模型?的主要内容,如果未能解决你的问题,请参考以下文章