본문으로 건너뛰기
effidevFlutter · Cloudflare 엣지 · 클라우드 비용 최적화

수학 7.9%→48.1%, 고친 가중치는 0.016%

effidev

AI가 AI의 가중치를 고쳤다 수학 7.9%에서 48.1%로 바뀐 곳은 0.016%

AI 모델이 이상하게 굴 때 지금 우리가 쓸 수 있는 처방은 대개 두 가지다. 프롬프트를 고치거나, 데이터를 모아 다시 학습시키거나. 모델 안의 숫자를 직접 열어 “여기가 문제네” 하고 고치는 길은 연구자들의 영역이었다. 11월 2일 MIT CSAIL 연구진이 올린 글은 그 영역에 다른 AI가 들어갈 수 있다는 결과를 내놨다. 연구진은 이 방식을 가중치 프로그래밍이라고 부른다.

핵심은 이렇다. 오픈AI의 GPT-6 Astra가 작은 모델 Qwen3.5-0.8B의 가중치 중 **0.016%**만 직접 고쳤더니, 수학 시험 MATH-500 점수가 **7.9%에서 48.1%**로 올랐다. 학습 코드도, 경사하강법도 쓰지 않았다. 해커뉴스에서는 1,500점이 넘고 댓글이 500개 넘게 달렸다. 다만 이 숫자는 읽는 법이 중요하다. 이 글에서는 실험 여덟 개를 하나씩 따라가며 무엇이 확인됐고 무엇이 아직 아닌지를 가른다.

이 글이 필요한 사람은 이런 쪽이다. 작은 오픈 모델을 직접 돌려 보면서 “왜 이렇게 오래 생각하다 멈추지 않지?” 하고 의아했던 사람, AI가 AI를 개선하는 흐름(재귀적 자기개선)이 어디까지 왔는지 궁금한 사람, 그리고 벤치마크 점수가 오른 이유를 따져 읽고 싶은 사람이다. 원문 글 전체, 실험 설정 표, 공개된 결과 수치를 읽고 정리했다.

용어 네 개부터 짚자. **가중치(weights)**는 AI가 학습으로 얻은 숫자 전체다. 모델의 “기억과 습관”이 숫자 수십만~수십억 개로 저장된 것이라고 보면 된다. PPO는 게임 같은 환경에서 시행착오로 행동을 배우는 대표적인 강화학습 방법이다. 포워드 패스는 모델에 입력을 한 번 넣어 결과를 뽑아 보는 것이고, 이 글에서는 “모델을 실제로 돌려 보는 횟수”로 읽으면 된다. 경사하강법은 숫자를 조금씩 바꿔 가며 점수를 올리는 기존 학습의 기본 방식이다.

여덟 개 실험을 한 표에 놓으면

원문은 실험을 1번부터 8번까지 번호로 부른다. 먼저 결과만 모으면 이렇다. 앞쪽 다섯 개는 도구와 돌려 보기를 막은 “순수 시험”이고, 6~8번은 샌드박스나 돌려 보기를 일부 허용했다. 그중 마지막이 실제 언어 모델을 고친 실험이다.

번호 시킨 일 결과 조건
1 가중치만 보고 어느 게임을 배운 네트워크인지 맞히기 네 개 모두 정답 가중치 17,253개, 도구 없음
2 가중치만 보고 어떤 도형을 그리는 확산 모델인지 맞히기 세 개 모두 정답 가중치 23,824개, 돌려 보기 금지
3 입력·출력층을 뺀 가운데 층만 보고 학습 언어 맞히기 세 모델 모두 정답 7.16M 모델, 코드 분석만 허용
4 램프를 못 넘는 자율주행 차의 가중치 고치기 1,024판 전부 성공 한 번의 답, 가중치 3.5% 수정
5 게임 세 종류의 네트워크를 0에서 새로 쓰기 PPO 1억 걸음 학습분을 전부 이김 학습 데이터·도구 없음
6 9×9 바둑 네트워크(가중치 약 148만 개) 새로 쓰기 돌려 보기 50회 허용 시 2천만 판 학습분을 이김 코드 샌드박스 허용
7 아첨하는 모델과 정직한 모델 가려내기 가중치만으로는 4번 모두 실패 주의 패턴을 보면 3쌍 성공
8 Qwen3.5-0.8B를 수학에 더 강하게 만들기 MATH-500 7.9% → 48.1% 돌려 보기 50회, 가중치 0.016% 수정

