Inflearn brand logo image

인프런 커뮤니티 질문&답변

jcy4023님의 프로필 이미지
jcy4023

작성한 질문수

딥러닝을 활용한 자연어 처리 (NLP) 과정 (기초부터 ChatGPT/생성 모델까지)

실습 - Simple Chatbot 만들기

encoder-decoder model 질문입니다.

작성

·

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

YoungJea Oh님의 프로필 이미지
YoungJea Oh
지식공유자

decoder의 출력에 context vector (h, c)를 포함하는 이유는,
추론 단계에서 다음 시점의 LSTM 상태로 전달하기 위해서입니다.

Dense layer는 예측 토큰을 생성하는 데 사용되고, (h, c)는 다음 시점의 decoder 상태 유지를 위한 것이므로 두 출력을 "합치는" 게 아니라 목적이 달라서 함께 출력하는 것입니다.

왜냐하면 LSTM 은 장, 단기 기억 장소 두가지를 초기값으로 필요로 하기 때문입니다.

좋은 질문 감사합니다.

jcy4023님의 프로필 이미지
jcy4023
질문자

감사합니다.

 

jcy4023님의 프로필 이미지
jcy4023

작성한 질문수

질문하기