keras中seq2seq模型示例背后的原理?

数据挖掘 神经网络 深度学习 喀拉斯 顺序
2022-02-05 10:10:34

我指的是 keras 中 seq2seq 模型的示例代码(https://github.com/fchollet/keras/blob/master/examples/addition_rnn.py)。型号为:

model = Sequential()

model.add(RNN(HIDDEN_SIZE, input_shape=(MAXLEN, len(chars))))

model.add(RepeatVector(DIGITS + 1))
for _ in range(LAYERS):
    model.add(RNN(HIDDEN_SIZE, return_sequences=True))

model.add(TimeDistributed(Dense(len(chars))))
model.add(Activation('softmax'))

在这个模型中,我们将编码输入向量从编码器的最后状态传递到解码器中的每个时间步。

现在,除了编码的输入向量之外,我们没有将任何其他输入传递给解码器,但在所有 seq2seq 模型中,我们也将输出序列(时间延迟)与编码的输入一起传递。

这是一个有效的 seq2seq 模型吗?令我惊讶的是,它运作良好。这是如何工作的?

1个回答

最初的Seq2Seq 论文使用将时间延迟的输出序列与编码的输入一起传递的技术,这种技术被称为teacher forcing

在此处输入图像描述

存在一种简化的架构,其中固定长度的编码输入向量被传递到解码器中的每个时间步(类似地,我们可以说,解码器在每个时间步偷看编码输入)。

论文“ Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation ”结合了这两种技术(因此它将编码的输入向量与延时输出序列一起作为输入传递给解码器)。

在此处输入图像描述