📅 2026.10.02
오늘은 언어 모델이 단어와 문맥을 처리하는 방법, 그리고 PyTorch로 모델을 학습시키는 과정을 배웠다.
확률적 언어 모델은 앞 문맥을 바탕으로 다음 단어의 확률을 계산한다. 전체 문장 확률은 각 단어의 조건부 확률을 곱해 구할 수 있다.
“나는 밥을 먹었다”의 확률:
P(나는) × P(밥을 | 나는) × P(먹었다 | 나는, 밥을)
N-gram은 전체 문맥 대신 최근 N−1개 토큰만 참고한다. 이전 2개로 다음 단어를 예측하면 Trigram이다.
토큰 ID는 식별 번호일 뿐 의미를 나타내지 않는다. 임베딩은 토큰을 학습 가능한 실수 벡터로 표현한다.
임베딩 행렬은 어휘 크기가 V, 벡터 차원이 d일 때 (V, d) 형태다. 토큰 ID에 해당하는 행에서 벡터를 가져온다.
비슷한 문맥에 등장하는 단어들은 의미적으로 관련될 가능성이 높다.
“차를 마시다”, “커피를 마시다”, “우유를 마시다”처럼 주변 표현이 비슷하면 단어 사이의 관계를 학습할 수 있다.
다만 반대말도 비슷한 문맥에서 쓰이므로, 가까운 벡터가 반드시 같은 뜻은 아니다.
최근 N−1개 단어 → 임베딩 → MLP → Softmax → 다음 단어 확률
이 과정에서 임베딩과 MLP의 가중치를 함께 학습한다. 다만 입력 문맥의 길이는 여전히 제한된다.
입력을 순서대로 처리하며 은닉 상태로 이전 정보를 전달한다.
셀 상태와 망각·입력·출력 게이트로 기억을 조절해 장기 의존성 학습을 돕는다.
이전 기억을 얼마나 유지하고, 새 정보를 얼마나 저장하며, 무엇을 출력할지 학습한다.
LSTM도 모든 정보를 무한히 기억하는 것은 아니다.
PyTorch는 텐서 연산, 자동 미분, 모델 구성, 파라미터 업데이트를 위한 기능을 제공한다.
Hugging Face는 모델·데이터셋 공유와 사전 학습 모델 활용을 돕는 생태계이며, PyTorch와 함께 사용할 수 있다.
학습은 다음 과정을 반복한다.
배치 가져오기 → 기울기 초기화 → 순전파 → 손실 계산 → 역전파 → 파라미터 업데이트
optimizer.zero_grad(): 이전 기울기 초기화model(x): 순전파loss.backward(): 기울기 계산optimizer.step(): 파라미터 업데이트역전파는 기울기를 계산하고, 옵티마이저는 실제 파라미터를 수정한다.
GPU가 빨라도 데이터 준비가 느리면 전체 학습이 느려진다. DataLoader의 병렬 로딩은 이런 병목을 줄이는 데 도움이 된다.
num_workers는 GPU 수가 아니라 로딩 작업자 수다.
임베딩은 단어를 표현하고, RNN·LSTM은 문맥을 전달하며, 학습 루프는 예측의 오차를 이용해 모델을 조정한다.
표현 → 문맥 처리 → 예측 → 손실 → 업데이트
이 흐름으로 연결하니 각 개념의 역할이 더 명확해졌다.