본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

학습 기법 Teacher Forcing이란?: 오류 전파(Error Propagation) , Exposure Bias , teacher_forcing_ratio , teacher_force

Teacher Forcing이란?
Seq2Seq, RNN, LSTM, GRU와 같은 순차 생성(Sequence Generation) 모델을 학습할 때 사용하는 학습 기법

모델이 이전 시점에서 예측한 단어를 다음 입력으로 사용하는 대신, 정답(Ground Truth) 단어를 다음 입력으로 사용하는 방법으로  모델이 더 빠르고 안정적으로 학습할 수 있다.

 

영어를 한국어로 번역할때 Decoder는 단어를 하나씩 생성한다.
Teacher Forcing을 사용하지 않는 경우 모델이 첫 번째 단어를 틀리게 예측했다면 다음 입력도 오답이 된다. 즉 계속 오류가 누적될 수 있다. 오류 전파(Error Propagation)

 

하지만  Teacher Forcing을 사용하는 경우 모델이 틀리더라도 다음 입력은 항상 정답을 넣는다.
모델 출력이 틀려도 무시하고 입력하는것.  모델이 이전에 틀렸더라도 다음 단계는 정답을 기반으로 학습한다.

학습 속도가 빠르고 매 단계에서 올바른 문맥을 입력받기 때문에 모델이 안정적으로 학습된다.
잘못 예측한 단어가 다음 단계의 입력으로 사용되지 않는다.
모델이 정답 시퀀스를 기준으로 학습하므로 손실(Loss)이 더 빠르게 감소하는 경우가 많다.

가장 큰 문제는 학습할 때와 실제 사용할 때의 입력 방식이 달라 학습 때는 항상 정답을 보지만, 실제 번역이나 문장 생성에서는 정답이 없으므로 자신의 예측만 사용해야 한다. Exposure Bias

즉 실제환경에 약할 수 있다.  정답을 봐오면서 학습했기 때문에 실제 추론에서 첫 번째 예측이 틀리면 이후 오류가 연쇄적으로 발생할 수 있는것. 

실제로 100% Teacher Forcing만 사용하는 경우는 많지 않고 
teacher_forcing_ratio = 0.5
로 50% 확률로 정답을 입력,  50% 확률로 모델의 예측을 입력해  학습과 추론의 차이를 줄일 수 있다.

import random

teacher_forcing_ratio = 0.5

for t in range(target_length):
    output, hidden = decoder(input, hidden)

    # Teacher Forcing 여부 결정
    teacher_force = random.random() < teacher_forcing_ratio

    # 가장 높은 확률의 단어 선택
    top1 = output.argmax(1)

    if teacher_force:
        # 정답 단어를 다음 입력으로 사용
        input = target[t]
    else:
        # 모델이 예측한 단어를 다음 입력으로 사용
        input = top1


* `teacher_forcing_ratio = 0.5`: 50% 확률로 Teacher Forcing을 적용한다.
* `teacher_force`: 난수를 이용해 Teacher Forcing 적용 여부를 결정한다.
* `target[t]`: 정답 단어
* `top1`: 모델이 예측한 단어

 

 



이러한 Teacher Forcing의 단점을 줄이기 위해 여러 기법이 제안되었다.

Scheduled Sampling: 학습 초반에는 정답을 많이 사용하고, 학습이 진행될수록 모델의 예측을 점점 더 많이 사용한다.
Professor Forcing: 학습 시와 추론 시의 동작 차이를 줄이도록 추가적인 학습을 수행한다.
Transformer 기반 모델: 여전히 Teacher Forcing을 활용해 학습하지만, Self-Attention 구조 덕분에 RNN 계열보다 긴 문맥을 더 효과적으로 처리한다.