가중치 0.016% 편집으로 GPT-6 아스트라가 Qwen3.5-0.8B 성능을 개선한 원리

가중치 0.016% 편집으로 GPT-6 아스트라가 Qwen3.5-0.8B 성능을 개선한 원리

가중치 0.016% 편집으로 GPT-6 아스트라가 Qwen3.5-0.8B 성능을 개선한 원리Rihpig

GPT-6 Astra는 아무런 학습 없이 Qwen3.5-0.8B의 MATH-500 점수를 7.9%에서 48.1%로 끌어올렸습니다. 모델의 가중치를 읽고, 모델이 사고 과정에서 루프에...

GPT-6 Astra는 아무런 학습 없이 Qwen3.5-0.8B의 MATH-500 점수를 7.9%에서 48.1%로 끌어올렸습니다. 모델의 가중치를 읽고, 모델이 사고 과정에서 루프에 빠지게 만드는 하나의 방향을 찾아낸 뒤, 두 개의 MLP 레이어에서 그 방향을 빼냈습니다. 이 편집은 131,072개의 가중치, 즉 모델의 0.016%에만 손을 댔습니다. 이 수치는 MIT CSAIL 연구자 네 명이 11월 2일에 올린 글에서 나온 것이며, 편집된 모델이 공개되어 있으므로 직접 확인할 수 있습니다.

지금 Apidog를 사용해 보세요

아래 내용: 가중치 공간 프로그래밍이 무엇인지, Astra가 무엇을 바꿨는지, 이 방법이 어디서 작동을 멈추는지, 그리고 코딩 에이전트로 두 모델을 Apidog CLI를 사용해 비교하는 방법을 다룹니다.

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

가중치 공간 프로그래밍은 범용 LLM이 신경망의 가중치를 직접 읽고 쓰는 것으로, 평범한 언어로 된 목표에 따라 진행되며 경사 하강법도, 학습 루프도 없습니다. 모델은 네트워크의 각 부분이 무엇을 계산하는지 추론한 다음, 프로그래머가 소스 코드를 편집하듯 손으로 숫자를 바꿉니다.

이 용어는 Rikiya Takehi, Jayden Teoh, Alex Zhang, Omar Khattab이 2026년 11월 2일에 발표한 Sparks of Weight-Space Programming에서 나왔습니다. 저자들은 모든 결과를 "매우 초기 단계"라고 부르며, 여러 결과는 한 번 또는 몇 번의 실행에서 나온 것입니다. 편집을 수행하는 모델에 대한 배경은 GPT-6 Astra 실전 리뷰를 참고하세요.

GPT-6 Astra가 Qwen3.5-0.8B를 고친 방법

핵심 결과는 실험 8입니다. 연구자들은 GPT-6 Astra에게 가중치를 편집해서 Qwen3.5-0.8B의 수학 실력을 향상시키라고 요청했습니다. 무슨 일이 있었는지 단계별로 살펴보겠습니다:

  1. 준비. Astra는 모델의 가중치가 로드된 파이썬 세션(노트북 같은 것)과 GPU 없이, 학습 세트에서 가져온 7,469개의 GSM8K 문제와 7,275개의 MATH 연습 문제를 받았습니다. 테스트 세트는 전혀 보지 못했습니다.
  2. 예산. 학습 대신, Astra는 10회, 25회 또는 50회의 순전파를 사용할 수 있었습니다. 순전파 한 번으로 모델이 최대 512개의 문제에 답하거나 최대 1,024개의 텍스트를 읽을 수 있었습니다.
  3. 진단. Astra는 베이스 모델이 루프에 빠진다는 것을 발견했습니다. 처음 96개의 연습 문제 답변 중 85개가 답에 도달하지 못한 채 32,768 토큰 한도까지 실행되었습니다. 저자들은 Qwen의 자체 모델 카드에서도 이 모델이 사고 루프에 빠지기 쉽다고 경고하고 있다고 언급합니다.
  4. 추적. Astra는 루프의 원인을 15번과 19번 레이어의 MLP가 기록하는 하나의 방향으로 추적했습니다.
  5. 편집. 두 레이어 각각에서 down_proj의 출력 열 64개에서 그 방향을 빼냈습니다. 이는 8억 개 중 131,072개의 가중치입니다.

