대화형으로 설명한 MicroGPT
(growingswe.com)- MicroGPT는 200줄짜리 순수 Python 코드로 작성된 GPT 모델의 최소 구현체로, 대형 언어모델의 핵심 구조를 시각적으로 이해할 수 있게 구성됨
- 32,000개의 인간 이름 데이터셋을 학습해 새로운 이름을 생성하며, 토크나이징·예측·손실 계산·역전파 과정을 단계별로 시각화함
- Softmax, Cross-Entropy Loss, Backpropagation, Embedding, Attention 등 GPT의 주요 구성 요소를 코드와 함께 설명함
- 학습 과정에서는 Adam 옵티마이저를 사용해 손실을 점차 줄이고, 이후 온도 조절(Temperature Sampling) 을 통해 다양한 이름을 생성함
- ChatGPT와 같은 대형 모델의 핵심 알고리듬을 단순화한 형태로, LLM의 내부 작동 원리를 이해할수 있는 교육용 자료
MicroGPT 개요
-
Andrej Karpathy가 작성한 200줄짜리 Python 스크립트를 기반으로, GPT 모델의 학습과 추론 과정을 시각적으로 해설
- 외부 라이브러리 없이 순수 Python만으로 구현
- ChatGPT와 같은 대형 언어모델의 기본 알고리듬을 그대로 포함
- 글은 초보자 친화적인 시각적 접근을 통해 모델의 각 단계를 단계별로 보여줌
데이터셋과 학습 목표
- 32,000개의 인간 이름(예: emma, olivia, ava 등)을 학습 데이터로 사용
- 각 이름은 하나의 문서로 간주되며, 모델은 이름의 문자 패턴을 학습
- 학습 후 “kamon”, “karai”, “anna”, “anton” 등의 새로운 이름을 생성
- 모델은 문자 간의 통계적 관계, 이름의 길이, 시작과 끝의 음운 패턴 등을 학습
텍스트를 숫자로 변환하는 과정
- 신경망은 숫자만 처리하므로, 각 문자를 정수 ID로 변환
- a–z는 0–25, BOS(Beginning of Sequence)는 26으로 지정
- BOS 토큰은 이름의 시작과 끝을 표시
- 실제 GPT-4의 tiktoken은 문자 대신 문자 조각 단위로 토큰화하지만, 원리는 동일
다음 토큰 예측
- 모델은 주어진 문맥에서 다음 문자를 예측
- 예: [BOS] → “e”, [BOS, e] → “m”, [BOS, e, m] → “m”, [BOS, e, m, m] → “a”
- 각 단계는 입력(문맥)과 목표(다음 문자) 쌍을 생성하며, 이 방식은 ChatGPT와 동일
Softmax와 확률 계산
- 모델 출력은 27개의 로짓(logit) 으로 구성되며, Softmax를 통해 확률로 변환
- 각 로짓을 지수화 후 합으로 나누어 확률 분포 생성
- 최대값을 빼는 연산은 오버플로 방지를 위한 안정화 처리
- Softmax 결과는 각 토큰이 다음에 등장할 확률을 나타냄
손실 계산: Cross-Entropy
- 예측의 정확도를 −log(p) 로 계산
- 정답 확률이 높을수록 손실이 낮고, 0에 가까울수록 손실이 커짐
- p=1일 때 손실 0, p→0일 때 손실 무한대
- 학습은 이 손실을 최소화하는 방향으로 진행
역전파(Backpropagation)
- 손실을 기준으로 각 파라미터가 손실에 미치는 영향을 계산
- 모든 연산(add, multiply, exp, log 등)을 노드로 구성한 계산 그래프를 통해 미분 수행
- 각 노드는 입력과 지역 미분값을 저장하고, 역방향으로 그래디언트를 전파
- 예시: L = a⋅b + a (a=2, b=3) → a의 그래디언트는 4.0 (두 경로의 합)
- PyTorch의
loss.backward()와 동일한 원리
임베딩(Embedding)
- 각 토큰 ID는 16차원 벡터로 변환되어 의미를 학습
- 토큰 임베딩과 위치 임베딩을 더해 입력으로 사용
- 위치에 따라 같은 문자의 역할이 달라짐
- 학습 후 유사한 문자(예: 모음)는 유사한 벡터를 갖게 됨
어텐션(Attention)
- 각 토큰은 Query, Key, Value 벡터를 생성
- Query와 Key의 내적을 통해 관련성을 계산하고, Softmax로 가중치를 산출
- 가중합된 Value가 출력으로 사용
- Causal Mask를 적용해 미래 토큰을 참조하지 않음
- 4개의 어텐션 헤드가 병렬로 작동하며, 서로 다른 패턴을 학습
전체 GPT 구조
- 입력 토큰은 다음 단계를 거침
- 임베딩 + 위치 임베딩
- RMSNorm 정규화
- 멀티헤드 어텐션
- 잔차 연결(Residual)
- MLP(64차원 확장 → ReLU → 16차원 축소)
- 다시 잔차 연결 후 출력 로짓 계산
- Residual 연결은 그래디언트 소실을 방지
- RMSNorm은 활성값의 크기를 일정하게 유지해 학습 안정화
학습 루프
- 1,000회 반복 학습
- 이름 선택 → 토크나이즈 → 순전파 → 손실 계산 → 역전파 → 파라미터 업데이트
-
Adam 옵티마이저 사용
- 모멘텀과 적응 학습률을 통해 안정적 수렴
- 초기 손실 약 3.3에서 2.37로 감소
- 생성된 이름이 무작위에서 점차 자연스러운 형태로 발전
추론(Inference)과 샘플링
- 학습 후에는 BOS로 시작해 다음 토큰을 반복적으로 예측
- BOS가 다시 나올 때까지 생성 반복
-
Temperature로 샘플링 다양성 조절
- 낮을수록 결정적(평균적), 높을수록 창의적이지만 불안정
- 이름 생성의 적정 온도는 약 0.5
- 예시 출력: “karai”
효율성과 확장성
- MicroGPT는 GPT의 핵심 알고리듬을 단순화한 완전 구현체
- ChatGPT와의 차이는 규모뿐임
- 32,000개 이름 대신 수조 개 토큰, 4,192개 파라미터 대신 수천억 개 파라미터
- CPU 기반 스칼라 연산 대신 GPU 텐서 연산 사용
- 기본 루프는 동일: 토크나이즈 → 임베딩 → 어텐션 → 예측 → 손실 → 역전파 → 업데이트
결론
- MicroGPT는 GPT의 내부 작동 원리를 직관적으로 학습할 수 있는 교육용 모델
- 대규모 LLM의 복잡한 구조를 단순화해, 언어모델의 핵심 메커니즘을 직접 체험할 수 있게 함
Hacker News 의견들
-
학습이 끝날 때 모델이 "kamon", "karai", "anna", "anton" 같은 이름을 생성한다고 했는데, 실제로는 이 이름들이 데이터셋에도 포함되어 있음
다른 이름을 쓰는 게 좋을 듯함 — 데이터셋 링크- 맞음, 전체 글이 AI가 쓴 것처럼 느껴졌음
- 고마움, 수정하겠음
-
초보자용이라고 하지만, 이런 수학적 설명을 이해할 수 있는 초보자가 얼마나 있을지 모르겠음
예를 들어 cross-entropy loss 공식을 설명하는 부분은 너무 복잡하게 느껴졌음- 나도 전문가는 아니지만 어느 정도 지식이 있어서 초보자 입장에서는 어려울 수 있는 표현을 쓰게 되는 것 같음
다시 생각해보겠음
- 나도 전문가는 아니지만 어느 정도 지식이 있어서 초보자 입장에서는 어려울 수 있는 표현을 쓰게 되는 것 같음
-
내가 이해가 안 되는 부분은 이런 단순한 모델이 어떻게 임의의 코드 문제를 디버깅할 수 있게 되는가임
통계적 추론이 어떻게 ‘추론 능력’으로 바뀌는지 궁금함
Claude 코드를 매일 쓰다 보니 이제는 정말 그렇게 되는 것 같음- 이 질문이 ML 연구의 가장 큰 미스터리라고 생각함
핵심은 “항상 올바른 다음 단어를 예측할 수 있다면, 결국 모든 질문에 올바르게 답할 수 있다”는 것임
그래서 최근에는 RLHF나 RLVR 같은 강화학습 기반 접근으로 ‘정답’을 찾는 방향으로 발전 중임 - 단순히 단어 수준의 통계 추론이 아니라, 복잡한 의미 구조를 계층적으로 추론하는 과정이 반복적으로 이루어지는 것임
- DNN은 일반적인 의미의 통계적 추론이 아님
수학적으로는 미적분 기반의 최적화 문제에 더 가까움
단순히 텍스트 통계를 학습하는 게 아니라, 다음 토큰을 예측하기 위한 복잡한 해법을 찾는 것임 - “통계적 추론”이라는 표현이 너무 단순화된 설명임
신경망에는 통계적 요소도 있지만, 인간 두뇌처럼 그 이상이 있음
- 이 질문이 ML 연구의 가장 큰 미스터리라고 생각함
-
글 전체를 읽었는데, 유용한 부분도 있었지만 ‘나머지 부엉이를 그려라’ 식으로 느껴졌음
개념 간의 연결부가 빠진 듯했지만, 인터랙티브한 구성은 좋았음- 처음엔 괜찮았는데 곧 “MLP는 2층 피드포워드 네트워크로, 64차원으로 투사하고 ReLU를 적용한 뒤 16차원으로 다시 투사한다” 같은 설명이 나와서 갑자기 난이도가 확 올라감
좀 더 깊이 있게 다뤘으면 좋겠음
- 처음엔 괜찮았는데 곧 “MLP는 2층 피드포워드 네트워크로, 64차원으로 투사하고 ReLU를 적용한 뒤 16차원으로 다시 투사한다” 같은 설명이 나와서 갑자기 난이도가 확 올라감
-
요즘 일부러 맞춤법이나 문법 오류를 넣어서 LLM이 쓴 글이 아님을 보여주는 게 유행인가 궁금함
Karpathy의 블로그와 이 글에서도 그런 오타가 꽤 보였음- 이런 역신호(counter signaling) 방식은 앞으로 더 흔해질 것 같음
- 이제야 그걸 눈치챈 것 같음
- 솔직히 말하자면 Karpathy가 그렇게 대단한 인물은 아님
Elon의 Full Self Driving 프로젝트를 오랫동안 지탱했을 뿐이고, OpenAI에서도 오래 있지 않았음
요즘은 거의 code golf나 신조어 만들기에만 집중하는 듯함
-
원문은 Karpathy의 블로그에 있음 — microGPT 글 링크
-
어떤 사람들은 너무 기초적이라고, 또 어떤 사람들은 너무 깊다고 했지만
나처럼 모델 작동 원리를 잘 모르는 입장에서는 좋은 개요서였음
완전히 이해는 못했지만 학습을 시작하기에 좋은 출발점 같음 -
지금까지 본 가장 도움이 된 튜토리얼 중 하나였음
코딩을 안 하던 나도 AI 덕분에 코드를 쓰게 되었음
설명이 단순하고 명확해서 AI에게 무엇을 입력해야 할지 생각할 때 큰 도움이 됨 -
T-Mobile이 이 블로그 페이지를 차단하는 것 같음
차단 경고 페이지 링크 -
글을 읽고 이름이 출력되는 건 이해했는데, 왜 굳이 이름 생성을 예시로 쓴 건지 궁금했음
- 이름은 단지 모델을 시연하기 위한 임의의 문제일 뿐임
다른 어떤 데이터로도 가능함
- 이름은 단지 모델을 시연하기 위한 임의의 문제일 뿐임