확률, logit, sampling의 역할
오늘의 질문
앞선 글에서 LLM이 다음 token 후보에 확률을 매기고 그중 하나를 고른다고 설명했다. 그런데 이 대목에서 궁금증이 남는다.
후보 중 하나를 고른다는 게 정확히 무슨 계산인가요? 그리고 왜 똑같은 질문을 두 번 던져도 답이 다르게 나올 수 있나요?
이 글은 이 두 질문에 답한다. “고른다”는 동작을 열어보면 logit, softmax, temperature, sampling이라는 네 단계가 순서대로 나오고, 이 중 마지막 두 단계에 “같은 입력에도 다른 답이 나올 수 있는” 이유가 들어 있다.
먼저 답하기
한 문장으로 줄이면 이렇다.
모델은 후보마다 점수(logit)를 매기고, 그 점수를 확률로 바꾼(softmax) 다음, 확률 분포의 뾰족한 정도를 조절하고(temperature), 마지막으로 그 분포에서 하나를 골라낸다(sampling). 이 마지막 두 단계에 무작위성이 들어갈 수 있어서 같은 입력에도 다른 답이 나올 수 있다.
핵심은 이거다. “점수를 매기는 것”과 “확률로 바꾸는 것”과 “하나를 고르는 것”은 전부 다른 단계이고, 각 단계에서 결과가 달라질 여지가 다르게 생긴다. 점수를 매기는 계산 자체는 같은 입력이면 항상 같은 값을 낸다. 하지만 마지막에 “하나를 고르는” 단계는 항상 1등만 고르도록 정할 수도 있고, 확률에 따라 무작위로 고르도록 정할 수도 있다. 답이 매번 달라지는지 여부는 여기서 결정된다.
주제에 맞는 핵심 설명
이 다이어그램의 다섯 칸이 오늘 다룰 순서 전부다. 아래에서 한 칸씩 열어본다.
입력: 아직 확률이 아닌 점수, logit
모델이 다음 token 후보에 대해 가장 먼저 내놓는 것은 확률이 아니라 logit이라는 점수 값이다. 후보마다 하나의 숫자가 매겨지는데, 이 숫자는 음수일 수도 있고 1보다 클 수도 있으며 전체 합이 1이 되지도 않는다. 그냥 “이 후보가 다른 후보들에 비해 얼마나 그럴듯한지”를 나타내는 상대적인 크기일 뿐이다.
트랜스포머 구조를 처음 제시한 Vaswani 외의 논문 “Attention Is All You Need”(2017)는 decoder의 출력이 학습된 선형 변환을 거쳐 이런 점수 벡터로 바뀐 다음, softmax 함수를 통과해 다음 token에 대한 예측 확률이 된다고 설명한다. 즉 “점수를 매긴다”와 “그 점수를 확률로 바꾼다”가 이 논문에서부터 이미 분리된 두 단계로 다뤄지고 있다.
후보 점수를 확률로: softmax와 temperature
softmax는 logit 벡터를 받아 모든 후보의 확률 합이 정확히 1이 되도록 바꿔주는 함수다. 점수가 높은 후보일수록 더 큰 확률을 받고, 점수가 낮은 후보일수록 작은 확률을 받는다. 이 변환을 거쳐야 비로소 “몇 퍼센트의 확률로 이 후보가 선택될 것인가”라는 질문에 답할 수 있는 형태가 된다.
여기에 temperature라는 조절 장치가 하나 더 들어간다. temperature는 softmax를 적용하기 전에 logit을 얼마나 “누그러뜨릴지” 정하는 값이다. temperature가 작을수록 원래 점수 차이가 확률 차이에 더 크게 반영되어 분포가 뾰족해지고(1등 후보가 확률을 거의 독차지), temperature가 클수록 점수 차이가 덜 반영되어 분포가 평평해진다(후보들이 확률을 고르게 나눠 가짐).
날씨 예보를 예로 들어보자. 어떤 지역의 내일 날씨 후보 세 가지에 logit 점수가 이렇게 매겨졌다고 하자: 맑음 2.0, 흐림 1.0, 비 0.1. 이 점수에 각각 다른 temperature를 적용해 softmax를 계산하면 아래와 같은 확률이 나온다.
| temperature | 맑음 | 흐림 | 비 |
|---|---|---|---|
| 0.5 (뾰족하게) | 0.864 | 0.117 | 0.019 |
| 1.0 (원래 점수 그대로) | 0.659 | 0.242 | 0.099 |
| 2.0 (평평하게) | 0.502 | 0.304 | 0.194 |
가정과 계산 방법을 밝혀둔다. logit 값 2.0 / 1.0 / 0.1은 설명을 위해 임의로 정한 값이고, 실제 모델이 계산한 값이 아니다. 계산식은 표준 softmax-with-temperature 공식 p_i = exp(logit_i / T) / Σ exp(logit_j / T) 를 그대로 사용했다. 이 식과 위의 logit 값만 있으면 누구나 같은 표를 재현할 수 있다.
표를 보면 패턴이 뚜렷하다. temperature가 0.5일 때는 맑음이 확률의 86%를 가져가 사실상 거의 확정된 것처럼 보이지만, temperature가 2.0일 때는 세 후보의 확률 차이가 훨씬 줄어들어 흐림이나 비가 나올 여지도 꽤 커진다. logit 자체는 전혀 바뀌지 않았는데도, temperature 하나로 최종 확률 분포의 모양이 완전히 달라진다.
여기서 짚어야 할 한계가 있다. temperature라는 조절 장치의 존재와 동작 원리는 softmax 함수의 수학적 정의에서 직접 따라 나오는 사실이지만, 위에 인용한 논문 자체는 temperature나 sampling을 다루지 않는다. 이 논문이 다루는 범위는 “decoder 출력이 softmax를 거쳐 확률이 된다”는 부분까지이고, temperature 조절과 그 이후의 선택 과정은 이 글에서 별도로 설명을 보탠 것이다.
선택: sampling이 무작위성을 만드는 지점
확률 분포가 완성되면 마지막으로 이 분포에서 실제 token 하나를 골라야 한다. 이 단계를 sampling이라 부른다.
가장 단순한 방식은 확률이 가장 높은 후보를 무조건 고르는 것이다. 이 방식을 쓰면 같은 입력에는 항상 같은 결과가 나온다. 확률 분포를 만드는 계산 자체가 결정론적이기 때문이다.
반면 확률에 비례해서 무작위로 고르는 방식을 쓰면 이야기가 달라진다. 위 표의 temperature 1.0 상황에서 맑음이 65.9%, 흐림이 24.2%, 비가 9.9%라면, 이 비율대로 주사위를 굴리듯 하나를 뽑는다. 그러면 대부분 맑음이 나오겠지만 가끔은 흐림이, 아주 가끔은 비가 뽑힐 수 있다. 바로 이 지점이 “같은 질문을 두 번 던져도 답이 다르게 나올 수 있는” 이유다. 확률을 만드는 계산은 매번 같지만, 그 확률에서 하나를 골라내는 행위 자체에 무작위성이 있는 것이다.
정리하면 이렇다. 무작위성은 모델이 “잘 모르기 때문에” 생기는 게 아니라, 확률 분포가 만들어진 뒤 하나를 골라내는 마지막 단계에서 의도적으로 설계된 동작이다. 이 선택 방식을 어떻게 정할지(1등만 고를지, 확률대로 뽑을지, 혹은 상위 몇 개 후보로 범위를 제한한 뒤 그 안에서 뽑을지)는 다양한 변형이 있는데, 그 세부 방식까지는 이 글에서 다루지 않는다.
자주 묻는 질문
temperature를 낮추면 항상 더 정확한 답이 나오나요? 아니다. temperature는 정확도를 조절하는 장치가 아니라 분포의 뾰족한 정도를 조절하는 장치다. temperature를 낮추면 모델이 가장 그럴듯하다고 판단한 후보가 나올 확률이 높아질 뿐이고, 그 “가장 그럴듯한 후보”가 사실인지 여부는 별개의 문제다. 사실 확인이 중요한 작업에서는 temperature를 낮춰 답을 일관되게 만들 수는 있지만, 그것이 답의 정확성을 보장하지는 않는다.
temperature를 0으로 두면 어떻게 되나요? 위 공식에서 T가 0에 가까워지면 가장 높은 logit을 가진 후보의 확률이 1에 한없이 가까워지고 나머지는 0에 가까워진다. 실질적으로 “항상 1등만 고르는” 동작과 같아진다. 다만 이 극한 상황을 실제로 어떻게 계산하고 처리하는지는 구현에 따라 달라질 수 있는 세부 사항이라, 이 글에서 수학적 경향성 이상으로 단정하지는 않는다.
실무에서 같은 입력에 항상 같은 답이 나오게 만들고 싶으면 어떻게 해야 하나요? 핵심은 sampling 단계에서 무작위성을 없애는 것이다. 확률이 가장 높은 후보만 고르도록 정하면 확률을 만드는 계산 자체가 결정론적이므로 결과도 항상 같아진다. 다만 이렇게 하면 표에서 봤듯 분포가 뾰족하지 않은 상황, 즉 여러 후보의 확률이 비슷한 상황에서는 그중 하나를 골랐을 뿐 “확실히 맞다”는 의미는 아니라는 점을 함께 염두에 두는 것이 좋다.