1. 서론
생 로짓 (Raw logit)으로부터 파라미터를 고려하여 최종 출력을 선택하는 확률을 계산하는 방법을 정리했습니다.
2. 학습한 내용
- 생 로짓 (Raw logits)으로부터 어떤 처리를 거쳐 최종적인 샘플링 확률이 되는지
2.1 정의
생 로짓 (Raw logit, 생 스코어)에 대하여
**생 로짓 (Raw logit)**은 모델의 출력 헤드(Output head)가 각 어휘 토큰(Vocabulary token)에 대해 내보내는 "변환되지 않은 스코어"
직관적으로는 "다음에 나올 후보 토큰 각각에 대한 점수의 집합"이며, 아직 temperature나 repetition_penalty 등으로 변환되기 전의 값을 가리킨다.
생 로짓이 어디서 오는가
모델은 최종 은닉 상태(Final hidden state, "직전까지의 문맥 정보를 응축한 벡터")를 출력하고, 이를 모델 내부의 어휘 토큰 벡터와 내적(Inner product)함으로써 직전 토큰으로부터 다음에 올 법한 어휘를 연관시킨다. 그것을 스코어로 내보내는 것이 바로 생 로짓 (Raw logits)이다.
간단한 예
어휘 후보: ["the", "cat", "sat", "."]
생 로짓 (Raw logit): (x_{\text{the}}=2.5,; x_{\text{cat}}=1.8,; x_{\text{sat}}=0.2,; x_{.}=-0.5)
이것들이 먼저 (\hat{x}_i)로 변환되고 (temperature나 rep_penalty의 영향을 받음), 그 후 top-k/top-p/softmax에 의해 확률화되어 최종적으로 샘플링된다.
・
어떤 토큰 i의 생 로짓 (모델 헤드 출력)
・
temperature
(다음 장의 일반식에서 간략화하기 위해 이번 정의에서는 T라고 둠)
로짓을 스케일링(Scaling)하여 확률 분포를 날카롭게 만들거나 평평하게 만든다.
・
repetition_penalty 파라미터
(다음 장의 일반식에서 간략화하기 위해 이번 정의에서는 θ라고 둠)
이미 나온 토큰의 로짓을 감쇄(Decay) 또는 증폭(Amplify)하여 "반복"을 억제한다.
・
기생성 토큰의 집합
・repetition_penalty
・top_p (nucleus sampling)
확률이 높은 순으로 나열하여, 누적 확률이 p에 도달할 때까지의 토큰만 남긴다.
・top_k
로짓이 높은 상위 k개의 토큰만 남겨서 샘플링한다.
2.2 처리 흐름 (일반식)
전체상
생 로짓 x_i → ①rep_penalty → ②temperature → ③ top_k → ④ top_p → ⑤ softmax + sample
①rep_penalty
이미 나온 토큰(i∈g)에 대해서만 부호를 다르게 취급한다. 양수의 로짓은 θ로 나누고, 음수의 로짓은 θ를 곱하여 둘 다 값을 작게(즉, 확률을 낮게) 만든다. 아직 나오지 않은 토큰(i∉g)은 그대로 둔다.
(음수의 로짓을 θ(>1)로 나누면 절대값이 작아져(예: −10÷1.1=−9.1), 확률이 올라가 버리기 때문에, 곱셈으로 처리하여 절대값을 더욱 크게 만든다(예: −10×1.1=−11)).
②temperature
1단계의 출력을 모든 토큰에 일괄적으로 T로 나눈다.
③top_k
나온 토큰들의
로짓 값이 큰 순서대로 k번째 토큰의 로짓을 취득
로짓을 임계값(Threshold)으로 사용
임계값보다 로짓이 큰 후보라면 그대로 통과시키고, 임계값보다 낮으면 로짓의 값을 −∞로 만들어 절대 선택되지 않는 선택지로 만든다.
④top_p
상위 k개를 더욱 압축
구체적으로는 확률의 누계가 p가 될 때까지의 후보를 선택한다.
먼저 소프트맥스 (Softmax)를 적용하여, top_k로 압축된 토큰들의 로짓을 합계가 1인 확률 분포로 만든다 (이때 −∞로 처리된 후보는 확률이 0이 된다). 단, 이 확률는 "어떤 후보를 남길 것인가"를 결정하기 위한 일시적인 것이며, top_p의 출력 자체는 어디까지나 로짓이다.
다음과 같은 확률 분포가 완성됨 (이미지)
그것들을 누적하면 1이 됨 (k 이후는 값이 0)
여기서 top_p가 0.6이라면 아래의 3개 후보만 남기고, 벗어난 후보는 로짓을 −∞로 만든다 (확률을 0으로 만드는 것은 다음 단계인 ⑤의 softmax이다).
확률로부터 판단하여 로짓을 변환
⑤ softmax + sample
④에서 남은 로짓(벗어난 후보는 −∞)에 다시 한번 softmax를 적용한다. −∞는
④의 예시라면, 합계가 0.6이었던 확률이 여기서 합계 1.0으로 교정된다.
④의 softmax는 "후보를 남길 것인가"를 결정하기 위한 것이고, ⑤의 softmax는 "최종적인 확률 분포를 만들기" 위한 것이다. 역할이 다르기 때문에 softmax가 두 번 등장한다.
마지막으로 이 확률 분포로부터 단 1개의 토큰만을 샘플링 (sampling)한다. 확률이 높을수록 선택될 가능성이 높지만, 반드시 최댓값이 선택되는 것은 아니다 (이 점이 greedy = argmax 방식과의 차이점이다).
위의 예로 들면
$P(u)$의 경우
$P(u) = 0.3$일 때
$P(u) = 0.6$일 때
여기서 seed를 고정하면 생성되는 $u$가 동일한 난수열 (random number sequence)이 된다. 즉, 각 토큰을 생성할 때 나오는 난수의 순서가 동일해진다.
선택된 토큰이 다음 1개 토큰의 출력이 되며, 다시 raw logit 계산 단계로 돌아가 루프 (loop)를 반복한다.
참고
Discussion