Day3

개굴이·4일 전

[TIL] NLP 언어 모델과 PyTorch 학습 흐름

📅 2026.10.02

오늘은 언어 모델이 단어와 문맥을 처리하는 방법, 그리고 PyTorch로 모델을 학습시키는 과정을 배웠다.


1. 확률적 언어 모델과 N-gram

확률적 언어 모델은 앞 문맥을 바탕으로 다음 단어의 확률을 계산한다. 전체 문장 확률은 각 단어의 조건부 확률을 곱해 구할 수 있다.

“나는 밥을 먹었다”의 확률:

P(나는) × P(밥을 | 나는) × P(먹었다 | 나는, 밥을)

N-gram은 전체 문맥 대신 최근 N−1개 토큰만 참고한다. 이전 2개로 다음 단어를 예측하면 Trigram이다.

N-gram의 한계

  • 데이터 희소성: 긴 조합일수록 관측 데이터가 부족하다.
  • 문맥 제한: 멀리 떨어진 정보를 참고하기 어렵다.
  • 의미적 정보 공유의 어려움: 비슷한 단어의 조합도 별도로 센다.

2. 임베딩과 신경망 언어 모델

토큰 ID는 식별 번호일 뿐 의미를 나타내지 않는다. 임베딩은 토큰을 학습 가능한 실수 벡터로 표현한다.

임베딩 행렬은 어휘 크기가 V, 벡터 차원이 d일 때 (V, d) 형태다. 토큰 ID에 해당하는 행에서 벡터를 가져온다.

분포 가설

비슷한 문맥에 등장하는 단어들은 의미적으로 관련될 가능성이 높다.

“차를 마시다”, “커피를 마시다”, “우유를 마시다”처럼 주변 표현이 비슷하면 단어 사이의 관계를 학습할 수 있다.

다만 반대말도 비슷한 문맥에서 쓰이므로, 가까운 벡터가 반드시 같은 뜻은 아니다.

초기 신경망 언어 모델

최근 N−1개 단어 → 임베딩 → MLP → Softmax → 다음 단어 확률

이 과정에서 임베딩과 MLP의 가중치를 함께 학습한다. 다만 입력 문맥의 길이는 여전히 제한된다.


3. RNN과 LSTM

RNN

입력을 순서대로 처리하며 은닉 상태로 이전 정보를 전달한다.

  • 모든 시점에서 같은 가중치를 사용한다.
  • 가변 길이 입력을 처리할 수 있다.
  • 긴 문맥에서는 정보가 약해질 수 있다.
  • 역전파 과정에서 기울기 소실·폭발이 발생할 수 있다.

LSTM

셀 상태와 망각·입력·출력 게이트로 기억을 조절해 장기 의존성 학습을 돕는다.

이전 기억을 얼마나 유지하고, 새 정보를 얼마나 저장하며, 무엇을 출력할지 학습한다.

LSTM도 모든 정보를 무한히 기억하는 것은 아니다.


4. PyTorch의 역할

PyTorch는 텐서 연산, 자동 미분, 모델 구성, 파라미터 업데이트를 위한 기능을 제공한다.

  • Tensor: N차원 배열. 차원은 원소 수가 아니라 축의 개수다.
  • Dataset: 샘플을 읽고 전처리해 반환하는 방법을 정의한다.
  • DataLoader: 샘플을 배치로 묶고 모델에 공급한다.
  • nn.Module: 레이어와 순전파 구조를 정의한다.
  • Autograd: 기울기를 계산한다.
  • Optimizer: 기울기를 이용해 파라미터를 갱신한다.

Hugging Face는 모델·데이터셋 공유와 사전 학습 모델 활용을 돕는 생태계이며, PyTorch와 함께 사용할 수 있다.


5. 학습 루프와 병목

학습은 다음 과정을 반복한다.

배치 가져오기 → 기울기 초기화 → 순전파 → 손실 계산 → 역전파 → 파라미터 업데이트

  • optimizer.zero_grad(): 이전 기울기 초기화
  • model(x): 순전파
  • loss.backward(): 기울기 계산
  • optimizer.step(): 파라미터 업데이트

역전파는 기울기를 계산하고, 옵티마이저는 실제 파라미터를 수정한다.

Batch와 Epoch

  • Batch: 한 번에 처리하는 데이터 묶음
  • Epoch: 학습 데이터 전체를 한 바퀴 처리

데이터 병목

GPU가 빨라도 데이터 준비가 느리면 전체 학습이 느려진다. DataLoader의 병렬 로딩은 이런 병목을 줄이는 데 도움이 된다.

num_workers는 GPU 수가 아니라 로딩 작업자 수다.


오늘의 정리

임베딩은 단어를 표현하고, RNN·LSTM은 문맥을 전달하며, 학습 루프는 예측의 오차를 이용해 모델을 조정한다.

표현 → 문맥 처리 → 예측 → 손실 → 업데이트

이 흐름으로 연결하니 각 개념의 역할이 더 명확해졌다.

0개의 댓글