표의 숫자는 전부 원문에 적힌 값이다. 실험 6~8은 “도구 없이”가 아니라 파이썬 샌드박스나 돌려 보기 횟수를 일부 허용했다는 점이 다르다. 이 차이는 뒤에서 다시 나온다.

읽기: 숫자 17,253개만 보고 게임 이름을 맞혔다

실험 1은 가장 단순해서 가장 이해하기 좋다. 연구진은 같은 구조의 작은 신경망 네 개를 만들고, 각각 다른 게임(벽돌깨기·퐁·팩맨·프리웨이)으로 PPO를 10억 걸음 학습시켰다. 입력 채널도, 행동 다섯 가지도, 가중치 개수(17,253개)도 똑같이 맞췄다. 그래서 가중치를 읽지 않고는 구분할 수 없다.

Astra에게는 가중치를 글자로 풀어 통째로 넣고 “이 네트워크는 어느 게임을 배웠나”만 물었다. 보기 목록도 주지 않았고 도구도 없었다. 네 개 모두 정답이었다. 벽돌깨기 네트워크에는 99% 확신이라고 답했다.

이유로 든 설명은 구체적이다. 첫 층에서 플레이어를 나타내는 채널의 가중치가 화면 맨 아랫줄에 몰려 있으면 아래에서 좌우로 움직이는 막대기, 즉 벽돌깨기의 패들이라는 식이다. 출력층이 어떤 행동끼리 구분하는지도 단서로 썼다.

실험 2는 확산 모델이다. 12×12 흑백 이미지로 원·삼각형·사각형을 각각 그리게 학습시킨 작은 네트워크 세 개(가중치 23,824개)를 주고, 무엇을 그리는지 물었다. 역시 맞혔다. 흥미로운 대목은 Astra가 세 도형을 전부 윤곽선으로 그렸다는 것이다. 실제 모델은 속이 찬 도형을 그린다. 연구진은 이 오류를 “모델을 머릿속에서 계산해 본 게 아니라 가중치의 모양을 읽었다는 증거”로 해석했다. 그럴듯하지만 이건 저자들의 해석이지 검증된 사실은 아니다.

가운데 층만 줘도 언어와 ’복사하는 머리’를 찾았다

실험 1과 2는 첫 층이나 끝 층만 봐도 힌트가 나온다는 반론이 가능하다. 실험 3은 그 길을 막았다. 글자 단위로 다음 글자를 예측하는 작은 트랜스포머(층 4개 × 어텐션 헤드 6개, 가중치 716만 개) 세 개를 만들어 각각 파이썬 코드, 일본어 로마자, 영어 위키백과를 10억 글자씩 학습시켰다. 그리고 입력층과 출력층을 떼어 내 가운데 블록 네 개만 줬다. 이러면 어느 숫자가 어느 글자인지조차 가중치에 적혀 있지 않다.

Astra는 파이썬으로 가중치를 분석할 수 있었지만 모델을 어떤 입력으로도 돌리면 안 됐다. 연구진은 모든 실행을 확인했다고 적었다. 결과는 세 모델 모두, 두 번 시도 모두 학습 언어를 맞혔다. 어텐션 헤드 24개 중 **이미 나온 글자열을 베껴 쓰는 헤드(유도 헤드)**도 전부 찾아냈고, 다른 헤드를 그렇다고 잘못 짚지도 않았다. 이 헤드는 실제로 모델에 무작위 문자열을 두 번 반복해 넣어 재서 정답을 만들었고, Astra는 그 정답을 본 적이 없다.

추론 과정도 적혀 있다. 코드는 같은 이름을 반복해서 쓰니까 베끼는 헤드가 많을 것이고, 그래서 파이썬이라고 판단했다. 로마자 일본어는 마지막 블록이 쓰는 방향이 적은 것으로 봤고, 실제로 이 데이터에는 q·l·v·x 같은 글자가 쓰이지 않는다. 가중치 행렬을 곱해 뒤쪽 헤드가 앞쪽 헤드의 출력을 어떻게 쓰는지 찾는 방법은 해석가능성 연구의 기존 논문 방법인데, 연구진은 Astra에게 그 이름을 알려 준 적이 없다고 했다.

쓰기 ①: 램프를 못 넘는 차를 한 번에 고쳤다

