KLD는 오해받고 있다
KLD is misunderstood
핵심 요약
KLD는 모델의 품질을 측정하는 절대적인 지표가 아니며, 조작이 쉽고 오용될 위험이 크므로 주의해서 해석해야 합니다.
- KLD의 한계 — 모델의 품질을 완벽히 대변하지 못하며 조작이 매우 쉬움
- 측정 방식의 오류 — 보정 데이터와 평가 데이터가 겹치면 결과가 왜곡됨
- 대안의 부재 — 벤치마크 역시 신뢰하기 어려워 여전히 KLD가 유용한 진단 도구로 쓰임
- 개인용 벤치마크 — 사용자가 직접 자신의 작업에 맞춰 테스트하는 것이 가장 정확함
레딧 보면 KLD 수치를 무슨 양자화 모델의 성능을 가르는 절대적인 지표인 양 떠받드는 애들이 많은데, 세 줄 요약: 절대 아님.
그럼 KLD가 대체 뭘 측정하는 거냐?
베이스 모델이랑 양자화 모델에 똑같은 텍스트를 집어넣으면, 각 토큰의 로짓(logit)에서 나오는 확률 분포를 비교할 수 있거든. KLD는 기본적으로 이 분포들이 얼마나 다른지 계산한 다음에, 전체 토큰에 대해 평균을 내는 방식이야.
여기서 첫 번째로 크게 잘못되는 게, 그냥 위키피디아 글 같은 아무 텍스트나 모델에 던져주고 KLD를 계산하는 거야. 근데 그게 모델이 실제 추론할 때 보는 데이터랑 똑같다는 보장이 없거든. 생성 과정에서는 모델이 직접 뱉어낸 토큰들이 컨텍스트의 상당 부분을 차지하는데, 그냥 랜덤한 텍스트를 집어넣는 걸로는 이걸 재현할 수가 없지.
진짜 제대로 된 수치를 보고 싶으면, 베이스 모델로 직접 데이터를 생성한 다음에 그 생성된 토큰들에 대해서만 KLD를 계산해야 해. 프롬프트 토큰은 가중치를 0으로 두고 말이야.
KLD에서 두 번째로 크게 잘못될 수 있는 건, 이 수치가 조작하기가 존나게 쉽다는 거야. 특히 모델 만든 놈들이 직접 수치를 가져올 때는 더더욱 그렇지.
양자화 방식은 보통 캘리브레이션 데이터에 의존하거든. 근데 캘리브레이션에 쓴 데이터를 그대로 써서 KLD를 계산하면, 다른 모델들보다 수치가 훨씬 좋아 보이게 만들 수 있어. 설령 따로 빼둔(held-out) 데이터셋을 썼다고 주장해도, 그게 KLD를 신뢰할 수 있다는 근거는 안 돼. 캘리브레이션 데이터랑 평가 데이터가 같은 소스에서 나왔거나 분포가 비슷할 수도 있으니까.
심지어 어떤 놈들은 그 똑같은 데이터로 양자화 스케일 파라미터를 엔드투엔드로 파인튜닝하기도 해. 그러면 갑자기 자기 모델이 덩치 두 배인 모델보다 KLD가 좋게 나오는데, 정작 그 데이터셋 밖에서는 일반화가 좆도 안 되는 상황이 벌어지는 거지.
그럼 KLD는 아무 의미도 없는 거냐?
사람들이 생각하는 것만큼 대단한 의미는 없어. 이건 그냥 아주 제한된 데이터셋에서 양자화 모델이 베이스 모델이랑 얼마나 차이 나는지를 보여주는 수치일 뿐이야. KLD가 높다고 해서 양자화 모델이 네가 하려는 작업에서 무조건 실패할까? 당연히 아니지.
물론 벤치마크도 점수 놀음(benchmaxxing)이 가능하다는 건 우리 다 알잖아. 근데 우리 같은 일반인이 모델 양자화하면서 하는 점수 놀음보다 KLD 수치 조작하는 게 훨씬 쉬워. 벤치마크 점수 올리려면 빡센 하드웨어랑 컴퓨팅 자원이 필요한데, KLD 수치를 그럴싸하게 만드는 건 돈도 거의 안 들거든.
그러니까 제발 KLD를 양자화 모델의 만능 순위표처럼 취급 좀 하지 마라. 이건 그냥 진단용 도구일 뿐이지, 모델이 실제로 얼마나 좋은지를 나타내는 척도가 아니라고.