Diagram of the Qwen3.5-0.8B edit: 24 transformer layers with the MLP down_proj in layers 15 and 19 highlighted, one looping direction subtracted from 64 output columns in each, 131,072 weights changed in total

Hugging Face 모델 카드에 따르면, 이 두 개의 down_proj 텐서만 베이스 Qwen/Qwen3.5-0.8B 체크포인트와 다르며, 재구성된 각 텐서는 저자들이 평가한 것과 sha256으로 검증되었습니다. 편집된 모델은 Apache 2.0으로 배포됩니다.

결과: 베이스 vs 편집된 Qwen3.5-0.8B

여기의 모든 수치는 저자들의 글에서 가져온 것입니다(사고 켜짐, 최대 32,768 토큰, 문제당 여러 샘플). "토큰 한도 도달"은 MATH-500 답변 중 토큰이 바닥난 비율입니다.

Qwen3.5-0.8B MATH-500 GSM8K IFEval 토큰 한도 도달
베이스 7.9% 13.8% 21.0% 93.0%
편집됨, 순전파 10회 12.3% 25.7% 49.0% 87.2%
편집됨, 순전파 25회 14.1% 25.1% 39.9% 86.4%
편집됨, 순전파 50회 48.1% 67.1% 62.3% 33.1%

Bar chart comparing base and edited Qwen3.5-0.8B as reported by the authors: MATH-500 7.9% to 48.1%, GSM8K 13.8% to 67.1%, IFEval 21.0% to 62.3%, answers hitting the token limit 93.0% to 33.1%

  • 수정이 일반화되었습니다. 루프는 수학에만 국한된 문제가 아니므로 IFEval도 대략 세 배로 늘었습니다.
  • 예산이 중요했습니다. 순전파 10회나 25회에서는 루프가 거의 사라지지 않았습니다.
  • 다른 사람이 재현했습니다. Hugging Face의 Ahsen Khaliq는 로그로부터 체크포인트를 재구성하고 전체 MATH-500(500개 문제, 각 4개 샘플)을 다시 실행했습니다. 편집된 모델은 51.0%를 기록했고, 답변의 31.6%가 한도에 도달했습니다. 베이스 모델의 25개 문제 스모크 테스트는 5.0%였습니다.

데모 Space에서 문제를 입력하고 두 모델이 답하는 모습을 볼 수 있습니다.

가중치 편집이 할 수 없는 것

저자들은 핵심 결과보다 더 중요한 대조 실험을 진행했습니다. 좀처럼 루프에 빠지지 않는 모델인 Gemma 3 270M에 같은 접근법을 시도했습니다(답변의 8.5%가 한도에 도달한 반면, Qwen은 93%였습니다).

Gemma 3 270M MATH-500
베이스 6.8%
최선의 편집 (순전파 25회) 7.7%

Gemma의 오류는 잘못된 산술 같은 평범한 것들이었고, 꺼버릴 만한 단일 구성 요소가 없었습니다. 저자들의 결론은 이렇습니다: 편집은 능력을 가리고 있던 장애물을 제거했지만, 모델에게 없던 능력을 더해주지는 못했습니다. Qwen은 이미 많은 답을 도출할 수 있었습니다. 다만 그것을 끝마치지 못했을 뿐입니다.

그러므로 이것은 "학습은 끝났다"가 아닙니다. 한 곳에 존재하는 하나의 실패를 프런티어 모델이 찾아내 제거한 것입니다.

가중치 공간 프로그래밍 논문의 나머지

실험 8은 여덟 개 중 하나입니다. 나머지는 훨씬 작은 네트워크를 사용합니다:

  • 가중치 읽기. 순수한 가중치만으로, Astra는 PPO로 학습된 게임 정책 4개 중 4개의 게임 이름을, 그리고 소형 문자 단위 언어 모델 3개 중 3개의 학습 언어를 알아맞혔습니다.
  • 정책 수정. 256번의 에피소드 중 256번 실패한 Kinetix 자동차 정책이, Astra가 한 번의 답변에서 가중치의 3.5%를 편집한 뒤 1,024번 중 1,024번 성공했습니다.
  • 가중치를 처음부터 쓰기. Astra는 MinAtar Breakout 가중치를 작성해 5억 스텝 동안 학습된 PPO의 25.3에 맞서 517.4점을 기록했습니다. Seaquest에서는 88.9 대 53.1로 졌습니다.
  • 바둑. 148만 개 가중치의 9x9 바둑 네트워크를 0에서 작성했고, 순전파 50회로 동일한 크기의 PPO 네트워크를 이겼습니다.
  • 실패 사례. 가중치만으로는 Gemma 3 270M 사본 두 개 중 어느 것이 아첨하도록 학습되었는지 구분하지 못했습니다. 어텐션 패턴에 접근하자 세 쌍 모두에서 아첨 모델을 골라냈습니다.

