탑-k 샘플링

온도는 높이고 싶은데, pizza는 뽑히지 않게 하려면?

문제

온도를 올리면 하위 후보의 몫이 커집니다

온도 1에서는 상위 3개가 99.1%를 차지합니다. 온도 5에서는 61.7%로 줄고, 나머지 여섯이 38.3%를 가져갑니다. pizza도 그 안에 있습니다.

앞 편의 후보 9개 예제입니다. 온도는 점수를 나누는 수로, 높일수록 확률이 고르게 퍼집니다.

아이디어

점수 상위 k개만 후보로 남깁니다

k는 남길 개수입니다. k가 3이면 forward, toward, closer만 남고 나머지 여섯은 탈락합니다.

이 방법을 탑-k(top-k) 샘플링이라고 부릅니다. top은 '상위'라는 뜻입니다.

탈락시키는 법

탈락한 점수를 −∞로 바꿉니다

3등의 점수 4.51이 기준입니다. 이보다 작은 점수는 모두 −∞로 바꿉니다.

−∞는 음의 무한대로, 어떤 수보다도 작다는 표시입니다. 5강에서 뒤 단어를 가릴 때 쓴 방법과 같습니다.

다시 확률로

−∞는 확률 0%가 됩니다

−∞는 어떤 수보다도 작아서, 확률로 바꾸면 정확히 0%가 됩니다. 남은 셋이 그 몫을 나눠 받아 57.75%, 36.10%, 6.15%가 되고, 합은 다시 100%입니다.

점수를 확률로 바꾸는 소프트맥스를 한 번 더 거친 결과입니다.

k를 줄이면

k가 1이면 1등만 고르기와 같습니다

k를 줄일수록 후보가 줄어듭니다. k가 1이면 후보가 하나뿐이라, 1편의 '가장 높은 것만 고르기'와 똑같아집니다.

실습에서도 k를 1로 두면 몇 번을 실행해도 같은 글이 나왔습니다.

온도와 함께

먼저 거르고, 그다음 온도를 씁니다

상위 3개로 거른 뒤 온도 5를 쓰면, 셋 사이에서는 고르게 뽑히지만 pizza는 0.0%입니다. 다양함은 얻고 엉뚱한 토큰은 막습니다.

39.2%, 35.7%, 25.1%는 예제의 점수로 직접 계산한 값입니다.

다음 편

손잡이 두 개를 모두 달고 실제로 글을 써 봅니다

5편손잡이 두 개로 글 쓰기 9강 목록