본문으로 건너뛰기

© 2026 Molayo

r/LocalLLaMA분석2026. 06. 15. 09:14

왜 4-bit GPTQ는 모델의 Perplexity를 망가뜨리지 않을까요? 보정 수학 공식을 처음부터 직접 유도해 보았습니다

요약

GPTQ 양자화 과정에서 가중치 손실을 보상하기 위해 주변 가중치를 업데이트하는 수학적 원리를 상세히 분석합니다. 역 헤시안(Inverse Hessian)과 라그랑주 승수법을 사용하여 업데이트 규칙을 유도하고, 이를 PyTorch 코드로 구현하는 과정을 다룹니다.

핵심 포인트

  • GPTQ는 가중치 간의 상관관계를 고려하여 손실을 최소화함
  • 역 헤시안을 사용하여 주변 가중치의 조정량을 계산
  • Cholesky 분해를 사용하여 수치적 안정성 확보
  • C-contiguous 메모리 구조를 고려한 효율적인 구현 방식 설명

저는 아주 오랫동안 GPTQ 양자화 (GPTQ-quantized) 모델을 로컬에서 실행해 왔지만, 하나의 가중치 (weight)를 양자화한 다음 그 손실을 보상하기 위해 다른 모든 가중치를 업데이트하는 작동 단계가 실제로 어떻게 이루어지는지는 이해하지 못했습니다. 그래서 이를 기초부터 직접 유도하여 정리해 보았습니다. 요약하자면 다음과 같습니다: GPTQ는 가중치를 독립적인 것이 아니라 상관관계가 있는 것으로 취급합니다. 하나의 가중치를 4-bit 그리드에 강제로 맞출 때, 레이어 입력의 역 헤시안 (inverse Hessian)을 사용하여 주변 가중치들을 정확히 얼마나 조정해야 손실을 흡수할 수 있는지 계산합니다. 이 포스트에서는 라그랑주 승수 (Lagrange multipliers)를 사용하여 해당 업데이트 규칙을 유도하고, 숫자가 어떻게 변하는지 직접 확인할 수 있도록 아주 작은 2-피처 (2-feature) 예시를 수기로 풀어보며, 이를 행(row)에 대한 Python 루프 없이 모든 출력 뉴런을 한 번에 업데이트하는 torch.outer 기반의 벡터화된 PyTorch 코드로 변환합니다. 또한 실제 적용 시 문제가 되는 부분들도 다룹니다: 1% 헤시안 댐핑 (Hessian dampening), 실제 프로덕션 코드에서 왜 생(raw) 역행렬 대신 Cholesky 분해 (Cholesky decomposition)를 사용하는지 (역행렬은 부동 소수점 오차를 누적시키고 큰 행렬에서 값이 폭발함), 그리고 왜 열(column) 대신 헤시안 행(row)을 슬라이싱하는지 (C-contiguous 메모리 구조) 등을 설명합니다. 링크: https://sudhirpol522.github.io/blog/demystifying-gptq/ 모든 단계에 대해 질문이 있으시면 기꺼이 답변해 드리겠습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0