대형언어모델(LLM)의 복잡한 구조를 요약, 단 200줄의 순수 파이썬 코드로 GPT의 핵심 원리를 구현한 프로젝트가 공개됐다. 안드레이 카르파시가 선보인 ‘마이크로GPT(MicroGPT)’는 외부 라이브러리 없이도 GPT의 학습과 추론 과정을 모두 수행하는 단일 파일 프로그램이다. 거대한 인프라나 복잡한 프레임워크 없이, LLM이 작동하는 알고리즘의 본질만을 가장 단순한 형태로 담아냈다는 평가를 받고 있다.
.
.
마이크로GPT는 단 하나의 파이썬 파일로 구성된다. 이 파일 안에는 ▲데이터셋 처리 ▲토크나이저 ▲자동 미분(autograd) 엔진 ▲GPT-2와 유사한 신경망 구조 ▲아담(Adam) 옵티마이저 ▲학습 루프 ▲추론 루프까지, GPT가 작동하는 전 과정이 모두 담겨 있다.
마이크로GPT는 거대한 웹 데이터 대신 약 3만2000개의 영어 이름을 학습 데이터로 사용한다. 각 이름을 하나의 ‘문서(document)’로 간주하고, 이 이름들에 담긴 글자 배열의 통계적 패턴을 학습해 새로운 이름을 만들어낸다.
.
.
.
실제 상용 모델들이 BPE(Byte Pair Encoding)와 같은 서브워드 기반 토크나이저를 사용하는 것과 달리, 마이크로GPT는 훨씬 단순한 방식을 택했다. 데이터에 등장하는 알파벳 문자(a~z) 각각에 정수 ID를 부여하고, 여기에 문서의 시작을 나타내는 BOS(Beginning of Sequence) 토큰을 더해 총 27개의 어휘만 사용한다.
이렇게 변환된 텍스트는 숫자의 나열(정수 시퀀스)이 되고, 신경망은 이 숫자들을 입력으로 받아 다음에 올 문자의 확률을 예측하는 방식으로 학습을 진행한다.
마이크로GPT의 가장 인상적인 부분은 자동 미분(autograd)을 직접 구현했다는 점이다. 카르파시는 과거 공개했던 마이크로그래드(micrograd) 프로젝트를 발전시켜, 단 하나의 스칼라 기반 Value 클래스만으로 역전파(backpropagation)를 구현했다.
이 클래스는 덧셈, 곱셈, 로그, 지수 같은 각 연산에서의 미분값을 저장해 두고, 최종 손실(loss) 값에서부터 계산 그래프를 거꾸로 따라가며 체인룰(연쇄법칙)을 적용한다. 원리는 파이토치(PyTorch)의 loss.backward()와 동일하지만, 텐서가 아닌 스칼라 단위로 동작해 구조가 훨씬 단순하고 이해하기 쉽다.
이 모델은 비교적 작은 트랜스포머 구조로 만들어졌다. 임베딩 차원은 16이고, 어텐션 헤드는 4개, 레이어는 1개뿐이다. 전체 매개변수 수도 4192개에 불과하다. 이는 15억개 이상의 매개변수를 가진 'GPT-2'나, 수천억개 규모에 이르는 최신 LLM과 비교하면 매우 작은 수준이다.
구조는 GPT-2와 비슷하지만, 훨씬 단순하게 구성됐다. 예를 들어 LayerNorm 대신 RMSNorm을 사용했고, GeLU 대신 ReLU 활성화 함수를 적용했다. 기본 블록은 멀티헤드 어텐션과 MLP(다층 퍼셉트론)로 이루어져 있으며, 각 블록 사이에는 잔차 연결(residual connection)도 유지했다.
즉, 규모는 작지만 '토큰끼리 서로 정보를 주고받는 어텐션 구조'와 '각 위치에서 계산을 수행하는 MLP'가 번갈아 쌓이는 트랜스포머의 핵심 뼈대는 그대로 유지하고 있다.
.
.
.
마이크로GPT는 거대한 모델 규모나 최고 성능을 목표로 한 프로젝트가 아니다. 대신 GPT 구조의 ‘기술적 실체’를 최대한 투명하게 보여주는 데 초점을 맞췄다.
불필요하게 복잡한 추상화 계층을 걷어내고, 기초적인 수학 연산과 신경망 계산을 직접 구현함으로써 모델이 어떻게 학습하고 예측하는지 과정을 그대로 드러낸다. 그 덕분에 학습자나 개발자는 내부 작동 원리를 블랙박스가 아닌, 이해 가능한 구조로 한눈에 살펴볼 수 있다.
마이크로GPT의 전체 소스코드는 깃허브 지스트(GitHub Gist) 형태의 microgpt.py 파일로 공개됐다. 또 전용 웹페이지와 구글 코랩(Colab) 노트북 형태로도 제공돼, 누구나 직접 실행해 보고 구조를 살펴볼 수 있다.
- https://gist.github.com/karpathy/8627fe009c40f57531cb18360106ce95
전 보통 잘 모르는 내용이 있으면
유치원생이 이해할 수 있게 설명해줘
초등학생이 ... 고등학생이... ~ 20대가 ~ 30대가 ~
이런식으로 청자의 연령을 올려가며 설명해달라 합니다.
쭉 듣다 보면 어느순간 이해되는 지점이 찾아옵니다 ㅎㅎ
1. 딱 200개의 블록으로 만든 '초미니 로봇'이에요 우리가 아는 '챗GPT'가 수천억 개의 부품으로 만든 거대한 변신 로봇이라면, 이 '마이크로GPT'라는 로봇은 코드가 딱 200줄밖에 안 되는 아주 작고 단순한 장난감 로봇이에요. 부품(파라미터)도 고작 4,192개밖에 없답니다.
2. 대화는 못 하지만 '영어 이름 짓기' 달인이에요 부품이 적어서 챗GPT처럼 모든 질문에 대답하거나 긴 대화를 나눌 수는 없어요. 이 로봇이 아는 글자는 알파벳(a~z)과 특수 기호 딱 1개를 합쳐서 27개뿐이거든요. 하지만 영어 이름 3만 개를 열심히 읽고 공부해서, '카몬(kamon)', '안톤(anton)'처럼 진짜 사람 이름 같은 새로운 이름을 지어내는 데에는 아주 훌륭한 성능을 보여줘요.
3. "다음 알파벳 맞히기" 게임으로 똑똑해져요 처음에는 규칙을 몰라서 아무 알파벳이나 막 뱉어내요(초기 손실값 3.3). 하지만 스스로 "아, 'a' 다음에는 'n'이 많이 오네!" 하고 1,000번 정도 틀린 문제를 고치며 연습하다 보면, 점점 규칙을 깨닫고 그럴듯한 이름을 만들어내게 돼요(손실값 2.37).
4. 안 똑똑한데 왜 만들었을까요? (투명한 유리 뇌) 진짜 챗GPT의 뇌는 너무 복잡하고 꽁꽁 싸매져 있어서 어떻게 생각하는지 속을 알 수가 없어요. 하지만 이 미니 로봇은 뇌가 투명한 유리로 되어 있어서, 인공지능이 어떻게 공부하고 상상력을 발휘하는지 누구나 훤히 들여다볼 수 있답니다.
그래서 만든 사람도 이 로봇을 엄청나게 똑똑한 비서가 아니라, 인공지능의 원리를 쉽게 알려주기 위한 **"예술 작품"**이라고 불렀어요.
어디가서 아는척이라도 할까 싶어 관심이 갔습니다. 수학모델과 개념적으로만 늘 들여다 보던 것이라...
아무리 파이썬이라고 하지만 200줄로 구현을 했다라...관심이 가더군요. ㅎ