① 티처포스(teacher_force)는 seq2seq(인코더-디코더) 모델에서 많이 사용되는 기법입니다. 티처포스는 다음 그림과 같이 번역(예측)하려는 목표 단어(ground truth라고도 함)를 디코더의 다음 입력으로 넣어 주는 기법입니다.
▲ 그림 10-19 티처포스
티처포스를 사용하면 학습 초기에 안정적인 훈련이 가능하며, 기울기를 계산할 때 빠른 수렴이 가능한 장점이 있지만 네트워크가 불안정해질 수 있는 단점이 있습니다.
모델 훈련을 위한 함수를 정의합니다. 여기에서는 모델의 오차를 계산하는 부분만 정의합니다.
코드 10-32 모델의 오차 계산 함수 정의
teacher_forcing_ratio = 0.5
def Model(model, input_tensor, target_tensor, model_optimizer, criterion):
model_optimizer.zero_grad()
input_length = input_tensor.size(0)
loss = 0
epoch_loss = 0
output = model(input_tensor, target_tensor)
num_iter = output.size(0)
for ot in range(num_iter):
loss += criterion(output[ot], target_tensor[ot]) ------ 모델의 예측 결과와 정답(예상 결과)을 이용하여 오차를 계산
loss.backward()
model_optimizer.step()
epoch_loss = loss.item() / num_iter
return epoch_loss