메타러닝
Meta-Learning
학습하는 방법을 학습. Few-shot learning의 기반 기술.
Meta-Learning
학습하는 방법을 학습. Few-shot learning의 기반 기술.
메타러닝(Meta-Learning)은 "학습하는 방법을 학습"하는 인공지능 기법으로, 모델이 새로운 태스크에 빠르게 적응할 수 있도록 설계됩니다. 전통적인 머신러닝은 특정 태스크에 대해 처음부터 학습하지만, 메타러닝은 다양한 태스크에서의 학습 경험을 축적하여 새로운 태스크를 효율적으로 해결합니다.
메타러닝의 핵심 아이디어는 "태스크 분포"에서 학습하는 것입니다. 예를 들어, MAML(Model-Agnostic Meta-Learning)은 몇 번의 그래디언트 업데이트만으로 새로운 태스크에 적응할 수 있는 초기 파라미터를 찾습니다. 이는 소수의 예제만으로도 높은 성능을 달성하는 Few-shot Learning의 핵심 기술입니다.
메타러닝은 크게 세 가지 접근법으로 구분됩니다: 1) 최적화 기반(MAML, Reptile) - 빠른 적응이 가능한 초기화를 학습, 2) 메트릭 기반(Prototypical Networks, Siamese Networks) - 효과적인 임베딩 공간을 학습, 3) 모델 기반(Memory-Augmented Neural Networks) - 외부 메모리를 활용한 학습입니다.
실무에서 메타러닝은 데이터가 부족한 도메인, 빠른 개인화가 필요한 추천 시스템, 로봇 제어의 새로운 환경 적응 등에 활용됩니다. 특히 의료, 신약 개발 등 라벨링 비용이 높은 분야에서 그 가치가 빛납니다.
MAML 스타일의 메타러닝 구현 예제입니다:
import torch
import torch.nn as nn
from torch.optim import Adam
from copy import deepcopy
class MAMLModel(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, output_dim)
)
def forward(self, x):
return self.net(x)
def maml_inner_loop(model, support_x, support_y, inner_lr=0.01, inner_steps=5):
"""태스크별 내부 루프: 빠른 적응"""
adapted_model = deepcopy(model)
optimizer = Adam(adapted_model.parameters(), lr=inner_lr)
criterion = nn.CrossEntropyLoss()
for _ in range(inner_steps):
pred = adapted_model(support_x)
loss = criterion(pred, support_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
return adapted_model
def maml_outer_loop(model, tasks, outer_lr=0.001):
"""메타 학습: 좋은 초기화를 찾음"""
meta_optimizer = Adam(model.parameters(), lr=outer_lr)
criterion = nn.CrossEntropyLoss()
meta_loss = 0
for task in tasks:
support_x, support_y, query_x, query_y = task
adapted_model = maml_inner_loop(model, support_x, support_y)
pred = adapted_model(query_x)
meta_loss += criterion(pred, query_y)
meta_optimizer.zero_grad()
meta_loss.backward()
meta_optimizer.step()
return meta_loss.item() / len(tasks)
# 5-way 5-shot 분류 예제
model = MAMLModel(input_dim=784, hidden_dim=64, output_dim=5)
print(f"메타러닝 모델 준비 완료: {sum(p.numel() for p in model.parameters())} 파라미터")| 항목 | 일반 학습 | 메타러닝 |
|---|---|---|
| 필요 샘플 수 | 수천~수만 개 | 1~10개 (Few-shot) |
| 새 태스크 적응 시간 | 수시간~수일 | 수초~수분 |
| 메타 학습 비용 | - | GPU 2~8개, 1~7일 |
| 메모리 사용량 | 1x | 2~4x (2차 그래디언트) |
| Omniglot 5-way 5-shot | ~85% | 99.5% (MAML++) |
"이 도메인은 데이터가 부족해서 메타러닝으로 접근해보면 어떨까요?"
라벨링된 데이터 확보가 어려운 상황에서 적절한 해결책을 제안할 때 사용합니다.
"MAML로 초기화를 학습해두면 새 고객사 적응이 빨라질 거예요."
빠른 파인튜닝이 필요한 B2B 서비스 개발 시 활용합니다.
"프로토타이피컬 네트워크로 N-way K-shot 분류 성능 테스트해봅시다."
Few-shot Learning 실험 설계를 논의할 때 사용하는 표현입니다.
1. 메타 학습 태스크 분포 불일치: 메타 학습에 사용한 태스크와 실제 적용할 태스크의 분포가 다르면 성능이 급격히 저하됩니다. 도메인을 신중하게 설계하세요.
2. 2차 그래디언트 메모리 폭발: MAML의 2차 미분 계산은 메모리를 많이 사용합니다. First-order MAML(FOMAML)로 근사하거나 배치 크기를 줄이세요.
3. 충분한 태스크 수 확보: 효과적인 메타러닝을 위해서는 수백~수천 개의 다양한 태스크가 필요합니다. 태스크 증강 기법도 고려하세요.
4. 과도한 내부 루프 스텝: 내부 루프에서 너무 많이 학습하면 메타 지식이 손실됩니다. 보통 1~10스텝이 적절합니다.