19.2 자기회귀 모델

실습 · 연습문제 1개

온도와 nucleus(top-p) 필터 구현하기 top-p-filter

자기회귀 모델은 매 step 다음 토큰의 logit 벡터 z∈RV\mathbf{z} \in \mathbb{R}^V를 낸다. 함수 sample_probs(logits, temperature=1.0, top_p=1.0)를 완성해, 샘플링에 실제로 쓰는 확률 벡터를 반환한다.

  1. 온도: pi=exp⁡(zi/T)/∑jexp⁡(zj/T)p_i = \exp(z_i / T) / \sum_j \exp(z_j / T). 큰 logit에서도 overflow가 나지 않도록 최댓값을 빼고 지수를 취한다.
  2. nucleus(top-p): 확률이 큰 순서로 토큰을 더해 가며, 누적확률이 처음으로 top_p 이상이 되는 가장 작은 집합만 남긴다. 나머지 토큰의 확률은 0으로 만들고, 남은 확률의 합이 1이 되도록 다시 정규화한다.
    • top_p = 1.0이면 아무것도 버리지 않는다.
    • 가장 큰 확률 하나가 이미 top_p 이상이면 그 토큰 하나만 남는다.
    • 확률이 같은 토큰끼리의 순서는 테스트에 영향을 주지 않는다.
인자 의미
logits (V,) 실수 배열
temperature 양수. 1보다 작으면 분포가 뾰족해지고, 크면 평평해진다
top_p (0,1](0, 1]

반환값은 (V,) 배열이고, 합이 1이며, 버린 토큰은 정확히 0이다. 온도를 먼저 적용한 뒤 그 분포에 top-p를 적용한다.

확인 예: 확률 [0.5,0.2,0.15,0.1,0.05][0.5, 0.2, 0.15, 0.1, 0.05]에 top_p=0.8을 적용하면 누적확률 0.5, 0.7, 0.85에서 처음으로 0.8을 넘으므로 앞의 세 토큰이 남고, 결과는 [0.5,0.2,0.15]/0.85[0.5, 0.2, 0.15]/0.85와 나머지 0이다.