훈련은 다음과 같은 훈련 반복 루프(training loop) 안에서 일어납니다. 손실이 충분히 낮아질 때까지 반복 루프 안에서 이런 단계가 반복됩니다.
1. 훈련 샘플 x와 이에 상응하는 타깃 y_true의 배치를 추출합니다.
2. x를 사용하여 모델을 실행하고(정방향 패스(forward pass) 단계), 예측 y_pred를 구합니다.
3. y_pred와 y_true의 차이를 측정하여 이 배치에 대한 모델의 손실을 계산합니다.
4. 배치에 대한 손실이 조금 감소되도록 모델의 모든 가중치를 업데이트합니다.
결국 훈련 데이터에서 모델의 손실, 즉 예측 y_pred와 타깃 y_true의 오차가 매우 작아질 것입니다. 이 모델은 입력에 정확한 타깃을 매핑하는 것을 학습했습니다. 전체적으로 보면 마술처럼 보이지만 개별적인 단계로 쪼개어 보면 단순합니다.
단계 1은 그냥 입출력 코드이므로 매우 쉽습니다. 단계 2와 단계 3은 몇 개의 텐서 연산을 적용한 것뿐이므로 이전 절에서 배웠던 연산을 사용하여 이 단계를 구현할 수 있습니다. 어려운 부분은 모델의 가중치를 업데이트하는 단계 4입니다. 개별적인 가중치 값이 있을 때 값이 증가해야 할지 감소해야 할지, 또 얼마큼 업데이트해야 할지 어떻게 알 수 있을까요?
한 가지 간단한 방법은 모델에 있는 가중치 행렬의 원소를 모두 고정하고 관심 있는 하나만 다른 값을 적용해 보는 것입니다. 이 가중치의 초깃값이 0.3이라고 가정합시다. 배치 데이터를 정방향 패스에 통과시킨 후 모델의 손실이 0.5가 나왔습니다. 이 가중치 값을 0.35로 변경하고 다시 정방향 패스를 실행했더니 손실이 0.6으로 증가했습니다. 반대로 0.25로 줄이면 손실이 0.4로 감소했습니다. 이 경우에 가중치를 - 0.05만큼 업데이트한 것이 손실을 줄이는 데 기여한 것으로 보입니다. 이런 식으로 모델의 모든 가중치에 반복합니다.