삼치 양자화 모델의 가중치는 직접 편집할 수 있을까? AI 에이전트와 진행한 3단계 검증 실험
요약
본 기사는 삼치(ternary) 양자화된 언어 모델의 가중치를 부동소수점 변환 없이 직접 수정하는 가능성을 탐구합니다. AI 코딩 에이전트와 협력하여 모의 행렬 비교, 0.6B 실 모델 테스트 등 3단계 검증 실험을 진행했습니다. 특히 PQ2_0과 같은 고압축 형식에서 가중치 편집 시 일반적인 반올림 방식의 한계점과 'dither'와 같은 수정 기법의 수학적 원리를 분석합니다.
핵심 포인트
- 삼치 양자화 모델은 부동소수점으로 되돌리지 않고도 특정 동작 수정을 목표로 합니다.
- AI 에이전트와의 협업을 통해 모의 행렬, 0.6B 실 모델 등 3단계 검증 실험을 설계했습니다.
- 일반적인 반올림(nearest)은 미세한 수정 변화를 소멸시키지만, 'dither' 방식은 통제된 수정을 가능하게 합니다.
- PQ2_0 형식은 가중치당 실효 비트율 2.125bit로 저장되며, 이산 격자 위에서 직접 수정이 이루어집니다.
가중치가 -1, 0, +1의 삼치(ternary)로 양자화된 언어 모델에 대해, BF16과 같은 부동소수점(floating-point)으로 되돌리지 않고도, 양자화된 코드를 그대로 사용하여 특정 동작(지나친 거부 응답이나 출력 언어 경향 등)을 수정할 수 있을까요? 이 의문을 확인하기 위해 AI 코딩 에이전트와 협력하여 가설 사전 등록부터 검증 코드 구현, 반증 실험, 실제 GGUF 바이너리 차분 감사까지 3단계에 걸쳐 진행했습니다.
계기는 삼치 양자화 모델인 prism-ml/Ternary-Bonsai-2-27B-gguf을 기반으로 수정한 모델(Hikari07jp/Ternary-Bonsai-2-27B-Abliterated-GGUF)이 공개되면서였습니다. 이 모델은 부동소수점으로 전개(decompress)를 전혀 거치지 않으면서, 전체 코드의 0.46%만 수정하여 거부 응답을 제거했다고 보고되었습니다.
모델 카드에는 “각 그룹의 FP16 스케일에는 관여하지 않고, 편향되지 않은 코드 반올림 스케줄로 이산 격자 위에 직접 수정을 기록했다”고 되어 있었지만, 구체적인 알고리즘이나 구현은 공개되지 않았습니다. 또한, 갑자기 27B 모델에서 시행착오 실험을 반복하는 것은 계산 비용이 너무 큽니다.
그래서 AI 에이전트에게 실험 계획을 세우게 했고, 다음의 3단계로 검증을 진행했습니다.
- 작은 모의 행렬(mock matrix)로 ‘반올림 방식’의 수학적 동작만을 분리하여 비교
- 0.6B 실 모델에서 연속 가중치와 양자화된 가중치의 차이를 측정
- 양자화 네이티브한 8B 실 GGUF 모델에서 동작과 한계를 검증
일반적인 반올림으로는 수정이 사라지는 이유
언어 모델의 특정 동작을 제어하는 방법 중 하나로, 잔차 스트림의 차분 평균으로부터 방향 벡터를 이용합니다.
연속 값의 가중치(BF16 또는 FP16)라면,
한편, 삼치 양자화(가중치당 이론적 하한은 약 1.585 bit)는 8단계 값을 취하는 3bit 양자화와는 다릅니다. 이번 실험에서 다루는 PQ2_0 형식에서는 가중치 128개마다 FP16 스케일 값(2바이트)과 2bit 패킹된 삼치 코드를 총 34바이트를 사용하여 저장합니다(실효 2.125 bit/weight).
수천 차원의 은닉 상태를 가진 모델에서 단위 방향 벡터
- 일반적인 반올림 (최근접 반올림, nearest):변화량이 0.5 눈금 미만인 요소는 모두 0으로 반올림되어, 미세한 수정이 통째로 사라집니다.
- 부호 방향으로의 일률적 이동 (biased):조금이라도 변화가 있는 요소를 전부 눈금을 움직이면, 원래는 아주 조금만 움직이고 싶은 부분까지 크게 변하여 가중치 행렬이 파괴됩니다.
- 확률적인 편향 반올림 (dither):변화량에 비례하는 확률로 코드를 p = min(1, |\delta|) 눈금만큼 반전시킵니다. 개별 코드는 정수 스텝으로만 움직일 수 있지만, 다회/다요소의 평균(기댓값)을 취하면 원래의 연속적인 변화량(\pm 1)과 일치합니다. 이는 신호 처리에서의 디저(dither)나 모델 병합 기법 DARE와 같은 “기댓값을 유지한다”는 발상입니다.
1단계: 모의 삼치 격자에서 반올림 방식의 성질을 분리하기
우선 실제 언어 모델을 사용하기 전에, 256×1024 합성 행렬(128개 요소당 스케일 + Hadamard 회전 기저)을 만드는 검증 스크립트를 AI에게 작성하게 하여, 반올림 방식에 의한 차이점만을 비교했습니다.
| 반올림 방식 | 목표 방향의 잔차 비율 (낮을수록 제거 성공) | 코드 반전율 | 동작 해석 |
|---|---|---|
| 연속 값에서의 수정 (이상값) | 0.000 | — | 양자화 없음의 기준 |
| 일반적인 반올림 (nearest ) | 0.999 | 0.001% | 미세한 변경이 반올림으로 소멸 |
| 디저 반올림 (회전 공간 dither ) | 0.368 | 2.27% | 약 2.3%의 반전을 통해 성분을 약 63% 감소 |
| 디저 반올림 (비회전 공간) | 0.503 | 2.44% | 회전 공간보다 오차가 크고 효율이 떨어짐 |
| 부호 방향으로 일률적 이동 (biased ) | 10.8 | 67.0% | 원래의 10배 이상의 오차를 내며 붕괴 |
일반적인 반올림 방식에서는 코드가 거의 반전되지 않아, 목표 방향 성분이 그대로 남아버렸습니다. 반면, 디저 반올림에서는 전체의 약 2.3% 코드만 반전시키는 것만으로도 목표 성분을 60% 이상 감소시킬 수 있었습니다(표는 4개 시드의 평균값).
더 나아가 이 모의 실험을 통해 두 가지 중요한 성질이 발견되었습니다.
1. Hadamard 회전이 “수정 노이즈의 분산기”가 된다
회전이 없는 공간에서 하나의 삼치 코드를 반전시키면, 특정 가중치 한 곳에
\pm 1 )의 포화(saturation)가 감소율의 상한을 만듭니다.
- 격자의 끝점(왜 디더링 반올림을 해도 잔차가 0이 되지 않고 약 0.37(약 37% 남음)에 멈췄을까요? AI에게 512가지의 난수로 기대값을 검정시킨 결과, 바깥으로 움직일 수 있는 코드(전체의 67%)에서는 이론대로 편향이 거의 0이었습니다.
하지만 이미 +1인데도 더 플러스 방향으로 움직이고 싶은 요소(또는 -1에서 더 마이너스로 움직이고 싶은 요소)가 전체의 33% 존재합니다. 스케일 값을 고정한 상태로는 이러한 포화된 코드들이 더 이상 바깥으로 움직일 수 없습니다. 그 결과, 의도한 변경량의 약 3할이 격자의 끝점에서 손실되었고, 이것이 잔차의 하한을 만들었습니다. 즉, 디더링 반올림은 '모든 요소에서 편향이 없다'기보다는 '격자 위에서 움직일 수 있는 범위에 한해서만 편향이 없다'는 성질을 가지고 있습니다.
2단계: 0.6B 실 모델 검증 및 '후처리 삼진법화'의 실패
다음으로, 실제 언어 모델인 Qwen3-0.6B (BF16)를 사용하여 유해/무해 프롬프트 각 32건의 잔차 스트림 차분에서 거부 방향을 추출하여 PyTorch 상의 가상 양자화 격자(int8, int4, 삼진법)로 비교했습니다. 참고로, 표의 '붕괴 체크(2문)'는 간단한 산수와 1줄 코드 생성으로 모델이 반복 붕괴(같은 문자의 무한 루프)를 일으키는지 즉시 걸러내는 스모크 테스트입니다.
| 양자화 및 반올림 방식 | 코드 반전율 | 강분리층의 잔차 비율 | 거부 응답 (4건 중) | 붕괴 체크 (2문) |
|---|---|---|---|---|
| 미편집 (BF16) | 0% | 1.000 | 4 / 4 | 2 / 2 |
| 연속 값에서의 편집 (BF16) | — | 0.006 | 0 / 4 | 1 / 2 |
int8 정수 코드 반올림 | 55.1% | 0.006 | 0 / 4 | 1 / 2 |
int4 정수 코드 반올림 | 0.68% | 0.183 | 1 / 4 | 2 / 2 |
int4 연속 가중치에서 재양자화 | 6.44% | 0.020 | 0 / 4 | 2 / 2 |
int4 디더링 반올림 | 6.54% | 0.024 | 0 / 4 | 1 / 2 |
| 삼진법 정수 코드 반올림 | 0.017% | 0.014 | 0 / 4 (붕괴) | 0 / 2 |
| 삼진법 디더링 반올림 | 1.91% | 0.009 | 0 / 4 (붕괴) | 0 / 2 |
| 삼진법 회전 + 디더링 반올림 | 1.91% | 0.008 | 0 / 4 (붕괴) | 0 / 2 |
여기서도 두 가지 발견이 있었습니다.
연속 가중치에서의 재양자화에는 '암묵적인 디더링'이 포함되어 있다
int4 행을 비교해 보면, 정수 코드에 직접 반올림을 적용한 경우에는 반전율이 0.68%로 떨어지고 테스트 4건 중 1건에서 거부가 남았습니다. 그런데 원래의 연속 가중치(Original continuous weight)는 이와 달랐습니다.
반대로 말하면, 이미 정수 코드만 남아있는 배포된 GGUF 파일에서는 이러한 끝단 값이 손실됩니다. 따라서 배포된 모델을 직접 편집하려면 난수에 의한 명시적인 디더링이 필수적입니다. 또한, 양자화가 거칠어질수록(int8의 55.1%에 비해 int4는 0.68%, 삼진법은 0.017%) 단순한 반올림만으로는 편집이 사라지는 것도 확인했습니다.
부정적 결과: 일반 모델을 후처리로 삼진법화하면 편집 이전에 망가진다
표 하단 3행에서 볼 수 있듯이, Qwen3-0.6B를 후처리로 삼진법화한 조건에서는 코드 움직임을 거의 하지 않은 반올림(반전율 0.017%)을 포함하여 모두 붕괴 체크가 0/2가 되어 의미 있는 문장을 출력할 수 없었습니다(거부가 0/4인 것도 억제에 성공했기 때문이 아니라 출판 자체가 망가졌기 때문입니다).
일반 부동 소수점 모델을 학습 없이 그대로 삼진법으로 변환하면, 편집 이전에 양자화 자체의 손상만으로 모델이 망가져서 편집 효과를 정확히 측정할 수 없습니다. 삼진법 모델의 직접 편집을 검증하려면 처음부터 삼진법 양자화를 전제로 만들어진 '양자화 네이티브(quantization native)'한 모델을 사용해야 한다는 것을 알게 되었습니다.
Ternary-Bonsai-8B에서의 검증
3단계: 양자화 네이티브 8B 실 모델 (2단계의 교훈을 바탕으로, 처음부터 PQ2_0 형식으로 구축된 prism-ml/Ternary-Bonsai-8B-gguf (약 2.18 GB, Hadamard 회전을 포함하지 않은 평범한 삼진 구조)를 대상으로 Prism 포크 버전의 llama.cpp 실런타임 환경에서 검증을 수행했습니다.
PQ2_0
블록(34바이트)의 전개와 스케일 값
import numpy as np
SHIFT = np.array([0, 2, 4, 6], dtype=np.uint8)
def unpack_pq2_0(raw: np.ndarray):
...
실험에 들어가기 전에, 이 Python 디코더와 llama.cpp 측의 C++ 구현(dequantize_row_pq2_0)의 출력이 비트 단위로 완벽하게 일치하는지, 그리고 다시 패킹하여 덮어쓴 GGUF가 원래 파일 크기를 유지한 채 llama-cli에서 정상적으로 추론되는지를 확인했습니다.
후반 레이어에만 디더(Dither) 반올림을 적용하면 능력을 유지하면서 거부 응답이 사라진다
전체 36개 레이어의 출력 투영(attn_output과 ffn_down)에 대해 거부 방향을 적용하고, 온도 0의 결정적 생성으로 평가한 결과는 다음과 같습니다.
| 편집 조건 (대상 레이어・강도) | 대상 코드 반전율 | 거부 응답 (8건 중) | 붕괴 체크 (2문항) |
|---|---|---|---|
| 미편집 (베이스 모델) | 0% | 8 / 8 | 2 / 2 |
| 사사오입(전체 레이어・ | 0.004% | 8 / 8 | 1 / 2 |
| 디더 반올림(전체 레이어・ | 0.71% | 1 / 8 | 1 / 2 |
| 디더 반올림(전체 레이어・ | 1.07% | 0 / 8 | 0 / 2 |
| 디더 반올림(전체 레이어・ | 1.42% | 0 / 8 | 0 / 2 |
| 디더 반올림(후반부 18~35레이어만・ | 1.41% (전체 대비 약 0.7%) | 0 / 8 | 2 / 2 |
실제 PQ2_0 패킹 상에서는 단순한 사사오입의 반전율이 0.004% (int4의 약 1/170)에 그쳤고, 거부 응답은 8건 중 8건으로 변하지 않았습니다. 반면, 디더 반올림은 약 0.7%~1.4%의 코드 반전으로 모델의 동작을 명확하게 변화시켰습니다.
다만, 전체 레이어에 강한 편집(※원문에서 내용 누락됨)을 가했을 때는... (이후 문장이 끊겨있으나 원문의 흐름상 다음 내용을 이어받음)
더 나아가 평가 프롬프트를 확장하여 재테스트를 진행한 결과, 직접적인 유해 프롬프트 16건에 대한 거부는 16건에서 0건으로 줄었으며, 8개 항목의 정형 능력 체크(산수・문자열 조작・사실 지식・수열・지시 추종)도 미편집 시와 같은 7/8을 유지했습니다 (더 엄밀한 연속 지표인 Perplexity로 검증은 후술합니다).
대립 가설 검증: 난수를 사용하지 않고 변화량이 큰 순서대로 반전시키면 어떻게 될까
여기서 AI 에이전트와 하나의 대립 가설을 세웠습니다. “난수로 미세한 요소를 확률적으로 반전시키는 것보다, 그룹 내에서 필요한 총 이동량을 계산하고, 변화량이 큰 상위 요소부터 순차적으로 확정적으로 반전시키는 방식(보상 할당)이 적은 반전으로 확실하게 작용하지 않을까”라는 가설입니다.
하지만 같은 후반 레이어(18~35레이어・)의 경우에도, 그룹 내 이동량의 ‘합계’만을 맞추더라도, 변화량이 큰 특정 좌표에만 반전을 집중시키면 원래의 Rank-1 업데이트와는 다른 왜곡된 변경이 되어 모델이 망가집니다. 이산 격자 위에서 원래 함수 형태를 유지하기 위해서는 총량이 아닌 “개별 요소의 기대값이 원래의 미세한 변경량과 일치하는 것”이 필수 조건이었습니다.
선행 27B 모델의 GGUF 바이너리 차분 감사(Audit)
다음으로, 자체 제작한 감사 스크립트(gguf_flip_diff.py)를 사용하여 공개된 선행 27B 모델의 부모 모델과 변형 후 모델의 GGUF 파일(각 약 7.21 GB)을 직접 비교했습니다.
바이너리를 대조해 본 결과, 모델 카드에 기재된 대로 전체 851개 텐서 중 400개의 텐서만이 변경되었으며, FP16 스케일 값의 변경은 0바이트였고, 삼치 코드의 반전 위치는 약 1.25억 곳(텐서당 중앙값 0.45%, 바이트 차분으로 약 124 MB)인 것을 확인했습니다. 또한 모델 카드에 기재되지 않은 특징으로, 변경 밀도가 후반 블록(49~51레이어의 ffn_gate에서 약 0.73%)에 집중되어 있어, 8B 모델에서 확인했던 ‘후반 레이어 중심의 편집’과 동일한 구조를 가지고 있음을 알 수 있었습니다.
55MB의 가역 패치 추출과, 핫스왑 고속화 가설의 반증
8B 모델에서 수행한 후반 레이어 편집의 차분(약 1,702만 곳의 코드 반전)을 추출해 본 결과, 원래의 2.18 GB 모델에 대해 단지 55 MB(약 2.5%)의 압축 패치(.npz)로 저장할 수 있었습니다. 이 패치를 부모 모델에 적용하자 SHA-256 해시가 완벽하게 일치했으며, 역패치를 적용하면 원래의 부모 모델로 1비트의 오차도 없이 되돌릴 수 있었습니다.
한편으로는 '디스크상의 GGUF에 차분 패치(differential patch)를 적용하여, 별도의 모델을 로드하는 것보다 빠르게 전환(핫스왑/hot-swap)할 수 있지 않을까'라는 사전 기대는 무너졌습니다. 디스크상의 GGUF에 패치를 기록하는 과정에 5.9초가 걸린 반면, llama-cli가 mmap으로 별도의 모델을 콜드 로드하여 첫 토큰을 출력하기까지의 시간은 1.2초였기 때문입니다. 스파스 패치(Sparse Patch)의 실용적인 가치는 전환 속도보다는 '수십 MB라는 작은 배포 크기'와 '언제든 되돌릴 수 있는 가역성 및 감사 용이성'에 있습니다.
여러 패치를 중첩하면 27.6배의 좌표 충돌 발생
만약 '거부 응답을 억제하는 패치'와 '일본어 출력을 억제하고 영어로 바꾸는 패치'를 각각 만들고, 나중에 이 두 개를 겹쳐 적용한다면 어떻게 될까요?
이 두 개의 방향 벡터는 거의 직교(第34層에서의 코사인 유사도 0.21)하기 때문에, 직관적으로는 별개의 가중치가 수정될 것 같았습니다. 하지만 실제로 두 패치를 만들어 비교해 본 결과, 각각 전체 코드의 약 1.4%만을 구동했음에도 불구하고, 약 575만 개에 달하는 위치에서 반전된 값이 중첩되었습니다. 이는 독립적인 무작위 배치를 가정했을 때의 27.6배에 해당하는 집중도입니다. 어느 편집 모두 원래 가중치 행렬
더 나아가, 중첩된 위치 중 약 215만 개에서는 두 패치가 서로 반대 방향의 값을 요구하며 충돌했습니다. 배포용 패치 파일을 단순히 덮어쓰기 합체(나중에 적용한 패치를 우선)하면, 먼저 적용했던 패치의 반전 위치 중 약 13%~16%가 손실됩니다.
그 결과, 효과를 볼 여유가 작은 '거부 억제'를 먼저 적용하고 '언어 변경'을 나중에 덮어쓴 경우에는 16건 중 4건에서 거부가 부활하는 현상이 나타났습니다. 반대로 '언어 변경'을 먼저 적용하고 '거부 억제'를 마지막에 적용한 경우에는, 거부 누락을 16건 중 1건으로 줄일 수 있었습니다. 여러 스파스 패치를 중첩할 때는, '허용 마진이 작은 섬세한 편집일수록 나중에 적용해야 한다'는 순서의 법칙이 실험을 통해 도출되었습니다.
참고로, 세 번째 축으로서 '답변을 간결하게 하는 방향(verbosity)' 추출 및 합성도 시도했지만, 이 방향은 단독으로 적용해도 답변 글자 수가 줄지 않았으며(중앙값 252.5자에서 266.5자로 소폭 증가), 잔차 스트림의 단순 차분 평균만으로는 제어할 수 없는 속성도 있음이 확인되었습니다.
합격/불합격 테스트에서는 보이지 않는 열화를 Perplexity로 측정하기
마지막으로, 일문일답 방식의 스모크 테스트에서는 알 수 없는 모델의 열화(degradation)를 알아보기 위해 Radeon GPU (HIP gfx1101)를 사용하여 합성 실험으로 만든 각 모델의 Perplexity (PPL: 수치가 낮을수록 문장 예측 정확도가 높음)를 측정했습니다.
| 모델 상태 | 영어 문장 PPL | 코드 PPL | 일본어 문장 PPL |
|---|---|---|---|
| 미편집 (베이스 모델) | 11.9 | 1.51 | 6.7 |
| ... |
이러한 합성/단일 패키지들은 모두 8문항의 스모크 테스트에서는 7/8 또는 8/8을 통과했지만, PPL을 살펴보면 영어와 코드 모두 베이스 모델보다 악화되어 있으며, 이산 코드를 수정하는 것이 결코 '무결점'이 아님을 알 수 있습니다(참고로, 앞서 검증한 '거부 억제 단독 후반 레이어 패치'에 대해서는 생성 끝부분에 "42 42 42"와 같은 가벼운 반복의 조짐만 확인했을 뿐, 단독 PPL은 미측정입니다).
특히 두드러진 것은 '일본어 억제 패치 단독'의 일본어 PPL로, 6.7에서 약 17.9만으로 자릿수 차이 나게 급등했습니다. 이 패치는 단순히 '일본어가 아닌 영어로 답변하려는 선호도'에만 작용한 것이 아니라, 모델 내부의 일본어 언어 모델링 능력 자체를 파괴함으로써 일본어 출력을 막고 있었음이 PPL 수치에서 명확하게 읽힙니다.
AI 에이전트와의 실험 루프에서 유용했던 3가지 개선점
이번 3단계 검증은 가설 설정부터 코드 작성, 디버깅, 결과 집계까지를 일관되게 AI 에이전트와 협업하여 진행했습니다. 그 과정에서 특히 효과적이었던 개선점을 3가지를 제시합니다.
1. 합격/불합격 조건을 '사전 등록'하여 편향된 해석 방지하기
AI 에이전트에게 실험 코드를 실행시키기 전에, 반드시 '어떤 수치가 어느 범위에 들어와야 가설이 지지되고, 어떻게 되어야 기각되는가'를 미리 선언하게 했습니다.
이러한 사전 등록 덕분에, 2단계에서의 임의 후처리 삼치화(three-value quantization) 붕괴나, 3단계에서의 보상 할당 방식 실패, 핫스왑 속도의 반증에 직면했을 때도, 파라미터를 조작하여 무리하게 성공처럼 보이게 하는 것이 아니라, '왜 실패했는지'라는 새로운 지식으로 그대로 기록할 수 있었습니다.
2. 평가 인프라의 숨겨진 함정을 먼저 제거하기
실험 속도를 높이기 위해 단발성으로 실행되는 llama-cli에서 상주하는 llama-server로 전환했을 때, 처음에는 순수한 /completion 엔드포인트를 호출했기 때문에 채팅 템플릿이 적용되지 않아 베이스 모델의 거부율이 절반까지 떨어지는 문제가 발생했습니다. 또한, 병렬 워커 수를 호스트 전체 메모리에서 계산했기 때문에 cgroup의 메모리 상한(6 GB)을 초과하여 강제 종료되는 문제나, 70분간 진행된 계산의 마지막 print() 과정에서 파이프 끊김(BrokenPipeError)으로 인해 결과를 잃는 사고도 있었습니다.
이러한 인프라로 인한 사고를 방지하기 위해, AI에게 "표준 출력에 표시하기 전에 반드시 JSON 영수증을 디스크에 기록할 것", "/proc/self/cgroup에서 컨테이너 자체의 메모리 상한을 읽어올 것", "실제 측정 전에 CLI와 API 출력이 완전히 일치하는지 검증할 것"을 철저히 하도록 했습니다.
3. 질문-답변 스모크 테스트만으로 끝내지 않기
8개의 정형 체크만으로는 "7/8로 능력 유지"라고 결론 내릴 수 있었을 상황이었으나, 생성 끝 부분의 반복 관찰과 마지막 Perplexity 측정까지 깊이 파고들면서 이산 격자 편집이 가진 연속적인 비용을 정확하게 포착할 수 있었습니다.
결론
3진수 양자화된 가중치에 대한 미세한 편집은 그대로 반올림하면 반올림 오차에 묻혀 사라져 버립니다. 하지만 요소별로 편향되지 않은 확률적 반올림(디더링)을 후반 레이어에 적용함으로써, 스케일 값을 1바이트도 변경하지 않으면서 실제 모델의 동작을 재작성하고 수십 MB 크기의 가역적인 패치로 추출할 수 있음을 확인했습니다.
한편, 이것이 성립하는 것은 처음부터 3진수 양자화를 전제로 학습된 네이티브 모델 위에서만 가능하며, 격자의 끝점 포화로 인한 상한, 여러 패치를 중첩했을 때의 27.6배 좌표 충돌, 그리고 Perplexity에 나타나는 예측 정확도 저하 등 명확한 트레이드오프가 동시에 존재합니다. 양자화 모델의 직접 편집을 실용할 때는 간단한 동작 확인 테스트뿐만 아니라 연속적인 손실 지표(PPL)까지 포함하여 저울질하는 것이 안전합니다.
Discussion

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