프로젝트 저장소: ~/Workspaces/transformer-lab · 환경: Colab/클라우드 GPU · 목표: LLM/NLP 랩
Transformer Lab from scratch → 재현 → 기여
전략: 라이브러리 호출이 아니라 내부를 이해하고 직접 만든 흔적을 쌓는다.
6단계로 나누어 매 단계마다 코드 + 실험 로그 + 분석 글이라는 산출물을 남기고,
이게 그대로 GitHub 포트폴리오이자 랩 지원 자료가 된다.
핵심은 "끝까지 가는 것"이 아니라 "각 단계를 제대로 소화하고 기록하는 것".
학습 원칙: 구현 코드는 직접 작성한다. 막히면 의사코드/힌트까지만 받고 정답 코드는 받지 않는다.
환경·보일러플레이트만 외부 도움을 쓴다. 손으로 짠 attention 한 번이 강의 10시간보다 남는다.
📚 이 문서는 전략(왜·무엇을)이다. 실제 day-by-day 수업과 진도는
→ 커리큘럼 & 진도표에서 본다.
왜 이 순서인가 — 랩이 보는 것
AI 랩(특히 LLM/NLP) 지원에서 변별력을 만드는 건 "무엇을 써봤다"가 아니라
"무엇을 깊이 이해하고 직접 만들었다"이다.
Hugging Face Trainer로 파인튜닝 돌린 경험은 흔하지만,
attention을 직접 구현하고 scaling을 체계적으로 ablation한 사람은 드물다.
흔한 지원자 (변별력 ↓)
라이브러리로 모델 불러와 파인튜닝
캐글 노트북 따라하기
"GPT 써봤습니다"
결과만 있고 분석 없음
강한 지원자 (변별력 ↑)
attention/학습루프 from scratch 구현
scaling law를 직접 재현·검증
구조 변경의 효과를 ablation으로 측정
실패·디버깅 과정까지 글로 기록
그래서 순서가 ① from scratch (이해) → ② 재현 (실력 증명) → ③ 기여 (독창성)이다.
각 단계는 다음 단계의 토대가 되도록 설계됐다.
Phase 0 — 토대 다지기
준비~1–2주
바로 트랜스포머로 가기 전에, 모든 게 돌아가는 두 가지 토대를 확실히 한다:
autograd(자동 미분)가 어떻게 동작하는지와 PyTorch 텐서 조작.
여기가 흔들리면 뒤에서 디버깅이 지옥이 된다.
할 일
Colab 환경 세팅 — GPU 런타임, Google Drive 마운트(체크포인트 저장), wandb 계정
Karpathy micrograd를 보지 않고 직접 재구현 — scalar 단위 역전파를 손으로
텐서 조작 숙달: view/reshape/transpose/permute, broadcasting, einsum
왜 (B, T, C) 레이아웃을 쓰는지, contiguous 메모리가 뭔지 이해
왜 micrograd부터? 100줄짜리 자동미분 엔진을 직접 만들면
"loss.backward()가 마법이 아니라 chain rule의 자동화"라는 걸 체화한다.
뒤에서 gradient가 NaN이 될 때 당황하지 않는 결정적 차이를 만든다.
Deliverable:notebooks/00_micrograd.ipynb — 직접 구현한 autograd 엔진 +
"역전파를 손으로 이해하기" 짧은 글 (docs/00_autograd.md).
참고 자료
Karpathy — "The spelled-out intro to neural networks and backpropagation" (micrograd)
PyTorch 공식 — "A Gentle Introduction to torch.autograd"
Phase 1 — 미니 GPT from scratch
핵심~3–4주
이 단계가 프로젝트 전체에서 가장 중요하다.nn.Transformer나 nn.MultiheadAttention 같은 고수준 API를 쓰지 않고,
self-attention부터 직접 구현해 char-level 언어모델을 학습시킨다.
데이터는 tinyshakespeare(1MB)라 Colab 무료 GPU로 수 분이면 돈다.
학습 루프 — get_batch, cross-entropy, AdamW, warmup+cosine LR, grad clip
mixed precision (bfloat16) — 속도 2배
wandb로 loss 곡선 로깅
학습이 되는지 즉시 확인하는 법: 초기 loss가 ln(vocab_size) ≈ 4.17에서
시작하면 초기화가 맞은 것(랜덤 예측 기준선). loss가 1.5 아래로 내려가면
셰익스피어풍 텍스트가 나오기 시작한다. tests/test_shapes.py로 형태부터 검증.
이해해야 할 개념 (글로 정리)
왜 1/√d_k 스케일링인가 — softmax saturation
causal mask가 autoregressive 학습을 어떻게 가능하게 하는가
residual + Pre-LN이 깊은 망 학습을 안정시키는 원리 (ResNet과 연결)
attention = 토큰 간 정보 교환, MLP = 토큰 내부 가공이라는 직관
weight tying이 왜 파라미터를 줄이고 성능을 올리는가
Deliverable: 작동하는 셰익스피어 생성기 +
docs/01_minigpt.md — "attention을 from scratch로 짜보니" 분석 글
(loss 곡선, 샘플 텍스트, head별 attention 시각화 포함).
첫 GitHub 공개 시점.
랩 어필 포인트: attention head가 실제로 무엇에 주목하는지 시각화하면 강하다.
(예: 특정 head가 직전 토큰을, 다른 head가 문장 시작을 보는 패턴) — "이해했다"의 증거가 된다.
Phase 2 — 제대로 된 GPT 학습
재현~4–6주
char-level 장난감에서 실제 LLM의 축소판으로 올라간다.
BPE 토크나이저, 실제 텍스트 코퍼스, 더 긴 학습. nanoGPT 수준의 코드를
자기 것으로 만들고, 학습 동역학을 체계적으로 관찰한다.
할 일
BPE 토크나이저 도입 (tiktoken) — char vs BPE 차이 체감
데이터: TinyStories(쉬움, 추천 시작점) 또는 OpenWebText subset
데이터 파이프라인 — 토큰화 후 .bin으로 메모리맵, 효율적 배치 로딩
gradient accumulation — 작은 GPU로 큰 effective batch 흉내
체크포인트 저장/재개 (Colab 끊김 대비 — Drive에 주기적 저장)
학습 모니터링 — train/val loss, gradient norm, LR, MFU(연산 효율)
(선택) 작은 모델로 HellaSwag 같은 벤치마크 평가 맛보기
Colab 현실: 무료 T4는 세션이 끊기고 시간 제한이 있다.
체크포인트 재개를 반드시 구현하고, "한 번에 다 학습"이 아니라
"여러 세션에 나눠 학습"을 전제로 설계하라. Colab Pro($10/월)면 훨씬 수월하다.
분석할 것
토크나이저가 vocab 크기·시퀀스 길이·성능에 주는 영향
학습률·warmup·batch size가 수렴에 주는 영향 (작은 실험들)
overfitting 관찰 — train↓ val↑ 갈라지는 지점, dropout/weight decay 효과
Deliverable: 작동하는 소형 LLM(10~50M 파라미터) +
docs/02_training.md — "작은 LLM 학습 일지": 하이퍼파라미터 선택 근거,
loss 곡선 비교, 실패 사례와 해결. 생성 샘플 데모.
Phase 3 — 스케일링 & 효율
재현·심화~6–8주
여기서부터 랩 지원에 진짜 차별화가 생긴다.
"모델을 크게 만들수록 무엇이 어떻게 좋아지는가"를 직접 측정하고,
구조 개선의 효과를 통제된 실험(ablation)으로 검증한다.
대부분의 학부생이 여기까지 안 온다.
스케일링 법칙 재현
모델 크기를 4~5단계로 (예: 1M, 4M, 16M, 64M) 같은 데이터로 학습
파라미터 수 ↔ 최종 loss 관계를 log-log 플롯 — 멱법칙(power law) 확인
compute(연산량) ↔ loss 관계 — Chinchilla "compute-optimal" 직관 재현
"같은 연산이면 큰 모델을 덜 학습 vs 작은 모델을 더 학습?" 직접 비교
구조·효율 개선 ablation
위치 인코딩: 학습형 vs RoPE vs ALiBi — 외삽(extrapolation) 성능 비교
정규화: LayerNorm vs RMSNorm, Pre-LN vs Post-LN
활성화: GELU vs SwiGLU
attention 효율: F.scaled_dot_product_attention(Flash Attention) 적용 전후 속도
gradient checkpointing — 메모리 ↔ 속도 트레이드오프 측정
KV cache로 추론 가속 구현
ablation의 핵심은 통제다. 한 번에 하나만 바꾸고, 나머지는 고정.
seed를 여러 개로 돌려 노이즈와 진짜 효과를 구분. 이 "과학적 태도"가 글에서 드러나면
연구자로서의 자질을 보여준다.
Deliverable:docs/03_scaling.md — scaling law 플롯 +
구조 ablation 표(각 변경의 loss/속도/메모리 영향). 이건 작은 기술 리포트 수준으로,
블로그 글이나 워크숍 제출의 씨앗이 된다.
랩 어필 포인트: "RoPE가 ALiBi보다 이 세팅에서 X% 나았고, 긴 컨텍스트 외삽은 반대였다"
처럼 측정값으로 말하는 한 줄이 자소서/면접에서 압도적이다.
Phase 4 — 파인튜닝 & 정렬
정렬~6–8주
사전학습된 모델(여기서는 공개 모델 활용 OK)을 유용하게 길들이는 단계.
LLM/NLP 랩의 현재 핵심 주제(instruction tuning, 정렬)를 직접 다룬다.
Phase 1~3에서 from scratch를 충분히 했으니, 여기선 공개 모델을 베이스로 써도 떳떳하다.
할 일
작은 공개 모델(예: Pythia-160M/410M, TinyLlama) instruction tuning
LoRA / QLoRA 직접 구현 또는 PEFT로 적용 — 적은 메모리로 파인튜닝
SFT 데이터셋 다루기 (예: Alpaca, Dolly) — 포맷팅, 마스킹
DPO(Direct Preference Optimization)로 선호 정렬 — RLHF보다 구현 단순
(심화) 보상 모델 + PPO로 RLHF 풀 파이프라인 맛보기
평가 — 정렬 전후 응답 품질 비교 (정성 + 간단한 벤치마크)
왜 DPO를 먼저? RLHF(보상모델+PPO)는 강력하지만 구현·튜닝이 까다롭다.
DPO는 같은 목표를 단일 loss로 달성해 학부 환경에서 재현성이 높다.
먼저 DPO로 정렬을 이해한 뒤 RLHF로 확장하는 게 효율적이다.
Deliverable: instruction을 따르는 작은 챗 모델 +
docs/04_alignment.md — "작은 모델 정렬하기": LoRA vs full FT 비교,
DPO 전후 응답 예시, 무엇이 개선되고 무엇이 안 됐는지. 데모(Gradio) 있으면 가산점.
Phase 5 — 연구 기여
독창성지속
지금까지 쌓은 인프라(직접 만든 모델·학습·평가 코드)를 무기로
작지만 진짜 질문에 답한다. 거창한 SOTA가 아니라,
"내가 던진 질문 + 통제된 실험 + 정직한 결론"이 핵심.
경로 (택1 또는 병행)
A. 논문 재현 + 검증
최근 논문 하나를 작은 스케일로 재현하고 "주장이 작은 모델에서도 성립하는가"를 검증.
재현 자체가 가치 있고, 안 되는 지점을 찾으면 더 가치 있다.
B. 작은 novel 실험
"X를 바꾸면 어떻게 될까?"류의 통제 실험.
예: 특정 토크나이저 선택이 추론능력에, 위치인코딩이 길이 일반화에 주는 영향 등.
할 일
구체적이고 답 가능한 연구 질문 1개 정의 (작게!)
통제된 실험 설계 — baseline, 변인, 여러 seed, 평가 지표
결과를 정직하게 — 가설이 틀려도 그 자체가 발견
기술 리포트/블로그 글로 정리 (그림·표·재현 코드 포함)
(가능하면) 워크숍/arXiv에 공개 — 학부생에게 큰 차별점
코드 공개 + 재현 가능한 README
현실적 목표: 톱티어 학회 논문이 아니어도 된다.
잘 쓴 블로그 글 하나, 재현 가능한 GitHub 리포 하나, 워크숍 포스터 하나면
학부 지원자로서 상위권이다. "끝까지 파고들어 기록했다"가 메시지다.
포트폴리오로 엮기
각 단계의 산출물이 흩어지지 않게, 처음부터 "보여줄 것"을 염두에 두고 정리한다.
자산
내용
왜 중요한가
GitHub 리포
단계별 코드, 깔끔한 README, 재현 방법
모든 주장의 증거. 커밋 히스토리가 곧 성장 기록
기술 블로그
각 docs/*.md를 다듬은 글 5~6편
"이해했다"를 글로 증명. 면접관이 읽는다
실험 로그
wandb 공개 프로젝트 (loss 곡선, ablation)
과학적 태도의 직접 증거
데모
Gradio/HF Space로 생성·챗 데모
"돌아간다"를 한 번에 보여줌
기술 리포트
Phase 3/5 결과를 논문 형식으로
연구 글쓰기 능력 — 랩이 중시
지원서에 쓸 한 줄의 예: "GPT를 attention부터 직접 구현해 학습시키고,
파라미터 1M~64M 구간의 scaling law를 재현했으며, RoPE/RMSNorm/SwiGLU의 효과를
통제된 ablation으로 측정해 기술 리포트로 공개했습니다." — 구체적이고 검증 가능하다.
흔한 함정 & 팁
학습 함정
완벽주의로 Phase 1에서 멈춤 — "충분히 이해" 후 다음으로. 나중에 돌아와도 된다.
정답 코드 베끼기 — nanoGPT를 열어보고 싶은 유혹. 막히면 의사코드 힌트까지만.
기록 안 함 — 산출물 글을 미루면 나중에 디테일을 다 까먹는다. 그날 바로 메모.
기술 함정
loss NaN — LR 너무 큼, grad clip 누락, mixed precision 문제부터 의심.
학습이 안 됨 — 초기 loss가 ln(vocab)인지, 데이터 shift(y=x+1)가 맞는지, mask 방향 확인.
Colab OOM — batch_size → block_size → n_embd 순으로 줄이고, grad accumulation 활용.
재현 안 됨 — seed 고정, 환경·버전 기록. 처음부터 습관 들이기.
속도 팁
로컬(Pi)에서는 코드 작성·구조 검증만, 실제 학습은 Colab GPU.
torch.compile()로 학습 가속 (PyTorch 2.x).
작은 모델로 빠르게 반복 → 되는 걸 확인 후 키우기. 처음부터 크게 가지 말 것.
Colab Pro는 시간 대비 가치가 크다. 진지하게 한다면 초기 투자 고려.
프로젝트 저장소: ~/Workspaces/transformer-lab/ · 단계별 글은 docs/에 쌓을 것 ·
다음 행동: Phase 0 — Colab 세팅 + micrograd 재구현부터.