LLM이라는 단어를 들으면 거대한 모델, 복잡한 구조, GPU 수십 대 같은 이미지부터 떠오른다.
하지만 LLM도 결국 딥러닝 모델이고, 내부 흐름은 작은 모델 실험과 크게 다르지 않다.
이번 편에서는 PyTorch를 기준으로 “LLM이 어떻게 만들어지는지” 가장 단순한 흐름만 잡아서 정리해본다.
전체 과정을 쪼개보면 다음 여섯 단계로 이해할 수 있다.
- 텍스트를 숫자로 바꾸는 토크나이징
- 토큰을 벡터로 바꾸는 임베딩
- Transformer 인코더·디코더 구조
- Attention이 흐르는 방식
- 모델 학습 과정
- 학습된 모델로 문장을 생성하는 방식
이 과정을 하나씩 살펴보자.
1. 텍스트를 숫자로 만드는 과정: 토크나이징
컴퓨터는 글자를 직접 이해하지 못한다.
그래서 문장을 토큰(token)이라는 작은 단위로 쪼개고
각 토큰을 숫자 ID로 변환하는 과정을 먼저 거친다.
예를 들어,
“오늘 날씨가 좋다”
이 문장은 다음과 같은 숫자 배열이 된다.
[5123, 1402, 3009, 112]
이제 PyTorch 텐서가 등장한다.
tokens = torch.tensor([5123, 1402, 3009, 112])
이 텐서가 LLM에 들어가는 최초의 입력이다.
2. 숫자를 벡터로 바꾸는 임베딩
토큰 ID는 단순한 숫자일 뿐이다.
LLM은 이 숫자를 “의미를 가진 벡터”로 바꿔서 계산한다.
이 과정이 임베딩이다.
embedding = nn.Embedding(vocab_size, hidden_dim)
x = embedding(tokens)
여기서 x의 형태는 보통 이런 식이다.
[토큰 개수, 숨김 차원]
예: [4, 4096]
단어마다 벡터가 하나씩 생긴 것이다.
3. Transformer 구조에 들어간다
LLM은 Transformer라는 구조 위에서 동작한다.
Transformer를 한눈에 보면 레이어가 같은 형태로 여러 층 반복되는 구조다.
한 레이어는 보통 이렇게 구성된다.
- Self-Attention
- Feed Forward Network
- LayerNorm
이 레이어가 수십~수백 번 반복되면 우리가 아는 LLM이 된다.
PyTorch에서는 이런 식으로 구조를 정의한다.
class TransformerLayer(nn.Module):
def __init__(self):
super().__init__()
self.attn = nn.MultiheadAttention(...)
self.ffn = nn.Sequential(
nn.Linear(...),
nn.ReLU(),
nn.Linear(...)
)
def forward(self, x):
x = x + self.attn(x, x, x)[0]
x = x + self.ffn(x)
return x
복잡해 보이지만, 결국 파이썬 코드로 즉시 조작할 수 있는 구조다.
4. Attention이 문맥을 이해하게 해준다
LLM이 똑똑한 이유는 Attention이라는 메커니즘 덕분이다.
Attention은 입력된 단어들이 서로 어떤 관계가 있는지 계산하는 과정이다.
예를 들어
“나는 오늘 학교에 갔다”라는 문장을 입력하면
- “나는”이 “갔다”와 연결되고
- “학교”가 “갔다”와 연결되고
- “오늘”이 “갔다”와 연결된다
이런 식으로 모든 단어가 서로의 정보를 참고한다.
이 과정이 반복되면서 문맥을 이해하는 능력이 생긴다.
이 핵심이 PyTorch에서 MultiheadAttention 모듈로 구현된다.
5. 모델 학습 과정
LLM 학습은 크게 세 부분으로 이해할 수 있다.
- 다음 토큰 맞히기 문제를 반복
- 정답과의 차이를 손실(loss)로 계산
- 역전파(backpropagation)로 가중치를 업데이트
예를 들어
입력: “나는 오늘 학교에”
정답: “갔다”
LLM은 다음 단어를 맞히기 위해 확률을 계산한다.
틀리면 손실이 크고, 맞힐수록 손실이 줄어든다.
이 손실을 줄이는 방향으로 수백억 번의 연산이 반복되면서 모델이 성장한다.
PyTorch 학습 루프 구조는 이런 식이다.
optimizer.zero_grad()
pred = model(x)
loss = loss_fn(pred, target)
loss.backward()
optimizer.step()
LLM도 결국 이 패턴을 훨씬 대규모로 확장한 형태다.
6. 학습된 모델이 문장을 생성하는 방식
학습이 끝난 모델이 문장을 생성하는 과정은 다음과 같다.
- 입력 문장을 토크나이징
- 모델에 넣어서 다음 토큰의 확률을 계산
- 가장 확률이 높은 토큰 선택
- 문장 뒤에 붙이고 다시 반복
이 루프가 길게 이어지면서 긴 문장이 만들어진다.
이게 우리가 사용하는 LLM의 기본 동작 방식이다.
정리
PyTorch로 LLM이 만들어지는 전체 과정은 복잡해 보이지만,
흐름을 단순하게 정리하면 다음 한 줄로 요약된다.
“텍스트를 숫자로 바꾸고, Transformer 레이어를 반복적으로 통과시키며, 다음 단어 맞히기 학습을 엄청나게 반복한 결과가 LLM이다.”
PyTorch는 이 과정을 코드로 직접 만지고 실험할 수 있게 해주는 도구다.