오늘은 12월 14일이다.
사실 챌린지 기간은 이미 2주나 지나 버렸지만, 그렇다고 후기를 포기할 순 없었다.
이렇게 남기는 TIL이 나중에 피와 살이 되기 때문.
코드 자체보다는 의미에 집중해서 적어보려고 한다.

1. 모델의 손실 계산
GPT 모델을 만든 후에 어떤 방식으로 손실을 계산할지에 대한 내용이다.
GPT는 입력된 토큰을 바탕으로, 다음에 출력할 토큰의 확률을 계산한다.
이렇게 나온 확률들 중, 최상위의 확률을 가진 몇개의 토큰을 남기고 로그, 양수화 등을 거친 크로스 엔트로피 손실을 구한다.

크로스엔트로피 손실은 정답을 얼마나 확신했는지를 그대로 음수로 측정한 값이기 때문에, 평균 로그확률이 0에 가까워질수록 손실은 감소한다.
여기서 궁금했던 것은 로짓, 확률, 타깃 토큰확률, 로그 확률, 평균로그확률, 음의 평균 로그확률을 했는데 왜 모델의 정확도가 올라가는지였다.
이게 정답의 확률을 어떻게 높여줄 수 있을까?

알고보니 내가 로짓함수가 뭔지 잘 모르고 있었다.
쉽게 말하자면 모델은 실수 벡터인 로짓(logits)을 출력하고, softmax를 통해 이 점수들의 상대적 차이를 강조하여 확률 분포로 변환한다.
이 과정에서 큰 점수는 더 큰 확률을, 작은 점수는 거의 0에 가까운 확률을 갖게 된다.
그리고 확률은 0~1 사이의 값이고 log1 = 0 이므로 로그확률이 0에 가까울수록 정답에 가까운 토큰을 선택하게 된다.
따라서 손실(loss)은 정답 토큰의 로그확률이 0에 가까워지도록 모델 파라미터를 업데이트하게 만드는 신호다.
2. LLM 훈련과 디코딩 전략

이제 앞에서 했던 모든 과정을 통해 손실을 평가하고, 가중치를 업데이트 하는걸 반복하면 LLM을 훈련시킬 수 있다.
이때 정답에 가까운 토큰을 추론하기 위한 두 가지 전략이 인상적이었다.
만약 모델이 토큰을 선택할 때, 그리디 디코딩으로 확률이 높은 토큰만 선택한다면 응답의 다양성이 없어진다.
따라서 각 로짓을 숫자값(온도)로 나누어 응답의 다양성을 준다.
이것을 온도 스케일링이라고 한다.
또 하나는 탑-k 샘플링인데, 확률이 높은 k개의 토큰을 선택한 뒤 그 안에서 응답을 출력하도록 하는 것이다.
3. 후기
코드를 보면 파이토치와 함께 수학적 개념을 익혀야 하기에 눈이 자꾸 돌아갔는데, 이해하니 그리 어렵지 않다.
예전에 배웠던 손실 공식과 LLM에서의 손실 계산 방식이 조금 달라 배우는데 애먹기도 했다.
그래도 정말 깊이 알게 되어서 아이들에게 한번 가르칠만 한 것 같다.
아이들에게도 공식 자체보다는, 이해를 더할 수 있도록 하면 좋을 것 같다.
댓글을 불러오는 중...