다음에 올 것을 만들어가는 기술에 대한 심층 기사.

가중치 공간 프로그래밍: LLM의 세 번째 지렛대

가중치 공간 프로그래밍은 LLM이 신경망 가중치를 직접 읽고 편집하게 합니다. 언제 파인튜닝보다 나은지, 왜 취약한지 정리했습니다.

빛줄기가 한 가닥을 정교하게 다시 배선하는, 빛나는 노드 격자.
손으로 신경망 편집하기: 수십억 가닥 중 하나를, 그래디언트 압력이 아니라 의도를 가지고 바꿉니다.

경사 하강법은 한 번도 신성한 것이 아니었습니다. 사람이 읽을 수 없는 수십억 개의 숫자를 빚는 데 쓸 수 있던 유일한 범용 도구였기에, 우리가 딥러닝이라는 거대한 체계를 그 위에 세웠을 뿐이죠. MIT CSAIL 팀이 그 비계를 걷어찼습니다. 최첨단 모델에 학습된 신경망의 원본 가중치를 건네고, 학습 루프도 그래디언트도 순전파도 없이 자연어로 설명하고, 디버깅하고, 다시 써보라고 요청했습니다. 실제로 작동했습니다. 가중치 공간 프로그래밍, 즉 매개변수를 경사를 따라 살짝살짝 밀어내는 대신 매개변수 자체를 놓고 추론하는 방식은 사고 실험에서 데모 단계로 넘어왔고, 저는 이것이 파인튜닝을 조용히 강등시킨다고 봅니다. 「모델을 적응시키는 방법」에서 세 가지 선택지 중 하나로요.

이 헤드라인 결과는 받는 관심만큼의 가치가 있습니다. 그래디언트 업데이트 없이 Qwen3.5-0.8B의 수학 실력을 높여 달라는 요청에, GPT-6 Astra라는 모델이 병적인 추론 루프를 두 MLP 레이어에 적힌 단일 방향 하나로 추적했고, 그 방향을 가중치의 0.016%에서 빼냈습니다. 그 결과 MATH-500 정확도가 7.9%에서 48.1%로 올랐습니다. 샘플링 설정도, 나머지 조건도 모두 같았습니다. 이 수정은 명령어 따르기에도 전이되어 IFEval 점수를 세 배로 늘렸죠. 이건 하이퍼파라미터 조정이 아니라 수술입니다. 다만 경사 하강법을 묻어버리기 전에, 실제로 무엇이 입증되었고 어디까지 일반화되며 어디서 이미 실패하는지 정확히 짚어 볼 가치가 있습니다.

가중치 공간 프로그래밍이란 무엇인가

지금까지 모델의 동작을 바꾸는 방법은 사실상 두 가지뿐이었습니다. 프롬프팅은 입력을 바꾸고 가중치는 그대로 둡니다. 파인튜닝은 가중치를 바꾸지만 맹목적으로 바꿉니다. 손실 지형에 예제 배치를 보여주고, 그래디언트가 오차를 줄이는 방향으로 매개변수를 밀어내게 두는 것이죠. 그 과정에서 어떤 내부 장치가 재배선되는지는 거의 통제하지 못합니다. 가중치 공간 프로그래밍은 세 번째 지렛대를 제안합니다. 손실 함수를 아예 버리고, 추론 시스템이 가중치를 읽어 그것이 무엇을 계산하는지 가설을 세운 뒤, 자연어 명세에 맞게 가중치를 편집하는 방식입니다.