읽는 것과 쓰는 것은 다르다. 실험 4는 물리 시뮬레이션 환경 Kinetix의 “차가 램프를 넘는 판”이다. 차가 램프를 넘으려면 먼저 뒤로 물러나 달릴 거리를 확보해야 한다. 그런데 PPO가 10억 걸음 학습한 네트워크는 곧장 앞으로 달려 램프에 걸리는 국소 최적에 갇혔다. 256판 중 성공이 0번이었다.

Astra에게는 가중치와 장면 설명, 기록된 한 판을 주고 “왜 실패하는지 설명하고 원인만 고쳐라”고 한 번만 답하게 했다. 도구는 없었다. 결과는 1,024판 모두 성공이었고, 바뀐 가중치는 3.5%였다. 설명에 따르면 각 층에 작은 우회 경로를 추가해 차의 위치와 속도를 읽다가, 초록 바퀴가 빨간 선을 넘으면 그 경로가 꺼지고 원래 네트워크가 나머지를 맡도록 만들었다.

쓰기 ②: 처음부터 쓴 신경망이 PPO를 이겼다

실험 5는 더 과감하다. MinAtar의 게임 세 종류(Breakout·Seaquest·Asterix)에서 가중치가 전부 0인 네트워크를 주고, 게임 규칙과 소스 코드를 읽은 Astra가 가중치를 글자로 한 번에 써 내려가게 했다. 데이터도 손실 함수도 도구도 없고, 쓴 네트워크는 채점 전에 게임을 한 번도 돌지 않는다.

게임 PPO 1억 걸음 PPO 5억 걸음 Astra 한 번에 쓴 것
Breakout 15.8 25.3 517.4
Seaquest 5.6 88.9 53.1
Asterix 25.8 55.2 53.2

세 게임 모두 PPO 1억 걸음 학습분을 넘었다. 5억 걸음과 비교하면 Breakout은 약 20배, Asterix는 비슷하고, Seaquest는 약 60% 수준이다. 설명에 따르면 Breakout에서는 첫 층에서 공이 떨어질 위치를 계산하고 둘째 층에서 패들을 그 위치로 보내는 식으로 “프로그램을 신경망 모양으로 번역”했다.

실험 6은 규모를 키웠다. 9×9 바둑 네트워크(243 → 512 × 6 → 82, 가중치 1,480,274개)는 문맥에 직접 들어가지 않는 크기라서 파이썬 샌드박스에서 가중치 텐서를 만들고 저장하게 했고, 돌려 보기 횟수를 0회부터 50회까지 바꿔 가며 성능을 쟀다. 0회에서도 작은 PPO 네트워크 두 개를 상대로 절반 넘게 이겼다. 50회를 허용하자 2천만 판을 학습한 같은 크기 PPO 네트워크를 이겼다. 돌려 보기 0회일 때는 336줄짜리 파이썬 코드 한 번으로 “돌과 빈 점 표시 → 연결된 돌 무리의 위험 찾기 → 잡기·살리기 점수”를 층층이 짰다. 돌려 보기를 허용하면 연습 판을 돌려 지는 이유를 보고 해당 부분을 고치되, 더 많이 이길 때만 변경을 남겼다고 한다.

수학 7.9%→48.1%를 읽는 법

가장 눈에 띄는 숫자는 실험 8에서 나왔다. 대상은 Qwen3.5-0.8B, 생각하기(thinking) 모드를 켠 상태였다. Astra는 CPU 파이썬 세션에서 모델 가중치를 열 수 있었고, GSM8K와 MATH의 학습용 문제(각각 7,469개·7,275개)를 골라 모델을 돌려 볼 수 있었다. 돌려 보기 횟수는 10·25·50회로 바꿨다. 경사하강법은 금지였고, 평가용 문제는 본 적이 없다.

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%

표를 읽는 순서가 중요하다. 오른쪽 끝 칸부터 보자. 원본 모델은 MATH-500 답변의 93%가 토큰 한도(32,768개)에 닿도록 같은 말을 되풀이했다. 연구진이 처음 확인한 연습 문제 96개 중 85개가 그랬다. Qwen 모델 카드가 이 모델이 생각 루프에 빠지기 쉽다고 경고한 바로 그 증상이다. Astra는 이 루프의 원인을 24개 층 중 15번과 19번 층의 MLP가 쓰는 한 방향으로 짚었고, 그 방향을 각 층 출력 열 64개에서 빼는 식으로 131,072개(0.016%)를 고쳤다.

