[VLM] 답변 생성에 대한 것

leehyuna·2024년 9월 12일

LLM이 다양한 답변을 내놓는 이유

  • LLM에는 자연어가 아닌 tokenize된 token ID들이 입력됨

  • LLM의 output은 주어진 입력 token 다음에 올 가장 적합한 token을 예측하는 수치화된 값으로, LLM이 알고있는 모든 Token을 대상으로 이 수치를 계산하고, 이 값을 Logit이라고 부름

  • Output의 첫번째 logit은 token ID 1번의 값, 두번째 logit은 token ID 2번의 값, 이런식으로 logit의 순서는 token ID와 일치

  • logit들은 softmax 함수에 의해 0~1 사이의 확률로 변환됨

  • 일반적으로 큰 logit이 높은 확률로 갖게 됨

  • 만약 가장 큰 확률을 갖는 token만을 선택한다면 같은 입력에 대해 항상 같은 답변만을 생성할 것.

  • 하지만 LLM은 각 Token이 갖는 확률을 바탕으로 전체 token의 확률 분포를 만들고, 이 분포 안에서 다음 token을 sampling 하여 선택

  • 즉, 높은 확률을 갖는 token이 낮은 확률의 token보다 높겠지만, 반드시 선택된다는 보장은 없음

  • 이처럼 token은 확률적으로 선택되기 때문에 LLM의 답변은 물어볼 때마다 바뀌게 됨

문장 생성의 다양성을 조정하는 4가지 생성 파라미터

  • LLM은 다음 token을 확률 분포 하에서 선택하기 때문에, 이 확률 분포를 적절히 조정하면 생성될 문장의 다양성을 조정할 수 있음
  • 확률 분포를 조정하는 parameter를 생성 파라미터라고 부름 (Inference parameter 등 다른 용어로도 불림)
  • 이러한 생성 파라미터는 여러가지가 있는데, 대표적인 생성 파라미터로는 Temperature, Top_K, Top_P, Repetition_Penalty가 있음

(1) Temperature

  • LLM의 답변을 더 창의적으로 혹은 더 보수적으로 조정할 수 있도록 해줌
  • 관련 수식은 아래 링크 참고
  • Temperature가 1보다 크면 token의 확률 차이가 더 좁아지므로 선택될 수 있는 token의 범위가 더 넒어지고, 이는 더 창의적이고 실험적인 답변 생성으로 이어짐
  • Temperature가 1보다 작으면 각 token이 선택된 확률 차이가 더 벌어짐.(확률이 높은 단어는 더 높게, 낮은 단어는 더 낮게) 따라서, 확률이 높은 token이 선택된 가능성이 더 커지고 보수적인 답변 생성으로 이어짐

(2) Top_K

  • Top_K는 조금 더 보수적인 대답을 원할 때 사용할 수 있는 파라미터
  • 확률이 높은 k개의 token만을 예측 대상 token으로 한정함으로써 낮은 확률의 token이 선택될 확률을 0으로 만듦
  • 결과적으로 k가 작아질수록 더 보수적인 답변이 생성되며 극단적으로 k가 1일 때는 항상 같은 답변만을 생성하게 됨

(3) Top_P

  • Top_P는 Top_K와 마찬가지로 보수적인 대답을 원할 때 사용할 수 있는 파라미터
  • Token의 확률을 큰 순서대로 누적했을 때 p가 되는 것까지만 남기고 나머지는 전부 0으로 변경
  • Top_K와 마찬가지로 확률이 높은 Token만을 예측 대상 Token으로 한정함으로써 낮은 확률의 Token이 선택될 확률을 0으로 만듦
  • p가 작아질수록 높은 확률의 token만이 살아남으므로 더 보수적인 답변이 생성
  • p가 1일 때는 전체 token을 대상으로 예측하게 되므로 Top_P를 적용하지 않은 것과 같은 효과를 갖게 됨

(4) Repetition_Penalty

  • 한번 등장했던 token에 penalty를 부여하여 다음 예측에서는 선택될 확률을 낮춰줌으로써 문장이 더욱 다양한 단어로 구성될 수 있도록 함

참고
https://huggingface.co/docs/transformers/v4.44.2/en/main_classes/text_generation#transformers.GenerationConfig
https://www.sktenterprise.com/bizInsight/blogDetail/skt/9622

profile

0개의 댓글