읽기 결과가 가장 으스스한 부분입니다. 연구진은 작은 정책 네 개를 PPO로 학습시켜 격자 세계 버전의 Breakout, Pong, Pac-Man, Freeway를 플레이하게 했습니다. 아키텍처, 입력 채널, 행동 공간이 모두 같아서 가중치 말고는 구별할 단서가 없었습니다. Astra는 후보 목록을 전혀 듣지 않고도 네 게임을 모두 맞혔습니다. 원, 사각형, 삼각형을 생성하도록 학습된 확산 모델에서도 같은 결과가 나왔습니다. 더 어려운 버전도 있었습니다. 임베딩과 출력 레이어를 제거하고 차원에 이름도 없이 중간 레이어만 준 상태에서, 세 개의 문자 단위 트랜스포머가 파이썬, 영어, 로마자 일본어 중 무엇으로 학습되었는지 맞혔습니다. 그 과정에서 가중치 행렬을 곱해 모든 induction head, 즉 앞선 텍스트를 반복하게 해 주는 복사 회로를 찾아냈습니다. 누구도 알려주지 않은 해석 가능성 연구의 알려진 기법이었습니다. 기계적 해석 가능성 연구가 느리게 진전되는 과정을 따라왔다면, 범용 모델이 이를 자연스럽게 해내는 모습은 약간 아찔하게 느껴질 겁니다.

그다음에는 가중치를 썼습니다. 로컬 최소값에 갇힌 PPO 학습 자동차 컨트롤러가 있었습니다. 정책이 속도를 붙이려고 먼저 후진하는 대신 경사로를 향해 곧장 돌진하고 있었죠. Astra는 가중치와 기록된 에피소드 한 개만으로 실패 원인을 진단했고, 매개변수의 3.5%만 바꾼 편집으로 1,024개 평가 에피소드 모두에서 자동차를 성공시켰습니다. 환경 피드백 없이 게임 플레이 신경망을 처음부터 작성하라고 하자, 1억 스텝 동안 PPO로 학습한 네트워크를 이기는 정책을 만들어 냈습니다. 다시 읽어 보세요. 상호작용도, 보상 신호도 없이, 게임을 자연어로 묘사한 것만으로 언어 모델의 추론이 작동하는 가중치로 컴파일된 겁니다.

실제 모델에서 직접 가중치 편집은 어떻게 작동하나

Qwen 수정 사례는 실무자에게 가장 중요한 결과입니다. 8억 파라미터는 실제 팀들이 파인튜닝해서 배포하는 종류의 진짜 모델이기 때문이죠. 실패는 잘 알려져 있었습니다. 작은 추론 모델이 루프에 빠져 토큰 한도에 닿을 때까지 같은 텍스트를 반복하고, 답을 끝내 내놓지 못하는 문제입니다. Qwen 모델 카드도 이를 경고하고 있고, 연구진의 시험 실행에서는 처음 96개 답변 중 85개가 이런 식으로 32,768토큰 컨텍스트를 전부 소진했습니다. Astra의 진단은 이랬습니다. 레이어 15와 19의 MLP가 잔차 스트림에 어떤 방향을 써 넣고 있었고, 그것이 모델을 같은 생성 궤적으로 계속 끌어당기고 있었다는 것입니다. 수정은 그 두 MLP 각각의 출력 열 64개에서 그 방향을 빼는 것이었습니다. 총 131,072개 가중치, 모델의 0.016%입니다.

계산은 민망할 만큼 단순하고, 그게 핵심입니다. 활성화 공간에서 「영원히 루프 돌기」에 해당하는 방향을 알면, 그것을 제거하는 건 투영 연산입니다. 영향받는 각 가중치 벡터에서 나쁜 방향에 놓인 성분을 빼기만 하면 됩니다. 누구든 열 줄 남짓으로 작성할 수 있습니다.

import numpy as np
def subtract_direction(W, v, columns):
"""Remove the component of each chosen column that lies along v."""
v = v / np.linalg.norm(v)
W[:, columns] -= np.outer(v, v @ W[:, columns])
return W
# The Qwen repair, schematically: for the MLP output projections of
# layers 15 and 19, subtract the "loop" direction from 64 columns each.
# 2 layers x 64 columns x 1024 rows = 131,072 edited weights.
W_down[15] = subtract_direction(W_down[15], loop_dir[15], cols[15])
W_down[19] = subtract_direction(W_down[19], loop_dir[19], cols[19])

