Temperature

Temperature (온도)

Temperature는 무작위성과 밀접하게 연관되는, LLM(언어 모델)에서 아주 기본적인 파라미터예요. 그리고 가장 널리 쓰이는 인기 있는 샘플러 설정이기도 해요. 이 개념은 같은 입력에서 다양한 범위의 출력을 얻기 위해 다양성(diversity)을 탐구하는 데 핵심적인 역할을 해요. Temperature 값이 낮으면 결정적(deterministic)인 동작과 연관되어, 모델이 더 가능성 높은 응답을 예측하고 정확도에 집중해요. 반대로 Temperature 값이 높으면 창의성과 연관되어, 모델이 더 다양하고 창의적인 응답을 만들어내요.

출처: 문서

본문

LLM이 많은 양의 데이터로 학습되면, 그 텍스트 코퍼스에서 패턴을 학습해서 텍스트를 완성할 때 예측할 수 있는 가능한 토큰 집합을 만들어요. 더 구체적으로, LLM에 질문을 하면 단일 토큰이 아니라 토큰 집합을 출력하기 시작해요. 각 토큰에 확률이 붙은 토큰 집합으로 응답하죠. 그 확률은 softmax 함수로 계산되는데, 이 함수는 각 토큰이 얼마나 가능성이 높은지에 따라 연관된 logits을 입력받아서 합이 1이 되는 확률로 변환해요. 이 softmax 함수에서 Temperature가 하는 일은 softmax가 이 logits을 어떻게 스케일링할지에 영향을 주는 거예요. Temperature가 높을수록 logits 간의 차이가 부드러워져서 확률 분포가 더 평평해져요. 반대로 Temperature가 낮을수록 높은 logits을 더 우선시하고 크게 반영하며 낮은 logits을 줄여서, logits 간의 차이를 증폭해요.

Softmax 공식 (Softmax Formula)

후보 토큰 i와 logits yi에 대한 softmax 함수는 이렇게 정의돼요:

$$ \text{softmax}(y_i) = \frac{e^{y_i / T}}{\sum_{k=1}^{n} e^{y_k / T}} $$