그래서 이 결과의 정확한 문장은 “작은 모델이 수학을 6배 잘하게 됐다”가 아니라 “작은 모델이 풀 수 있던 문제를 끝까지 쓰게 됐다”에 가깝다. 한도에 걸린 비율이 93%에서 33%로 줄면서 점수가 따라 올랐다. 같은 루프가 수학만의 문제가 아니라서 지시 따르기 시험 IFEval도 21.0%에서 62.3%로 올랐다. 연구진도 같은 해석을 직접 적었다. 루프를 고치는 일은 수학 실력을 올리는 일과 같지 않고, 모델이 이미 풀 수 있던 답을 끝내게 해 주는 것이라고 했다.

하나 더 눈여겨볼 점은 단계별 숫자가 단조롭지 않다는 것이다. 10회와 25회 때는 MATH-500이 12.3%와 14.1%로 조금 올랐을 뿐이고 루프도 거의 그대로였다. IFEval은 10회에서 49.0%였다가 25회에서 39.9%로 오히려 내려갔다. 50회에서야 한도에 걸린 비율이 확 줄었다. 돌려 보기 횟수가 충분해야 한다는 뜻으로 읽을 수 있지만, 각 횟수마다 Astra가 몇 번씩 시도해 이 값을 얻었는지는 확인하지 못했다.

안 된 일 두 가지: 아첨 모델과 젬마

이 글의 신뢰도를 올려 주는 건 실패를 숨기지 않은 부분이다.

첫째, 실험 7이다. 같은 방식으로 파인튜닝한 Gemma 3 270M 두 개 중 하나는 정답을 말하고 다른 하나는 사용자가 찍은 답을 그대로 따른다(아첨, sycophancy). 이 아첨 모델은 사용자의 틀린 추측을 100% 따랐고 정직한 모델은 1~3%만 따랐다. 가중치만 준 4번의 시도에서 Astra는 두 모델의 차이를 많이 찾았지만 그 차이를 행동으로 연결하지 못했고, 어느 쪽이 아첨 모델인지 못 맞혔다.

연구진이 조건을 풀어 Astra가 직접 쓴 문장(최대 16개)에 두 모델을 돌려서 어텐션 패턴만 보게 하자, 세 쌍 모두에서 아첨 모델을 골랐다. 단서는 10번 층 2번 헤드였다. 정직한 모델은 이 헤드가 질문의 숫자를 94.3% 보고 사용자의 답은 0.75%만 보는데, 아첨 모델은 질문의 숫자를 3.5%, 사용자의 답을 85.7% 봤다. 즉 “가중치만 읽기”는 이 과제에서 안 됐고, “돌려서 보이는 신호를 읽기”는 됐다.

둘째, 젬마 대조 실험이다. Qwen이 루프 때문에 점수가 낮았다면 루프가 없는 모델은 어떨까. 같은 방법으로 Gemma 3 270M(루프 비율 8.5%)에 시켜 봤더니 MATH-500은 원본 6.8%에서 7.0~7.7%에 머물렀다. Astra가 읽은 젬마의 실패 원인은 계산 실수나 잘못된 대수 전개 같은 평범한 추론 오류였고, 하나만 끄면 되는 부품이 없었다. 편집은 “숫자에 반응하는 뉴런 하나를 두 배로”처럼 작았고, 어느 것도 1점 이상 올리지 못했다. 연구진의 표현대로 가중치 편집은 가려져 있던 능력을 드러낼 수는 있어도, 없던 능력을 만들어 주지는 못했다.

가중치 프로그래밍이라는 이름이 가리키는 것

저자들은 이 방식에 **가중치 프로그래밍(Weight-Space Programming)**이라는 이름을 붙였다. 범용 LLM이 최적화기를 거치지 않고 신경망의 가중치를 직접 읽고 쓰는 것을 뜻한다. 지금까지 LLM은 프롬프트나 코드, 학습 설정 같은 글로 된 산출물을 개선해 왔다. 이제 같은 방식이 미분 가능한 신경망 자체로 번진다는 주장이다.

저자들이 내다본 활용은 다섯 가지다. 평가 없이 가중치만 보고 숨은 문제(예: 백도어)를 찾는 감사, 데이터 수집·학습 없이 모델을 초기화해 최적화 비용을 줄이기, 특정 능력을 더하거나 지우는 편집, 모델이 자기 가중치나 새 모델의 가중치를 고치는 재귀적 자기개선, 구조가 다른 모델끼리 회로를 이식하는 병합이다. 모두 저자들의 전망이다. 이 글의 실험이 보인 것은 작은 네트워크와 작은 언어 모델에서 일어난 일이고, 원문도 스스로 “아주 초기 결과”이며 컨텍스트 길이와 도구(하네스)의 비효율 때문에 한계가 있다고 적었다. 연구진은 이를 재는 벤치마크와 하네스를 만드는 중이다.