어려운 부분은 한 번도 뺄셈이 아니었습니다. 수천 차원 폭을 가진 잔차 스트림 속에서 어느 레이어의 어느 방향인지 아는 것이 어려운 부분입니다. 우리가 그동안 그걸 찾으려고 경사 하강법이 필요했던 이유는, 그래디언트가 아무 이해 없이도 가중치 공간을 탐색하는 절차이기 때문입니다. Astra는 탐색을 진단으로 대체했습니다. 오류가 사라질 때까지 시행착오로 회로를 다시 연결하는 전기 기술자와, 회로도를 읽고 올바른 선을 끊는 기술자의 차이입니다. 같은 논리로, 모델이 가중치 행렬을 합성해 induction head를 찾아낸 것도 설명됩니다. 한 번도 보여준 적 없는 공개된 해석 기법을 적용한 것이고, 이는 암기된 레시피가 아니라 실제 추론 능력이 전이되었음을 시사합니다.

빛나는 실들로 촘촘히 짜인 직물에서 한 가닥의 빛나는 실이 깔끔하게 뽑혀 나오는 모습.
신경망의 가중치에서 단일 방향을 빼내는 일: 올바른 실만 골라내면 직물은 그대로 유지됩니다.

직접 가중치 편집이 파인튜닝을 이기는 경우

제 입장은 이렇고, 근거도 댈 수 있습니다. 작은 모델에서 중간 크기 모델까지, 범위가 좁고 국소화된 실패라면 직접 가중치 편집이 이미 더 나은 도구입니다. 비교도 안 될 정도로요. 루프 버그에 파인튜닝을 쓰는 경우를 생각해 봅시다. 루프 없는 추론 트레이스 데이터셋을 모아 SFT나 RL을 돌리고, 손실 압력이 모델의 나머지 지식을 훼손하지 않으면서 그 행동만 지워주기를 바라게 됩니다. 실제 의도인 「같은 말 반복 그만하기」 대신 대리 목표, 예컨대 수학 데이터를 더 넣는 쪽으로 GPU 시간을 태우며 언덕을 오르게 되죠. 가중치 공간 프로그래밍은 의도 자체를 말할 수 있게 해 줍니다. 이 편집은 모델의 0.016%를 건드렸습니다. 파인튜닝은 전체를 건드리고, 그 부작용은 나중에 학습 실행과 연결되지 않는 이상한 회귀로 나타납니다.

파인튜닝은 의도의 대리 지표를 향해 언덕을 오릅니다. 가중치 공간 프로그래밍은 의도를 직접 말하게 해 줍니다.

두 번째 경우는 그래디언트 방법이 구조적으로 벗어날 수 없는 로컬 최소값을 탈출하는 것입니다. PPO가 자동차를 경사로에 박아 놓은 이유는, 강화 학습이 현재 정책을 살짝 흔들며 탐색하기 때문입니다. 「직진」에서 아주 작은 섭동으로는 「2초 먼저 후진하기」를 발견할 수 없습니다. 추론은 흔들지 않습니다. 현재 답의 섭동이 아니라 문제의 모델 위에서 작동하기 때문에, 질적으로 다른 해법으로 뛰어넘을 수 있습니다. 10억 번의 PPO 스텝도 추론 한 번이 찾아낸 것을 찾지 못했습니다. 이는 효율의 차이가 아니라 범주의 차이입니다.

셋째, 반복 루프가 짧아집니다. 파인튜닝에는 데이터 큐레이션, 학습 실행, 평가 스윕, 회귀 검사 같은 물류 꼬리가 붙어서 「작은 행동 변화」가 며칠짜리 프로젝트가 됩니다. 대형 모델을 직접 자기 하드웨어에서 돌려 본 사람이라면, 노력의 상당 부분이 모델링이 아니라 배관 작업이라는 걸 알 겁니다. 가중치 편집은 코드 핫픽스에 더 가깝습니다. 진단하고, 패치하고, 평가를 돌리고, 틀렸으면 되돌리면 됩니다. 진단이 맞다면 전체 학습 파이프라인을 건너뛸 수 있습니다. 명확하게 이득이 되는 상황은 네 가지로 모입니다:

  • 실패는 진단되었지만 해결책을 표현하는 학습 데이터가 없습니다
  • 외과적 범위가 필요합니다. 나머지 동작이 흐트러지지 않게 한 가지 행동만 바꿔야 합니다
  • 무작위 탐색으로는 빠져나올 수 없는 로컬 최소값에 모델이 갇혀 있습니다
  • GPU로든 일정으로든 학습 파이프라인을 감당할 수 없습니다