여기서:

  • e는 오일러 수(Euler's number)예요.
  • T는 Temperature 파라미터예요.
  • n은 어휘(vocabulary)의 크기예요.
  • yi는 i번째 후보 토큰의 logit이에요.
  • yk는 어휘에 있는 모든 후보 토큰 k의 logits이에요.

이 공식은 logits을 어휘에 대한 확률 분포로 정규화하는데, Temperature 파라미터 T가 분포의 예리함(sharpness)을 제어해요.

원래의 확률 분포는 Temperature 1인 것과 동등해요.

Note: Temperature에 null(0) 값을 쓰면 보통 greedy sampling을 대신 선택하고, 확률이 가장 높은 토큰이 항상 선택돼요.

시각화 (Visualisation)

기본 원리와 확률 분포에 미치는 영향을 더 잘 이해하기 위해, 간단한 프롬프트로 Temperature를 시각화해 볼게요: "What is the best mythical creature? Answer with a single word."

(4비트 정밀도의 Mistral 7B에서 서로 다른 Temperature 값과 상위 5개 토큰의 분포를 비교한 막대그래프예요.)

보시다시피 Temperature는 확률 분포에 상당한 영향을 줘요. Temperature가 null이면 답이 항상 "Dragon"이지만, Temperature를 높이면 다른 토큰으로 답할 수 있게 돼요. 이 경우 단순히 0.2로 올리면 다음 토큰으로 "Un"을 얻을 수 있어서 "Unicorn" 같은 생물을 예측할 수 있어요! 3번째 토큰은 다시 "Dragon"이라고 답하기 위한 "Drag"이고, 4번째는 "Pegasus"의 시작이며, 5번째는 "Phoenix"예요! Temperature 값을 바꾸면 원래 통계적으로 선택될 가능성이 낮았던 토큰들이 더 선택될 가능성이 생겨서, 그 토큰들에 더 많은 기회를 주고 LLM의 출력을 더 다양하게 만들어요!

Temperature를 포함한 샘플러 설정을 직접 실험해 보려면 artefact2에서 해볼 수 있어요. LLM 샘플러와 그 설정을 시각화하고 이해하기에 좋은 플레이그라운드예요.

최적의 Temperature (The Best Temperature)

모든 사용 사례에 적용되는 "하나로 통하는(one-size-fits-all)" Temperature는 없어요. 다만 여러분의 애플리케이션에 맞는 최적을 찾아 결정하고 실험하는 데 도움이 되는 힌트는 있어요.

결정성 (Determinism)

여러분의 애플리케이션이 모델의 결정성을 요구하는지 생각해 보세요. 같은 입력에 항상 같은 응답을 요구할 정도로 작업이 구체적인가요? 항상 최고의 가장 정확한 응답을 얻는 게 중요한가요? 이런 애플리케이션은 수학, 분류(Classification) 작업, 헬스케어, 추론과 관련될 수 있어요. 높은 수준의 정확도가 필요한 분야라면 결정적인 모델이 필수예요! 이런 경우엔 아주 낮은 Temperature 값이 정답이에요. 필요하다면 각 생성에 약간의 유일성을 더하려고 null을 쓰지 않기도 해요.

예를 들어 문서를 정확하게 분류하는 분류 에이전트를 만들고 싶다고 해볼게요. Temperature를 null로 두고 항상 최선의 토큰을 고르는 게 가장 합리적이에요.

하지만 예를 들어 수학 분야의 채팅 어시스턴트를 만드는 작업이라면, 매우 정확한 응답을 위해 결정적인 모델이 필요하긴 하지만, 비슷한 질문을 할 때마다 너무 반복적이지 않길 바라거나 응답을 조금 다르게 재생성할 수 있길 바랄 거예요. 이 경우 아주 낮은 Temperature 값을 유지하되, 약간의 무작위성은 여전히 원하므로 null 값은 피해야 해요.

창의성 (Creativity)

다양한 출력이 필요하신가요? 서로 다르고 유일한 텍스트를 생성하는 창의적인 모델이 필요한가요? 보통 이런 요구 사항은 브레인스토밍 아이디어, 소설 쓰기 보조, 독창적인 슬로건 만들기, 역할극(roleplaying) 같은 작업과 연결돼요. 보통은 정확도가 상당히 덜 중요하고 더 창의적인 무언가가 필요한 사용 사례예요. 이런 경우 높은 Temperature 값이 합리적이지만, 문제는 상한선이 뭐냐는 거예요.

보통 과하게 높은 Temperature를 넣는 건 피하고 싶어요. 왜냐하면 모델이 너무 무작위해져서 지시를 따르지 못하고 헛소리를 하며 전혀 도움이 안 될 수 있거든요! 출력의 유일성을 높여 독창성과 창의성을 얻으면 품질과 정확도를 해칠 수도 있다는 트레이드오프를 항상 고려하는 게 중요해요. 이런 사용 사례에서는 보통 정확도가 우선순위가 아니기도 하죠.

무엇을 배웠나요? (What Have We Learnt?)

  1. Temperature의 역할: Temperature는 LLM이 생성하는 출력의 다양성과 창의성에 영향을 주는 핵심 파라미터예요. 낮은 Temperature는 더 결정적이고 정확한 응답을, 높은 Temperature는 더 많은 무작위성과 창의성을 가져와요.
  2. Softmax 함수: Temperature 파라미터는 logits을 확률 분포로 정규화하는 softmax 함수에 직접 영향을 줘요. 높은 Temperature는 분포를 평평하게 만들어 가능성이 낮은 토큰의 확률을 높이고, 낮은 Temperature는 분포를 예리하게 만들어 가장 가능성 높은 토큰을 선호해요.
  3. 출력에 미치는 영향: Temperature를 조정하면 서로 다른 애플리케이션에 맞게 모델 동작을 제어할 수 있어요. 수학이나 분류처럼 높은 정확도와 결정성이 필요한 작업에는 낮은 Temperature가 선호돼요. 반대로 브레인스토밍이나 소설 쓰기 같은 창의적인 작업에는 높은 Temperature가 더 적합해요.
  4. 트레이드오프: 창의성을 높이려고 Temperature를 올리면 부정확성도 늘어나서 덜 일관성 있거나 덜 관련성 있는 출력으로 이어질 수 있어요. 창의성과 일관성의 균형을 맞추는 건 LLM을 효과적으로 사용하는 데 중요해요.
  5. 실험: 모든 것에 적용되는 하나의 Temperature 값은 없어요. 특정 애플리케이션에 맞는 최적의 Temperature를 찾으려면 실험이 매우 중요해요. artefact2 같은 도구는 서로 다른 Temperature 설정의 효과를 시각화하고 이해하는 데 유용해요.

다른 샘플러 설정도 확인해 보세요 -> Sampling

더 알아보기 (Learn more)