작성
·
41
1
안녕하세요 교수님.
챗봇 부분 공부하다가 질문이 생겨서 남깁니다.
기존 teacher forcing 학습 방식을 위해 encoder와 decoder를 포함한 모델을 따로 만들고, 이후에 decoder 모델을 다시 만든 다는 것으로 이해했습니다.
하지만, 맨 마지막 모델인 decoder에서 output에 decoder context vector도(h, c) 같이 포함되는지 궁금합니다. (왜 Dense layer를 통과한 output과 context vector를 합치는지 이해가 잘 안갑니다.)
감사합니다.
decoder_input_h = Input(shape=(LATENT_DIMS, ), name='DECODER_INPUT_H') # hidden
decoder_input_c = Input(shape=(LATENT_DIMS, ), name='DECODER_INPUT_C') # cell
decoder_input_s = Input(shape=(1, ), name='DECODER_INPUT_S') # single
# context_vector(encoding에서 나온 값)
context_vector = [decoder_input_h, decoder_input_c]
x = decoder_embedding_layer(decoder_input_s)
x, h, c = decoder_lstm_layer(x, initial_state=context_vector)
decoder_output = decoder_dense_layer(x)
decoder_context_vector = [h, c]
final_decoder_model = Model(inputs=[decoder_input_s, context_vector], outputs=[decoder_output, decoder_context_vector])
final_decoder_model.summary()
답변 1
1
decoder의 출력에 context vector (h, c)
를 포함하는 이유는,
추론 단계에서 다음 시점의 LSTM 상태로 전달하기 위해서입니다.
Dense layer
는 예측 토큰을 생성하는 데 사용되고, (h, c)
는 다음 시점의 decoder 상태 유지를 위한 것이므로 두 출력을 "합치는" 게 아니라 목적이 달라서 함께 출력하는 것입니다.
왜냐하면 LSTM 은 장, 단기 기억 장소 두가지를 초기값으로 필요로 하기 때문입니다.
좋은 질문 감사합니다.
감사합니다.