3. Sampling 기반 디코딩 - Temperature, Top-k, Top-p

beam search까지 정리하고 나니, 확률을 최대화하는 방식만으로는 단조로운 문장밖에 못 만든다는 게 분명해졌다. 그래서 필기에 이런 질문을 적어뒀었다.

Question

확률이 낮은 단어를 더 혹은 덜 뽑히게 할 수 있을까?

확률분포에 따라 단어를 random sampling하면 출력이 매번 달라져 다양성이 생긴다. 그 분포를 어떻게 조절하고, 어떤 단어까지 후보에 넣을지를 다루는 게 sampling 기반 디코딩이다.

Temperature로 분포를 조절한다#

생성 문장의 다양성과 정확성을 조절하기 위한 하이퍼파라미터가 temperature 다. 타우라고 읽는다. softmax의 지수 안에 를 나눠 넣는다.

를 어떻게 두느냐에 따라 분포 모양이 바뀐다.

  • : 원래 큰 값은 덜 커지고 낮았던 값은 상대적으로 커진다. 분포가 평탄해진다. 흔치 않은 단어가 생성될 확률이 올라가 생성 문장의 다양성이 증가한다. 로 가면 uniform 분포가 되어, 완전히 의미 없는 문장이 생성된다.
  • : 원래 큰 값은 더 커지고 낮은 값은 더 낮아진다. 분포가 뾰족해진다. 원래 나와야 할 단어의 확률이 올라가 생성 문장의 정확성이 증가한다. 으로 가면 one-hot 분포가 되어, 가장 높은 토큰 하나만 뽑는 greedy decoding과 같아진다.

Random sampling#

가장 단순한 sampling은 분포 그대로 뽑는 random sampling이다. 다양성은 매우 높지만, 확률이 낮은 엉뚱한 토큰까지 뽑혀 이상한 문장이 생성될 가능성이 높다.

Top-k sampling#

그래서 확률분포에서 가장 확률이 높은 top k개 토큰 안에서만 random sampling을 한다. 확률이 낮은 엉뚱한 토큰을 뽑을 가능성을 비교적 줄일 수 있다.

다만 고정된 k가 분포 모양과 안 맞을 때 두 가지 단점이 생긴다.

  • 분포가 평평할 때: top k에 아쉽게 못 든 토큰이 사실 든 토큰과 확률 차이가 별로 없는데도 잘려나간다. 필기에 적은 예로, 남자와 사람의 확률 차이가 거의 없는데 사람은 top k에 못 들어가는 식이다.
  • 분포가 뾰족할 때: top k 안에 확률이 높은 토큰은 하나뿐이고 나머지 자리는 말이 안 되는 엉뚱한 토큰으로 채워질 수 있다. 그런 토큰이 후보에 끌려 들어온다.

결국 고정 k가 분포에 따라 너무 많이 자르거나 너무 적게 자르는 게 문제다.

Top-p sampling#

이 단점을 해결하는 게 top-p sampling이고, nucleus sampling이라고도 부른다. 토큰을 확률 순으로 더해가며 누적 확률이 p에 도달할 때까지 후보에 채운다. 가령 p=0.9면 확률 합이 0.9가 될 때까지 단어를 후보군에 넣는 것이다.

이렇게 하면 후보 개수가 분포 모양에 따라 알아서 바뀐다. 확률분포가 평평하면 많은 수의 단어가 후보에 포함되고, 뾰족하면 적은 수의 단어만 후보에 들어온다. 고정 k의 경직성이 사라지는 것이다. GPT나 Gemini 같은 현재의 거대 LLM들이 이 top-p sampling을 사용한다.

정리
  • Temperature 는 softmax 지수에 나눠 넣어 분포를 조절한다. 이면 평탄해져 다양성↑, 이면 뾰족해져 정확성↑, 극한은 각각 uniform과 one-hot(greedy)이다.
  • Top-k는 상위 k개 안에서만 뽑지만, 고정 k가 분포 모양과 안 맞아 평평하면 아쉽게 자르고 뾰족하면 엉뚱한 토큰을 끌어온다.
  • Top-p(nucleus)는 누적 확률 p까지를 후보로 삼아 분포 모양에 적응한다. 현재 LLM의 표준이다.

Holtzman et al. The Curious Case of Neural Text Degeneration. ICLR 2020.

댓글