
솔직히 고백하겠습니다.
처음 CTO 직함을 달고 AI 프로젝트를 리딩할 때, 저는 등골이 서늘했던 적이 한두 번이 아닙니다.
요즘 세상 참 좋아졌죠.
Hugging Face에서 모델을 가져오고, LangChain으로 엮고, OpenAI API를 호출하면 그럴싸한 서비스가 뚝딱 만들어집니다.
하지만 문제는 '성능 최적화'와 '디버깅' 단계에서 터집니다.
모델이 헛소리(Hallucination)를 하거나, 학습 Loss가 줄어들지 않고 발산할 때.
팀원들이 저를 쳐다봅니다.
"CTO님, 이거 왜 이러죠?"
그때 "글쎄, 프롬프트를 좀 더 깎아볼까?"라고 대답한다면, 그건 엔지니어가 아닙니다.
그건 그냥 기도 메타죠.
진짜 실력은 '블랙박스' 안을 들여다볼 수 있느냐에서 갈립니다.
최근 사내 개발팀 주니어들에게 강력하게 추천하고 있는 커리큘럼이 하나 있습니다.
바로 Andrej Karpathy의 전설적인 강의, Neural Networks: Zero to Hero입니다.
이건 단순한 튜토리얼이 아닙니다.
현대 딥러닝의 A부터 Z까지를, 라이브러리 뒤에 숨지 않고 맨땅에서(Scratch) 구현해 보는 생존 훈련입니다.
왜 이 과정이 중요할까요?
첫째, 마법을 걷어내고 수학을 직시해야 합니다.
우리는 가장 먼저 Micrograd를 만듭니다.
PyTorch의 autograd가 알아서 해주던 역전파(Backpropagation)를 직접 코드로 짭니다.
고등학교 때 배운 미분 공식이 어떻게 신경망의 가중치(Weight)를 업데이트하는지, 그 흐름을 손으로 추적합니다.
이 과정을 거치면 Loss.backward()를 호출할 때 일어나는 일들이 머릿속에 그래프로 그려지기 시작합니다.
그래디언트가 소실되거나 폭발하는 이유를 뼈저리게 느끼게 되죠.
둘째, 언어 모델의 진화를 따라가야 합니다.
단순히 문자를 예측하는 Bigram 모델에서 시작해, MLP(다층 퍼셉트론), 그리고 RNN 구조인 WaveNet까지 확장합니다.
이 과정에서 우리는 딥러닝 엔지니어들의 영원한 숙제들을 마주합니다.
학습률(Learning Rate) 튜닝, 오버피팅과 언더피팅, 그리고 Batch Normalization의 위대함까지요.
특히 torch.Tensor의 차원(Dimension)을 맞추느라 씨름하다 보면, 텐서 연산에 대한 직관이 생깁니다.
이건 책만 봐서는 절대 얻을 수 없는 '근육 기억'입니다.

셋째, 결국은 Transformer와 GPT입니다.
모든 길은 여기로 통하죠.
"Attention is All You Need" 논문을 펴놓고, GPT-2 수준의 모델을 바닥부터 구현합니다.
이때쯤 되면 여러분은 nn.Linear나 nn.MultiheadAttention 같은 PyTorch 모듈이 더 이상 무서운 블랙박스가 아님을 깨닫게 됩니다.
GitHub Copilot이 짜주는 코드를 멍하니 보는 게 아니라, 그 구조를 뜯어고칠 수 있는 자신감이 생기죠.
마지막으로, 간과하기 쉬운 '토크나이저(Tokenizer)'입니다.
LLM이 왜 간단한 산수를 틀리는지, 왜 특정 단어에서 버벅거리는지 아십니까?
상당수는 모델 아키텍처가 아니라, 텍스트를 숫자로 바꾸는 토크나이저의 문제입니다.
BPE(Byte Pair Encoding) 알고리즘을 직접 구현해보면, LLM의 기이한 동작들이 비로소 이해되기 시작합니다.
이건 비즈니스적으로도 매우 중요한 포인트입니다.
고객이 "왜 우리 챗봇은 맞춤법을 이상하게 교정하나요?"라고 물었을 때, 기술적인 근거를 가지고 설명할 수 있어야 하니까요.
결국 '기본기'가 '속도'를 만듭니다.
당장은 API 하나 호출하는 게 빨라 보일 수 있습니다.
하지만 커스텀 데이터로 파인튜닝을 해야 하거나, 경량화 모델을 설계해야 할 때.
이 밑바닥 지식이 없는 조직은 엄청난 시행착오 비용을 치르게 됩니다.
저는 우리 팀원들에게 항상 말합니다.
"편리한 도구를 쓰되, 그 도구가 없어도 만들 수 있는 사람이 되어라."
지금 당장 파이썬 파일을 열고, import torch 없이 신경망을 짜보세요.
그 고통스러운 과정이 여러분을 단순한 '코더'에서 대체 불가능한 '아키텍트'로 만들어줄 겁니다.


