가중치는 원래 사람이 손으로 정하던 거다, 퍼셉트론 배선부터 보는 "학습"의 정체
LLM이 신경망 가중치를 직접 읽고 고쳐서 Qwen 수학 점수를 올렸다는데, 이게 신기한 이유는 가중치를 사람이 손으로 못 다뤄서 “학습”이라는 우회로를 만들었기 때문이다. 그 우회로가 왜 생겼는지부터 보면 이번 소식이 어디를 건드리는지 보인다.
- 신경망 초기에는 가중치를 사람이 직접 정하거나 기계 손잡이를 돌려 맞췄고, 층이 깊어지면서 이게 불가능해졌다.
- 그래서 “정답과의 차이를 줄이는 방향으로 숫자를 조금씩 밀어라”는 경사하강법과 역전파가 표준이 됐다.
- 이번 글은 그 숫자 밀기를 LLM이 추론으로 대신한 첫 징후이고, 아직 초기 결과라 과장 여부는 따져봐야 한다.
학습이라는 말이 없던 시대
신경망의 가중치는 입력 하나가 결과에 얼마나 영향을 주는지 정한 숫자다. 뉴런 하나는 “입력에 가중치를 곱해서 더하고, 기준을 넘으면 켜진다”가 전부다. 이 숫자들이 곧 프로그램이다.
1940년대에 나온 McCulloch-Pitts 뉴런 모델에서는 이 숫자를 사람이 정했다. AND, OR 같은 논리 회로를 뉴런으로 흉내 내는 수준이라 머리로 계산해서 박아 넣으면 됐다. 학습이라는 개념이 끼어들 자리가 없었다.
50년대 퍼셉트론은 한 발 나아갔다. Rosenblatt의 Mark I Perceptron은 가중치를 전동 가변저항으로 구현해서, 틀릴 때마다 기계가 스스로 저항값을 돌려 조정했다. 사람이 손잡이를 돌리는 대신 기계가 돌린 셈이다.
여기서 이런 의문이 든다. 그냥 계속 손으로 짜면 안 됐나? 숫자가 10개일 때는 된다. 하지만 입력이 이미지 한 장이면 숫자가 수만 개고, 각 숫자가 무슨 역할인지 사람이 말로 설명할 수도 없다. 이번 글의 실험 1에 나온 작은 네트워크도 가중치가 17,253개다.
그때 방식으로 직접 만들어 보기
XOR을 손으로 짜 보자. 입력 두 개가 서로 다를 때만 1을 내는 문제다. 뉴런 하나로는 못 풀고, 중간 층에 OR 뉴런과 AND 뉴런을 두고 “OR인데 AND는 아님”으로 조합해야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Python 3.x, 표준 라이브러리만 사용
def step(x):
return 1 if x > 0 else 0
def neuron(inputs, weights, bias):
return step(sum(i * w for i, w in zip(inputs, weights)) + bias)
def xor(a, b):
h_or = neuron((a, b), (1, 1), -0.5) # 하나라도 켜지면 1
h_and = neuron((a, b), (1, 1), -1.5) # 둘 다 켜져야 1
return neuron((h_or, h_and), (1, -1), -0.5) # OR이고 AND 아님
for a in (0, 1):
for b in (0, 1):
print(a, b, xor(a, b))
숫자 7개를 전부 내가 정했고, 돌려 보면 0 1 1 0이 나온다. 의도가 코드에 그대로 보이니 디버깅도 쉽다.
여기서 아픈 지점이 있다.
- 이 숫자들은 XOR이라는 문제를 내가 이미 풀어 놓고 거기서 역산한 것이다. 풀 줄 모르는 문제에는 쓸 수 없다.
- 뉴런이 3개인 지금은 되지만 수천 개가 되면 어떤 숫자가 뭘 하는지 추적이 불가능하다.
- 얼굴 인식이나 게임 플레이처럼 사람이 규칙을 말로 못 하는 문제는 아예 출발점이 없다.
그래서 어떻게 진화했나
flowchart LR
A["손으로 정한 숫자"] --> B["퍼셉트론 규칙 학습"]
B --> C["다층 + 역전파"]
C --> D["Adam 같은 옵티마이저"]
D --> E["LLM이 직접 읽고 씀"]
읽는 법: 왼쪽에서 오른쪽으로 갈수록 숫자를 정하는 주체가 사람, 단순 규칙, 알고리즘, LLM 순으로 바뀐다.
첫 단계는 퍼셉트론 학습이다. 불편한 점은 숫자를 일일이 정하기 힘들다는 것이었고, 해법은 틀린 만큼 가중치를 조금 고치는 규칙이었다. 새로 생긴 문제는 뉴런이 한 층일 때만 통한다는 것이다. 60년대 말 Minsky와 Papert가 XOR 같은 문제를 못 푼다고 짚으면서 한동안 이 분야가 식었다.
둘째 단계는 다층 신경망과 역전파다. 층을 쌓으면 XOR도 풀리지만, 중간 층 숫자가 결과에 얼마나 책임이 있는지 알 방법이 없었다. 해법이 역전파다. 출력의 오차를 뒤로 거슬러 전파해서 각 가중치가 오차에 기여한 정도를 미분으로 계산한다. 80년대 중반 Rumelhart, Hinton, Williams의 논문으로 널리 퍼졌다. 이 방식의 문제는 계산량이 크고 층이 깊으면 신호가 사라지거나 터진다는 점이었다.
기준이 되는 학습 코드는 이렇게 짧다.
1
2
3
4
5
6
7
8
import math
w, b = [0.0, 0.0], 0.0
data = [((0,0),0), ((0,1),0), ((1,0),0), ((1,1),1)] # AND
for _ in range(5000):
for (x1, x2), t in data:
y = 1 / (1 + math.exp(-(w[0]*x1 + w[1]*x2 + b)))
g = y - t # 오차
w[0] -= 0.5*g*x1; w[1] -= 0.5*g*x2; b -= 0.5*g
손으로 정하던 숫자를 “오차가 줄어드는 방향으로 조금씩 밀기”로 대체한 코드다. 사람은 목표만 말하고 숫자는 기계가 찾는다.
셋째 단계는 옵티마이저의 정교화다. 같은 보폭으로 밀면 어떤 방향은 너무 느리고 어떤 방향은 튄다. 그래서 방향마다 보폭을 자동으로 조절하는 SGD 변형들이 나왔고, 2010년대 중반의 Adam이 사실상 기본값이 됐다. 이 글이 말하는 Adam이나 Muon이 이 계보다. 새로 생긴 문제는 옵티마이저가 의미를 모른다는 점이다. 숫자를 기계적으로 밀 뿐, 이 층이 무슨 일을 하는지는 모른다. 그래서 학습이 끝난 뒤 모델 안을 들여다보는 해석 연구가 따로 필요해졌다.
| 시대 | 숫자를 정하는 쪽 | 장점 | 한계 |
|---|---|---|---|
| 40년대 | 사람 | 의도가 훤히 보임 | 풀 줄 아는 문제만 가능 |
| 50~60년대 | 단순 규칙 | 기계가 스스로 조정 | 한 층까지만 |
| 80년대 이후 | 역전파 + 경사하강 | 깊은 망도 학습 | 숫자의 의미는 모름 |
| 이번 글 | LLM | 의미를 읽고 고침 | 초기 결과, 검증 부족 |
읽는 법: 맨 오른쪽 열이 각 방식이 막힌 지점이고, 다음 줄이 그 지점을 풀려는 시도다.
지금은 어떤가
읽는 법: 오른쪽으로 갈수록 숫자를 건드리는 쪽이 더 “이해하는” 쪽이 된다. 크기는 규모가 아니라 순서만 나타낸다.
이번 MIT 글의 주장은 두 가지다. 하나는 Astra가 가중치 텍스트만 보고 이 네트워크가 어떤 게임을 학습했는지 맞혔다는 것이다. 첫 층에서 에이전트 채널의 가중치가 아래쪽 줄에 몰려 있으면 패들이 있는 Breakout이라는 식의 추론이다. 다른 하나는 Qwen3.5-0.8B의 루프 문제를 고쳤다는 것이다. 15번과 19번 층 MLP가 쓰는 방향 하나를 64개 출력 열에서 빼서 전체의 0.016%를 고쳤고, MATH-500이 7.9%에서 48.1%로 올랐다고 한다.
왜 이게 경사하강법과 다른 접근인지 짚자. 경사하강법은 정답 데이터와 손실 함수를 줘야 하고, 어디가 문제인지는 몰라도 숫자를 밀어서 줄인다. Astra는 “여기서 루프가 생긴다”는 원인을 먼저 짚고 해당 방향만 지운다. 수리공이 부품 이름을 읽고 갈아 끼우는 것과 전체를 흔들어 맞추는 것의 차이다.
그럼 이제 옵티마이저는 필요 없나? 그렇게 읽으면 틀린다. 지금 글에는 몇 가지 걸리는 점이 있다. 하나는 7.9%라는 시작점이 워낙 낮아서 상승폭이 커 보일 수 있다는 것이다. 이는 모델 카드가 경고한 루프 문제를 고친 효과가 크다는 설명과도 맞는다. 댓글에는 벤치마크가 이미 과적합됐을 수 있다는 지적도 있고, Astra가 가중치 데이터를 따로 학습했을 가능성을 의심하는 의견도 있다. 이 두 가지는 글만으로는 확인되지 않는다.
선택지를 정리하면 이렇다. 정답 데이터가 많고 목표가 명확하면 여전히 경사하강법이 싸고 확실하다. 원인이 뚜렷한 결함을 소수의 가중치로 고치고 싶을 때는 이 방식이 후보가 되지만, 비용과 재현성은 공개된 숫자가 더 쌓여야 판단할 수 있다. 가중치를 사람이 못 읽어서 만든 우회로가 이제 읽는 쪽으로 도전받는 건 맞고, 그게 어디까지 통하는지는 아직 아무도 모른다.
원문: Astra can read and write weights to improve Qwen (via hn)