가중치 공간 프로그래밍이 취약한 이유

이제 찬물을 끼얹겠습니다. 할 말이 많거든요. 제가 본 가장 유용한 데이터 포인트는 논문이 아니라, 같은 기법을 작은 자연어-bash 모델에 시도했다가 순이익이 없었다는 한 실무자의 경험입니다. 1,920개 가중치를 편집했더니 grep 실수는 몇 개 고쳐졌지만 다른 명령은 망가졌습니다. 이는 예상된 결과이며, 근본적인 문제를 보여 줍니다. 학습된 신경망의 행동들은 얽혀 있습니다. Qwen 편집이 성공한 건 루프 행동이 우연히 작고 제거 가능한 방향에 있었기 때문입니다. 많은 행동은 그렇지 않습니다. 중첩(superposition) 속에 흩어져 있고, 같은 열들이 여러 무관한 특징을 동시에 실어 나릅니다. 그래서 「방향」 하나를 빼는 것은 화음에서 음 하나만 빼내려는 것과 같습니다. 다른 음들까지 잘라내게 됩니다. 어떤 실패가 기하학적으로 압축되어 있고 어떤 실패가 흩어져 있는지 미리 예측하는 이론은 아무도 갖고 있지 않습니다. 그때까지 모든 가중치 편집은 도박입니다.

읽기 데모도 할인해서 봐야 합니다. Astra가 게임 네트워크에 대해 추론한 근거는 표면적 통계에 기댔습니다. 첫 레이어 가중치가 어디에 몰리는지, 어떤 출력 로짓이 분리되는지 같은 것들이었죠. 언어 식별도 사실상 세 지선다였고, 그중 로마자 일본어는 q, l, v, x가 없는 유난히 특이한 글자 분포를 가지고 있어 쉽게 맞힐 수 있었습니다. 인상적인 패턴 매칭인 건 확실합니다. 가중치 공간에 대한 깊은 네이티브 이해의 증거인지는 덜 분명합니다. 확산 결과는 양날의 검입니다. Astra는 모든 도형을 실제로는 채워진 도형인 모델과 달리 윤곽선으로 그렸습니다. 이는 네트워크를 시뮬레이션한 게 아니라 기하학을 읽었다는 증거이지만, 동시에 그 「이해」가 테스트를 통과하면서도 구조적으로 틀릴 수 있다는 것도 보여줍니다.

그리고 규모와 출처의 문제가 있습니다. 깔끔한 결과는 모두 17,000에서 700만 개 가중치 사이에 있고, Qwen 0.8B가 예외입니다. 중간 레이어를 읽은 실험조차 그 결과에 도달하기까지 최대 백 번의 파이썬 분석 실행이 필요했습니다. 70B 모델, 하물며 최첨단 모델에서 작동한다는 증거는 아무도 보여주지 못했고, 가중치를 컨텍스트 창에 그냥 붙여넣는 단순한 접근은 그 훨씬 전에 무너집니다. 또 하나 불편한 질문이 있습니다. 이 능력은 대체 어디서 왔을까요? 체스를 지나치게 잘하는 LLM은 대개 학습 중에 체스 표기법을 많이 먹었던 것으로 드러납니다. Astra가 가중치 데이터로 의도적으로 학습되었다면, 이 결과는 창발적 이해보다 아주 훌륭한 커리큘럼에 대해 더 많은 것을 말해 줍니다. 우리는 정말 모릅니다.

마지막으로 MATH-500의 상승에는 단서가 붙어야 합니다. 이 벤치마크는 여러 해 동안 학습 데이터에 의해 포화되었고, 기본 모델이 7.9%를 기록했다는 것은 수학 능력이 아니라 루프와 형식 문제에서 실패하고 있었을 가능성이 거의 확실하다는 뜻입니다. 즉 이 편집은 기술을 새로 만든 게 아니라, 잠재된 능력의 막힌 부분을 풀어 준 것입니다. 그래도 가치는 있습니다. 막힌 것을 푸는 것도 실질적 성과니까요. 하지만 「편집으로 모델의 수학 실력이 좋아졌다」와는 다른 주장이고, 벤치마크가 실제 업무의 대부분을 놓치는 익숙한 패턴에 들어맞습니다.

