탑-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%는 예제의 점수로 직접 계산한 값입니다.
다음 편