딥러닝 기법 중 Imitation Learning 에 대해서 알아보자.
Imitation Learning은 사람이나 전문가의 행동을 보고 그대로 따라하는 딥러닝 학습 방법이다.
지피티의 설명을 들어보면...
Imitation Learning 이란?
- 전문가의 시연 데이터(demonstration)를 바탕으로 에이전트의 정책(policy)을 학습하는 방법
- 강화학습(RL)과 달리 환경으로부터 reward 신호를 직접 받지 않고, 전문가가 했던 행동 데이터를 통해 행동 정책을 학습해요.
보통 전문가 데이터가 많거나 reward 설계가 어려운 문제에서 많이 활용된다고 한다.
Imitation Learning의 대표적인 방법
1️⃣ Behavior Cloning (BC)
- 가장 기본적인 방법.
- 전문가의 state-action pair를 supervised learning으로 학습
- ex) 주어진 state에서 전문가가 했던 action을 그대로 예측하게끔 학습
장점: 간단하고 빠르게 학습 가능
단점: 데이터에서 많이 벗어난 상황에서는 에러가 누적됨 (distribution mismatch 문제)
2️⃣ Inverse Reinforcement Learning (IRL)
- 전문가의 행동을 관찰해서 그 사람이 어떤 보상 함수를 가졌는지 역으로 추정한 다음, 그걸 기준으로 reinforcement learning을 수행하는 방법
장점: 전문가의 행동의 '의도'까지 학습 가능
단점: 보상 함수 추정이 어려움, 계산 복잡도 큼
3️⃣ Dataset Aggregation (DAgger)
- Behavior Cloning의 distribution mismatch 문제를 해결하려고 나온 방법
- 학습 중에 에이전트가 직접 행동해보고, 전문가에게 정답 action을 계속 받아와서 데이터셋을 점점 확장
장점: distribution mismatch 문제 해결
단점: 전문가의 지속적인 피드백 필요
흠.. 간단히 말하면 이미 잘하는 사람(전문가)의 행동을 그대로 따라하도록 학습하는 기법이다.
개념만 볼때는 간단해보이는데, 작은 예시를 한번 실제로 보자.
시나리오
- 환경 : 1차원 상의 에이전트가 왼쪽(-1) 또는 오른쪽(+1)으로 움직임
- expert policy : x좌표가 0보다 작으면 오른쪽으로(+1), 크면 왼쪽으로(-1) 이동
- imitation learning으로 이 expert policy의 행동을 학습하는 모델을 만듬
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# 환경 정의 (1D 위치)
class SimpleEnv:
def __init__(self):
self.reset()
def reset(self):
self.position = np.random.uniform(-1, 1)
return np.array([self.position])
def step(self, action):
self.position += action
return np.array([self.position])
# Expert policy : 0보다 작으면 +1, 크면 -1
def expert_policy(state):
return 1 if state[0] < 0 else -1
# imitation learning용 policy 네트워크
class PolicyNet(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Sequential(
nn.Linear(1, 32),
nn.ReLU(),
nn.Linear(32, 1),
nn.Tanh() # 출력값을 -1~1로 제한
)
def forward(self, x):
return self.fc(x)
# 환경과 모델 초기화
env = SimpleEnv()
policy = PolicyNet()
optimizer = optim.Adam(policy.parameters(), lr=0.01)
criterion = nn.MSELoss()
# Expert 데이터 수집
states, actions = [], []
for _ in range(500):
state = env.reset()
action = expert_policy(state)
states.append(state)
actions.append([action])
states = torch.tensor(states, dtype=torch.float32)
actions = torch.tensor(actions, dtype=torch.float32)
# imitation learning (Behavior Cloning)
for epoch in range(300):
optimizer.zero_grad()
outputs = policy(states)
loss = criterion(outputs, actions)
loss.backward()
optimizer.step()
if (epoch+1) % 50 == 0:
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")
# 학습 후 테스트
test_state = np.array([0.5])
test_action = policy(torch.tensor([test_state], dtype=torch.float32)).item()
print(f"\nTest State: {test_state[0]}, Predicted Action: {test_action:.3f}")
보면 expert_policy 를 활용하여 state, action 데이터를 수집하고, 그 수집된 데이터로부터 policy network을 학습시키는 것을 볼 수 있다.
실제 실행해보면 아래와 같은 결과를 얻을 수 있다.

간단하게 학습시킨 후 테스트를 해보면, 현재 상태가 0.5 이면, Action을 -1.0 해야 한다고 학습된 것을 볼 수 있다.
그럼 오늘은 이만~
'Deep Learning' 카테고리의 다른 글
| Classification with unknown (1) | 2025.05.18 |
|---|---|
| PyTorch with GPU 설치하기 (0) | 2025.05.16 |
| Simple Object Detection with DETR (1) | 2025.05.13 |
| Simple CNN 예제 (0) | 2025.05.07 |
| Multi-task learning (0) | 2025.04.30 |