작업대 위, 노출된 회로 기판 옆에 나란히 놓인 메스와 망치.
모델을 바꾸는 두 가지 철학: 가중치 편집의 메스와 그래디언트 학습의 망치.

프로덕션에서의 가중치 편집: 핫픽스처럼 다루세요

이것을 직접 시도해 보고 싶다면, 특히 작은 모델이라면 그래야 합니다. 가중치 편집을 실행 중인 데이터베이스에 거는 핫패치를 다루듯 엄격하게 다루세요. 모든 것을 diff로 남기세요. 어떤 텐서가 얼마나 바뀌었는지 정확히 기록해야 합니다. 0.016%는 편집 스크립트의 조용한 버그가 영원히 숨어 버릴 만큼 작은 수치이기 때문입니다. 목표 행동만이 아니라 넓게 평가하세요. Qwen 수정은 우연히 명령어 따르기도 개선했지만, 그 부작용의 방향은 운이었고 다음번에는 반대로 나올 수 있습니다. 기준 체크포인트는 신성하게 보관하고, 모든 편집을 되돌릴 수 있는 패치로 버전 관리하세요. 그리고 야망의 범위를 조절하세요. 입증된 최적지는 완전히 평가할 수 있는 모델의 작고 잘 이해된 실패입니다. 흐릿한 「느낌」의 문제를 70B 모델에서 「나쁜 방향을 제거」해서 고치려 한다면, 중첩이라는 것을 힘들게 배우게 될 겁니다.

  • 기준 체크포인트를 고정하고, 편집은 덮어쓰지 말고 diff로 저장하세요
  • 목표 벤치마크만이 아니라 편집 전후에 넓은 평가를 돌리세요
  • 모호한 느낌보다 날카롭고 재현 가능한 실패 신호를 가진 문제를 고르세요
  • 되돌리기를 예산에 넣으세요. 편집의 일부는 무언가를 망가뜨릴 거라고 가정하세요

솔직한 제 입장은 이렇습니다. 오늘날 이것은 배포 파이프라인이 아니라 해석 도구이자 디버깅용 메스입니다. 가장 먼저 가치를 뽑아내는 팀은 가중치 편집을 프로덕션에 배포하는 팀이 아닐 겁니다. 프런티어 모델을 사용해 자신들의 작은 모델이 무엇을 배웠는지 설명하게 하는 팀이 먼저 이득을 볼 겁니다. 추론 트레이스를 이미 읽고 있는 방식처럼 체크포인트를 읽고, 그 지식에 따라 평범하고 지루하지만 믿을 만한 도구로 행동하는 거죠.

그래디언트는 죽지 않았다, 강등되었을 뿐이다

여기서 제가 처음 던진 주장이 무너집니다. 그러니 솔직해지겠습니다. 경사 하강법은 가중치 공간 프로그래밍이 할 수 없는 일을 합니다. 대규모 데이터로부터 학습하는 것이죠. Astra가 이런 편집을 하는 데 사용한 모든 능력 자체가 방대한 학습 코퍼스에 대한 그래디언트로 설치된 것입니다. 추론은 네트워크가 아는 것을 수술할 수 있지만, 인간 텍스트 전체를 네트워크에 가르칠 수는 없습니다. 현실적인 미래는 그래디언트가 대체되는 것이 아니라 역할 분담입니다. 그래디언트는 콘크리트를 붓고, 가중치 공간 프로그래밍은 마감 목공을 합니다. 40년 동안 우리는 학습된 가중치를 불투명한 산출물, 외부에서만 조종할 수 있는 블랙박스로 다뤄 왔습니다. 여기서 정말 새로운 아이디어는 그 상자가 읽을 수 있게 되고 있다는 것, 그리고 그것을 읽는 존재가 우리가 아니라는 점입니다. 그것이 안심이 되는지 불안이 되는지는, 그래디언트를 얼마나 신뢰했느냐에 달려 있을 겁니다.