Teacher Forcing과 Auto-regressive 생성
seq2seq decoder가 출력을 하나씩 만들어내는 방식과, 학습 때와 추론 때 입력을 다르게 주는 이유를 정리한다.
Auto-regressive 생성#
decoder는 한 시점에 한 토큰씩 출력을 만든다. 각 단계의 hidden state는 입력 시퀀스 전체에 대한 정보(context)와 직전 출력을 함께 담은 상태에서 다음 토큰을 결정한다. 그래서 직전에 만든 출력이 다음 단계의 입력으로 다시 들어간다. 이렇게 자기 출력을 다음 입력으로 되먹이는 방식이 auto-regressive 생성이다.
시작 시점에는 직전 출력이 없으므로, encoder의 마지막 hidden state로 decoder를 초기화하고 시작 토큰(<SOS>)을 첫 입력으로 넣는다.
Teacher Forcing: ground truth를 입력으로#
문제는 학습 초반이다. 모델이 만든 직전 출력 을 그대로 다음 입력으로 쓰면, 초반에는 출력이 엉망이라 그 엉망인 값을 다시 입력으로 받게 되고, 모델이 아무것도 제대로 학습하지 못할 수 있다.
그래서 학습 단계에서는 모델의 출력 대신 정답 데이터(ground truth) 을 다음 입력으로 넣어준다. 올바른 입력에서 나오는 올바른 출력을 학습하게 하는 것이다. 이걸 teacher forcing이라고 한다.
추론 Auto-regressive#
추론 단계에서는 정답 데이터 에 접근할 수 없다. 그래서 어쩔 수 없이 실제로 이전에 모델이 낸 출력 을 auto-regressive하게 다음 입력으로 제공한다.
즉 학습 때는 (정답), 추론 때는 (모델 출력)을 넣는다는 차이가 있다.
정리#
- decoder는 직전 출력을 다음 입력으로 되먹이며 한 토큰씩 만든다(auto-regressive). 시작은 encoder의 마지막 hidden state와
<SOS>다. - 학습 때는 모델 출력 대신 정답 을 입력으로 넣는다(teacher forcing). 안 그러면 초반에 학습이 안 될 수 있다.
- 추론 때는 정답을 알 수 없으니 모델 출력 을 넣는다.
댓글