2017-09-22 5 views
0

Ich habe ein Problem zu verstehen, wie Back-Propagation in Encoder in Seq2seq-Modell funktioniert. Es gibt keine Beschriftungen, daher ist es nicht möglich, einen Fehler zu berechnen, der rückwärts propagiert wird, jedoch werden die Gewichte der LSTM-Schicht irgendwie aktualisiert.seq2seq - Encoder Backpropagation

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") 

Antwort

0

A seq2seq/Autoencoder besteht aus einem Codierer daß die Eingangs- und einen Decodierer verarbeitet , der die Ausgabe erzeugt. Während des Trainings wird eine Eingabe an den Codierer geliefert, und der Ausgang des Codierers wird an den Decodierer geliefert. Das Ziel ist, dass der Ausgang des Decoders nahe am Eingang sein sollte. So wird der Verlust zwischen dem Ausgang des Decoders und dem Eingang berechnet.

In hohem Niveau Pseudo-Code:

Let x der Eingang sein.

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

Hoffe, dass hilft!

Es gibt eine großartige Erklärung here. Auch die Wikipedia page ist sehr detailliert.

+0

Im Code ist ** der ** Ausgang ** des Encoders ** für den Decoder nicht vorgesehen **. Nur der interne Zustand ** der Codierer LSTM wird als Anfangszustand der Decodierer LSTM gesetzt. Deshalb bin ich verwirrt, wie Gewichte des Encoders aktualisiert werden. –