200줄 파이썬으로 구현한 GPT, 마이크로GPT(microGPT)의 모든 것!
마이크로GPT(microGPT)는 200줄의 파이썬 코드로 GPT 모델을 구현하여, LLM의 핵심 알고리즘을 단순화함
데이터셋, 토크나이저, 자동 미분 엔진(Autograd Engine) 등 LLM의 필수 요소들을 포함하며, 가독성이 높다는 평가를 받음
커뮤니티에서는 Rust, C++ 등 다양한 언어로의 포팅(Porting) 시도와 학습 및 벤치마킹에 대한 관심이 높음
소형 모델(Small Model)임에도 불구하고, 챗GPT(ChatGPT)와 유사한 토큰 생성(Token Generation) 방식을 보여줌
마이크로GPT(microGPT)의 핵심 기술: 자동 미분(Autograd)
마이크로GPT(microGPT)는 자동 미분(Autograd) 기능을 구현하기 위해 `Value` 클래스를 사용한다. 이 클래스는 각 스칼라 값(.data)을 래핑(Wrapping)하고, 해당 값의 계산 방식을 추적한다. 특히, 덧셈, 곱셈, 지수 함수 등의 연산 시, 계산 그래프(Computation Graph)를 생성하여 각 노드의 지역 기울기(Local Gradients)를 저장한다. 이러한 구조를 통해, 역전파(Backpropagation) 과정에서 체인 규칙(Chain Rule)을 적용하여 모델 파라미터에 대한 기울기를 계산한다.
GPT-2 아키텍처 기반 모델 구조
마이크로GPT(microGPT)는 GPT-2와 유사한 트랜스포머(Transformer) 아키텍처를 기반으로 한다. 모델은 임베딩(Embedding), 어텐션 블록(Attention Block), MLP 블록(MLP Block), 잔차 연결(Residual Connections) 등으로 구성된다. 특히, 멀티 헤드 어텐션(Multi-head Attention) 메커니즘을 통해, 각 토큰이 이전 토큰들에 대해 '얼마나 관련이 있는지'를 파악한다. 이러한 구조는 모델이 훈련 데이터 내의 통계적 패턴을 학습하고, 새로운 텍스트를 생성하는 데 기여한다.
학습 과정 및 최적화 기법
마이크로GPT(microGPT)의 학습 과정은 데이터셋(Dataset)에서 토큰을 선택하고, 모델을 통해 순차적으로 처리하며, 손실(Loss)을 계산하고, 역전파를 통해 기울기를 구하고, Adam 옵티마이저(Adam Optimizer)를 사용하여 파라미터를 업데이트하는 과정을 반복한다. Adam 옵티마이저는 각 파라미터에 대해 모멘텀(Momentum)과 적응적 학습률(Adaptive Learning Rate)을 적용하여 학습 속도를 향상시킨다. 학습률은 선형적으로 감소하며, 모델의 성능을 개선한다.
마이크로GPT(microGPT)의 한계와 확장 가능성
마이크로GPT(microGPT)는 200줄의 파이썬 코드로 LLM의 핵심을 담고 있지만, 실제 프로덕션 환경에서 사용되는 모델과는 차이가 있다. 데이터 규모(Data Scale), 토크나이저(Tokenizer), 자동 미분 엔진(Autograd Engine), 모델 아키텍처(Model Architecture), 학습 방법(Training Method) 등 여러 측면에서 차이가 존재한다. 하지만, 마이크로GPT(microGPT)는 LLM의 기본 원리를 이해하는 데 매우 유용하며, 모델 크기, 데이터셋, 학습 시간 등을 조절하여 성능을 개선할 수 있다.