Step 9부터 14까지, 우리는 점점 발전하는 모델들을 배웠습니다. 이제 마지막 단계, 사전학습 모델의 파인튜닝입니다!
| Step | 모델 | 임베딩 | 예상 성능 | 특징 |
|---|---|---|---|---|
| 9 | MLP | 원핫 | ~88% | 기초 베이스라인 |
| 10 | CNN | TF-IDF | ~90% | 단어 중요도 + n-gram |
| 11 | RNN | Word2Vec (freeze) | ~91% | 순서 처리 시작 |
| 12 | LSTM | GloVe (freeze) | ~92% | 장기기억 추가 |
| 13 | Attention | FastText (fine-tune) | ~94% | 중요 단어 집중 |
| 14 | Transformer | 학습가능 (from scratch) | ~89% | 소형, 개념 시연 |
| 15 | RoBERTa | 사전학습 (fine-tune) | ~96%+ | 🏆 최종 최강 |
BERT는 2018년 Google이 발표한 사전학습 모델입니다. RoBERTa는 Facebook이 BERT를 개선한 버전이에요!
| 특징 | BERT | RoBERTa |
|---|---|---|
| 발표 | 2018, Google | 2019, Facebook |
| 구조 | Transformer Encoder | Transformer Encoder |
| 사전학습 데이터 | 16GB (BookCorpus + Wikipedia) | 160GB (10배 더 많음!) |
| 학습 시간 | 짧음 | 훨씬 김 (더 많이 학습) |
| NSP 태스크 | 사용 | 제거 (불필요) |
| Dynamic Masking | 정적 | 동적 (더 효과적) |
| 성능 | 좋음 | 더 좋음! |
RoBERTa의 개선점:
• 더 많은 데이터: 10배 더 많은 텍스트로 학습
• 더 긴 학습: 더 오래 학습해서 성능 향상
• Dynamic Masking: 매 에폭마다 다른 단어를 가림
• NSP 제거: Next Sentence Prediction 태스크 불필요
• 더 큰 배치: 8K 배치 크기로 안정적 학습
Word2Vec/GloVe와 BERT/RoBERTa의 가장 큰 차이는 문맥입니다!
사전학습된 RoBERTa를 우리 데이터(AG News)에 맞게 파인튜닝합니다!
from transformers import RobertaModel, RobertaTokenizer import torch.nn as nn class RoBERTaClassifier(nn.Module): def __init__(self, num_classes=4, dropout=0.3): super().__init__() # 사전학습된 RoBERTa 로드 self.roberta = RobertaModel.from_pretrained('roberta-base') # 분류 헤드 (처음부터 학습) self.dropout = nn.Dropout(dropout) self.fc = nn.Linear(self.roberta.config.hidden_size, num_classes) def forward(self, input_ids, attention_mask): # RoBERTa 인코딩 outputs = self.roberta( input_ids=input_ids, attention_mask=attention_mask ) # [CLS] 토큰의 출력 사용 pooled_output = outputs.pooler_output # [batch, 768] x = self.dropout(pooled_output) return self.fc(x) # 토크나이저 tokenizer = RobertaTokenizer.from_pretrained('roberta-base') # 모델 생성 model = RoBERTaClassifier(num_classes=4) print(f"총 파라미터: {sum(p.numel() for p in model.parameters()):,}") # 약 125M개!
학습 설정:
• Learning Rate: 매우 작게 (2e-5 ~ 5e-5)
→ 사전학습된 가중치를 조금씩만 조정
• Epochs: 3~5 에폭만
→ 너무 오래 학습하면 과적합
• Warmup: 초반에 learning rate 천천히 증가
→ 안정적인 학습
• Gradient Clipping: 기울기 폭발 방지
→ max_grad_norm = 1.0
축하합니다! AG News 텍스트 분류 시리즈를 모두 완주했습니다! 🎉
배운 것들:
• 원핫 인코딩 → TF-IDF → Word2Vec → GloVe → FastText
• MLP → CNN → RNN → LSTM → Attention → Transformer → BERT/RoBERTa
• Freeze vs Fine-tune
• 정적 임베딩 vs 문맥 임베딩
• 사전학습 + 파인튜닝의 위력
성능 향상:
88% (MLP) → 96%+ (RoBERTa) = +8%p 향상!
다음 단계:
시리즈 2에서 생성 모델 (Seq2Seq, Autoencoder, GPT)을 배워봅시다! 🚀