seq2seq - 编码器反向传播

时间:2017-09-22 14:52:25

标签: machine-learning tensorflow lstm backpropagation encoder

我很难理解seq2seq模型中编码器中的反向传播是如何工作的。没有标签,因此无法计算反向传播的错误,但LSTM层的权重会以某种方式更新。

l_enc_input = Input(batch_shape=(batch_size, None, embedding_size))
l_enc_lstm = LSTM(encoding_size, return_sequences=False, return_state=True, stateful=True, dropout=0.2)

l_dec_input = Input(batch_shape=(batch_size, None, embedding_size))
l_dec_lstm = LSTM(encoding_size, return_sequences=False, stateful=True, dropout=0.2)
l_dec_dense = Dense(embedding_size, activation="softmax")


t_enc_out = l_enc_lstm(l_enc_input)
state = t_enc_out[1:]

t_dec_out = l_dec_dense(l_dec_lstm(l_dec_input, initial_state=state))

model_train = Model(inputs=[l_enc_input, l_dec_input], outputs=[t_dec_out])
model_train.compile(optimizer="adam", loss="categorical_crossentropy")

1 个答案:

答案 0 :(得分:0)

seq2seq / autoencoder由处理输入的编码器和生成输出的解码器组成。在训练期间,输入被提供给编码器,并且编码器的输出被提供给解码器。目标是解码器的输出应该接近输入。所以这就是在解码器的输出和输入之间计算损耗的方式。

在高级伪代码中:

x成为输入。

x' = decoder(encoder(x))
loss = f(x', x)

希望有所帮助!

有一个很好的解释here。 维基百科page也非常详细。