해커뉴스 댓글에서 갈린 세 지점

해커뉴스 글은 11월 3일 오전 기준 1,500점대, 댓글 500개 안팎이다. 댓글 중 반응이 큰 줄기는 세 가지로 갈렸다. 아래는 댓글 작성자들의 의견이지 검증된 사실이 아니다.

첫째는 놀람이다. 가장 많은 답글이 달린 댓글은 도구 없이 게임을 맞히고 가중치를 직접 고쳐 수학을 5배쯤 끌어올렸다는 점이 놀랍다고 했다. 사람은 뇌를 열어 수학을 잘하게 만들 수 없는데 이 모델은 그걸 한다는 비교였다.

둘째는 “학습 데이터에 그런 예가 들어 있었던 것 아니냐”는 의심이다. 어떤 댓글은 가중치 편집 예시가 충분히 있었는지 묻고, 또 다른 댓글은 오픈AI가 재귀적 자기개선을 노리고 신경망 가중치 데이터를 학습시켰을 가능성을 추측했다. 초기 GPT가 기보 형식이 맞으면 체스를 잘 뒀던 것과 같은 현상일 수 있다는 비유도 나왔다. 확인된 바는 없다.

셋째는 “작은 네트워크라면 사람도 짐작한다”는 반론이다. 한 댓글은 MNIST용 MLP처럼 구조가 단순하면 입력층만 봐도 사람도 비슷하게 추정할 수 있다고 했다. 그리고 더 놀라운 건 큰 모델 쪽인데, 세부를 보면 돌려 보기와 제한적인 실험을 꽤 허용했다고 짚었다. 이 지적은 이 글의 앞 표에서 확인했다. 실험 15는 모델을 돌려 보지 못하게 했고, 68은 돌려 보기를 허용했다.

써먹는 법: 점수를 읽기 전에 세 가지

가중치 프로그래밍이 내일 당장 내 작업을 바꾸지는 않는다. 가중치를 직접 고치는 상용 서비스나 도구가 나온 게 아니다. 하지만 읽는 법은 바로 가져다 쓸 수 있다.

첫째, 작은 추론 모델의 낮은 점수는 “능력 부족”인지 “끝내지 못함”인지 먼저 가른다. 평가표에 “토큰 한도에 걸린 비율” 칸을 하나 더 넣으면 된다. 이 실험은 샘플링 설정(온도 0.6, top-p 0.95, top-k 20, presence penalty 1.5)을 걸고 쟀는데도 원본 모델의 93%가 한도에 닿았다. 설정을 걸었다고 안심하면 안 된다는 뜻이다.

둘째, 점수가 크게 오른 변경이 있으면 “무엇을 가렸다가 드러낸 것인지” 대조군으로 확인한다. 이 연구가 루프 없는 젬마에 같은 방법을 써 본 것처럼, 같은 처치가 다른 모델에서도 오르는지 보면 “능력이 생긴 것”과 “방해물이 치워진 것”이 갈린다.

셋째, 직접 눈으로 확인할 수 있는 자료가 공개돼 있다. 연구진은 모든 실험의 로그(Astra에게 보낸 입력, 응답, 실행한 코드와 출력, 평가)를 GitHub에 올렸고, 수정한 Qwen3.5-0.8B는 허깅페이스에 있으며 데모 스페이스도 열려 있다. 허깅페이스의 아흐센 칼리크가 로그로 모델을 다시 만들고 평가를 재실행했다고 원문이 적었다. 수정판과 원본을 같은 문제로 돌려 한도에 걸린 비율부터 비교해 보면 이 글이 말한 구조가 눈에 보인다. 이 글은 그 단계까지 해 보지는 않았다.

Astra와 같은 GPT-6 계열의 값과 점수를 다룬 GPT-6.1 Terra 글도 함께 보면 좋다. 가중치 개념이 낯설다면 미스트랄 Large 4 가중치 공개 글의 앞부분에 같은 용어를 더 천천히 풀어 두었다. 같은 가중치라도 실행 환경에 따라 결과가 갈릴 수 있다는 점은 로컬 LLM 추론 불일치 글에서 실제로 쟀다.

이 글의 빈칸

출처 목록