전체 실험 로그에는 모든 프롬프트, Astra의 추론 요약, 실행한 모든 코드가 포함되어 있습니다.

Qwen3.5-0.8B 사고 루프 수정을 직접 확인하기

가장 깔끔한 테스트는 두 체크포인트를 동일한 OpenAI 호환 API 뒤에 서빙하고 같은 프롬프트를 보내는 것입니다. vLLM은 모델당 명령 하나로 이를 수행합니다:

vllm serve Qwen/Qwen3.5-0.8B --port 8001 \
  --served-model-name qwen --max-model-len 34816 --gpu-memory-utilization 0.45

vllm serve RikiyaT/Qwen3.5-0.8B-weight-space-programming --port 8002 \
  --served-model-name qwen --max-model-len 34816 --gpu-memory-utilization 0.45
Enter fullscreen mode Exit fullscreen mode

두 서버 모두 qwen이라는 이름에 응답하므로, 하나의 요청 본문이 어느 포트에서든 작동합니다. --max-model-len 34816은 모델 카드의 예시와 일치합니다.

각 요청은 저자들의 샘플링 설정을 그대로 따르고 사고를 켭니다:

{
  "model": "qwen",
  "messages": [{"role": "user", "content": "{{question}}\nPlease reason step by step, and put your final answer within \\boxed{}."}],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "presence_penalty": 1.5,
  "max_tokens": 32768,
  "chat_template_kwargs": {"enable_thinking": true}
}
Enter fullscreen mode Exit fullscreen mode

마지막 \boxed{} 값이 답이며, finish_reason은 모델이 멈췄는지(stop) 아니면 토큰이 바닥났는지(length)를 알려줍니다. length로 끝났다면 루프입니다.

GPU를 돌리기 싫다면, 같은 방식으로 GPT-6 Astra API를 테스트하거나, 무료 Qwen3.5 Ollama 설정으로 소형 Qwen 모델들을 로컬에서 비교할 수 있습니다.

코딩 에이전트로 Apidog CLI를 사용해 두 모델을 테스트하기

스무 개의 긴 생성 결과를 손으로 채점하는 일은 코딩 에이전트에게 맡길 일입니다. Apidog CLI는 에이전트에게 환경, 테스트 시나리오, 데이터 기반 실행 및 리포트를 제공하며, 여러분의 컴퓨터에서 실행되므로 localhost 엔드포인트가 작동합니다.

설치하고 에이전트에게 스킬을 부여하세요:

npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
npx -y skills add https://apidog.com   # pick your agent when prompted
Enter fullscreen mode Exit fullscreen mode

그런 다음 Claude Code, Codex, Cursor 또는 OpenCode에 프롬프트 하나를 주세요:

In Apidog project <id>, create two environments: qwen-base at http://localhost:8001
and qwen-edited at http://localhost:8002. Create a test scenario that POSTs to
/v1/chat/completions with the body in request.json, using {{question}} from the
first 10 GSM8K test questions in gsm8k-10.csv. Assert that the last \boxed{} value
equals {{answer}} and that choices[0].finish_reason is not "length". Run it against
both environments and give me a table: correct answers and length finishes per model.
Enter fullscreen mode Exit fullscreen mode

에이전트는 페이로드 스키마를 읽고 JSON을 검증한 다음, 다음 명령들을 실행합니다:

apidog environment create qwen-base --project <id> --base-url http://localhost:8001
apidog environment create qwen-edited --project <id> --base-url http://localhost:8002
apidog cli-schema get test-scenario-create
apidog cli-schema validate test-scenario-create --file scenario.json
apidog test-scenario create --project <id> --file scenario.json
apidog run -t <scenarioId> --project <id> -e <baseEnvId> \
  -d gsm8k-10.csv --timeout-request 1800000 -r cli,json --out-file qwen-base
apidog run -t <scenarioId> --project <id> -e <editedEnvId> \
  -d gsm8k-10.csv --timeout-request 1800000 -r cli,json --out-file qwen-edited
