작성
·
31
0
강사님 seq2seq 모델의 경우 학습할 때와 추론할 때 서로 다른 모델을 정의하여 사용하였습니다. 하지만 트랜스포머는 그렇지 않고 추론할 때도 같은 모델을 사용하고 있습니다.
두 개의 모델 모두 교사강요학습을 사용하고 있고 인코더/디코더 구조를 가지고 있는데 왜 두개가 이렇게 차이가 있는 것인지요?
답변 1
0
이 차이는 두 모델의 기본 설계와 동작 방식에서 비롯됩니다.
Seq2Seq 모델의 학습단계 디코더 입력 : 인코더의 입력 + 디코더의 입력
model_teacher_forcing = Model([encoder_inputs_, decoder_inputs_], decoder_outputs)
Seq2Seq 모델의 추론용 디코더 입력 : 디코더의 입력 + 디코더의 state
decoder_model = Model(
[decoder_inputs_single] + decoder_states_inputs, # 디코더 입력과 상태를 입력으로 받음
[decoder_outputs] + decoder_states ) # 디코더 출력과 상태를 출력으로 반환
입력이 달라지므로 모델을 달리 할 수 밖에 없습니다. 물론 학습한 가중치는 교사 학습에서 만들어진 가중치를 그대로 사용하므로 추론 단계의 디코더는 새로 만드는 것이 아니라 입력 구조만 변경해서 그냥 사용하는 것입니다.
트랜스포머 모델도 Seq2Seq와 마찬가지로 학습 시 디코더에 실제 타겟 시퀀스를 입력으로 사용합니다. 그러나 트랜스포머는 학습과 추론 시 같은 네트워크 구조를 사용할 수 있으므로 별도의 디코더 모델을 만들 필요가 없습니다.
결론적으로 이 것은 RNN 과 Transformer 의 구조 차이에서 오는 것이므로 더 자세한 내용은 080_language_translation_KerasAPI_teacherForcing 프로그램 소스와 130_transformer 프로그램 소스를 비교해 보시기 바랍니다. 단순히 RNN 과 Transformer 의 구조 차이 외에 더 특별한 의미가 존재하는 것은 아닙니다.
좋은 질문 감사합니다.