훈련 루프
훈련은 정확히 무엇을 되풀이할까요?
한 걸음
네 가지 동작이 한 걸음입니다
묶음 하나를 넣고, 손실을 재고, 어느 쪽으로 고칠지 찾고, 조금 고칩니다. 이 한 바퀴를 한 걸음(스텝)이라고 합니다.
셋째 동작
어느 쪽으로 고치면 손실이 줄어들까
파라미터를 조금 바꿨을 때 손실이 오르는지 내리는지 알려 주는 숫자가 그레이디언트입니다. 손실이 내려가는 쪽으로 고칩니다.
그림은 파라미터 하나만 그렸습니다. 실제로는 1억 개가 넘는 파라미터의 그레이디언트를 한꺼번에 구하고, 이 계산을 역전파라고 합니다.
넷째 동작
한 번에 아주 조금만 고칩니다
한 번에 고치는 폭을 학습률이라고 합니다. 이번 훈련에서는 0.0004입니다. 폭이 크면 낮은 곳을 지나쳐 버립니다.
파라미터를 고치는 일을 맡는 도구를 옵티마이저라고 합니다. 여기서는 AdamW라는 것을 썼습니다. 이름은 몰라도 됩니다.
되풀이
9걸음이 1 에포크입니다
훈련 세트 9묶음을 한 번씩 다 쓰면 1 에포크입니다. 이번 훈련은 10 에포크, 모두 90걸음입니다. 같은 글을 열 번 보는 셈입니다.
중간 점검
5걸음마다 손실을 적어 둡니다
첫 걸음을 뗀 직후에 한 번, 그 뒤로 5걸음마다 훈련 손실과 검증 손실을 적습니다. 에포크가 끝나는 9걸음째와 18걸음째에는 글을 써 보게 합니다.
그림은 처음 두 에포크입니다. 손실을 적는 때와 에포크가 끝나는 때는 서로 다릅니다.
코드로는
가운데가 네 줄입니다
optimizer.zero_grad()준비 · 지우기loss = calc_loss_batch(…)①② 넣고 재기loss.backward()③ 방향 찾기optimizer.step()④ 조금 고치기
묶음 하나마다 이 네 줄이 돌아갑니다. 첫 줄은 준비이고, 나머지 세 줄에 앞에서 본 네 동작이 들어 있습니다. 둘째 줄이 묶음을 넣는 일과 손실을 재는 일을 함께 합니다.
준비 줄은 지난 걸음에서 구한 그레이디언트를 지웁니다. 파이토치라는 도구의 코드이고, 이름은 몰라도 됩니다.
다음 편