Enter fullscreen mode Exit fullscreen mode

-d는 각 CSV 행을 하나의 반복으로 공급합니다. --timeout-request는 밀리초 단위이며, 루프에 빠진 답변은 32,768 토큰을 다 태우는 데 몇 분이 걸릴 수 있습니다. -r cli,json은 요약을 출력하고 에이전트가 비교할 수 있는 JSON 리포트를 작성합니다. 10개의 질문은 GSM8K 테스트 분할에서 가져온 것입니다.

Flow of the comparison: a coding agent runs apidog run on one test scenario with GSM8K iteration data against two vLLM environments, base Qwen3.5-0.8B on port 8001 and edited Qwen3.5-0.8B on port 8002, and compares answers and finish_reason in the reports

여러분의 실행이 저자들의 것과 비슷하다면, 대부분의 베이스 답변이 finish_reason 검증에 실패하고 대부분의 편집된 답변이 통과할 것입니다. 10개의 질문은 스모크 테스트이지 벤치마크가 아니므로, 격차를 점수가 아닌 신호로 취급하세요. --upload-report를 추가하면 앱에서 실행 결과를 볼 수 있으며, 모든 플래그는 apidog run 명령 참조에서 확인하세요.

같은 시나리오는 어떤 모델 교체에도 회귀 테스트로 사용할 수 있습니다; Apidog CLI CI/CD 가이드에서 -r junit 설정을 보여줍니다.

소형 모델을 출시한다면 이것이 의미하는 것

  • 정확도만이 아니라 잘림(truncation)을 측정하세요. Qwen의 7.9%는 대부분 답을 끝마치지 못하는 모델을 가리고 있었습니다. finish_reason 검사가 이를 잡아냅니다.
  • 단일 원인 실패를 찾으세요. 루프와 반복은 네트워크의 좁은 부분에 존재할 수 있습니다.
  • 대조 실험을 기억하세요. 모델이 막힌 게 아니라 틀린 것이라면, 이런 편집은 도움이 되지 않습니다.

에이전트 작업에 쓸 GPT-6 등급을 고르시나요? GPT-6 Luna vs Sol vs Astra를 참고하세요.

FAQ

GPT-6 Astra가 Qwen3.5-0.8B를 학습시켰나요? 아닙니다. 저자들은 경사 하강법도 학습 루프도 허용하지 않았습니다. Astra는 파이썬 세션에서 가중치를 편집했고, 10회, 25회 또는 50회의 순전파를 통해서만 모델을 관찰했습니다.

편집으로 가중치가 얼마나 바뀌었나요? 131,072개의 가중치로, 저자들은 이를 모델의 0.016%라고 밝혔습니다. 변경 사항은 15번과 19번 레이어의 MLP에 있는 down_proj 행렬에 있으며, 각각 출력 열 64개입니다.

편집된 모델을 구할 수 있나요? 네, Hugging Face에 RikiyaT/Qwen3.5-0.8B-weight-space-programming으로 Apache 2.0 하에 공개되어 있으며, 변경된 두 텐서의 해시와 독립적인 재실행 결과(MATH-500에서 51.0%)도 함께 제공됩니다.

수학 점수가 왜 이렇게 크게 뛰었나요? 베이스 모델이 루프에 빠졌기 때문입니다. MATH-500에서 답변의 93.0%가 32,768 토큰 한도에 도달했습니다. 편집으로 이것이 33.1%로 줄어, 모델이 이미 도출할 수 있었던 답을 끝마치게 되었습니다. 새로운 수학을 배운 것이 아닙니다.

가중치 공간 프로그래밍은 어떤 모델에서나 작동하나요? 저자들 스스로 말하기를 아직 아닙니다. 좀처럼 루프에 빠지지 않는 Gemma 3 270M에서는 최선의 편집이 MATH-500을 6.8%에서 7.7%로 옮겼을 뿐입니다. 저자들은 자신들의 모든 결과를 매우 초기 단계라고 부릅니다.

코드를 작성하지 않고 편집된 모델을 테스트할 수 있나요? 네. Hugging Face 데모 Space가 여러분이 입력한 문제에 대해 두 모델을 실행합니다. 반복 가능한 확인을 원한다면, 위에 나온 대로 vLLM과 Apidog CLI를 사용하세요.