소개
강화 학습 (RL) 은 상담원이 누적 보상을 극대화하기 위해 환경에서 행동하는 방법을 학습하는 순차적 의사 결정 문제를 해결하기 위한 강력한 접근 방식입니다.많은 RL 알고리즘이 다음과 같은 분야에 속하지만 모델 프리 카테고리에는 RL의 또 다른 흥미로운 분야가 있습니다. 모델 기반 강화 학습 (MBRL).이 게시물에서는 MBRL을 소개하고 Python을 사용하여 기본 모델 기반 에이전트를 구축하는 방법을 안내해 드리겠습니다.
모델 기반 RL이란?
모델 기반 RL에서는 순전히 환경과의 상호 작용을 통해 최적의 정책을 학습하는 대신 먼저 학습합니다. 모델 환경의 역동성에 대해서요.이 모델은 현재 상태와 행동을 고려하여 다음 상태와 보상을 예측합니다.에이전트는 학습된 모델을 가지고 나면 미래 상태를 시뮬레이션하여 계획을 세울 수 있으므로 모델이 없는 접근 방식에 비해 더 효율적인 의사 결정이 가능합니다.
모델 기반 RL에는 일반적으로 세 가지 주요 단계가 포함됩니다.
- 모델 학습: 환경의 역학, 즉 상태가 한 상태에서 다른 상태로 어떻게 전환되는지 알아보십시오.
- 계획: 학습한 모델을 사용하여 미래를 시뮬레이션하고 최선의 조치를 찾아보십시오.
- 정책 개선: 계획 단계의 결과를 기반으로 정책을 구체화합니다.
모델 기반 RL을 선택해야 하는 이유
모델 기반 RL의 장점은 정책을 보다 효율적으로 학습할 수 있다는 데 있습니다.에이전트는 실제 상호 작용에만 의존하지 않고 환경을 시뮬레이션할 수 있으므로 올바른 정책을 학습하는 데 필요한 상호 작용의 수를 크게 줄일 수 있습니다.이는 실제 상호 작용에 비용이 많이 들거나 제한적인 환경 (예: 로보틱스) 에서 특히 유용합니다.
단계별 튜토리얼
다음을 사용하여 기본 모델 기반 RL 에이전트를 구현할 것입니다. 카트폴-V1 파이썬의 환경.이 접근법은 나중에 더 복잡한 환경에 적용할 수 있습니다.
1.환경 설정
다음의 클래식 CartPole 환경을 사용할 것입니다. 체육관RL 연구에 널리 사용되는 툴킷입니다.CartPole의 목표는 왼쪽 또는 오른쪽 동작을 취하여 카트 위의 기둥의 균형을 맞추는 것입니다.
먼저, 아직 체육관을 설치하지 않았다면 설치하십시오.
핍 인스톨 짐
다음으로 환경을 설정해 보겠습니다.
파이썬
코드 복사
수입 체육관
numpy를 np로 가져오기
# 카트폴-v1 환경 불러오기
env = gym.make (“카트폴-V1")
2.동역학 모델 학습
다음 단계는 다음을 예측하는 모델을 배우는 것입니다. 다음 상태 과 보상, 현재 상태와 동작을 고려했을 때환경과 무작위로 상호 작용하여 데이터를 수집할 것입니다.
데이터 수집
양식의 트랜지션을 수집해야 합니다. (상태, 행동, 보상, 넥스트_스테이트) 다이나믹 모델을 학습하려면:
1def collect_data(env, num_episodes=1000):
2 data = []
3 for _ in range(num_episodes):
4 state = env.reset()
5 done = False
6 while not done:
7 action = env.action_space.sample()
8 next_state, reward, done, _ = env.step(action)
9 data.append((state, action, reward, next_state))
10 state = next_state
11 return data
12
13# Collect data
14data = collect_data(env)
신경망 모델 정의
간단한 신경망을 사용하여 다음 상태와 보상을 예측해 보겠습니다.네트워크는 현재 상태와 동작을 입력으로 받아 예측된 다음 상태와 보상을 출력합니다.
1import torch
2import torch.nn as nn
3import torch.optim as optim
4
5# Define the neural network for the dynamics model
6class DynamicsModel(nn.Module):
7 def __init__(self, state_dim, action_dim):
8 super(DynamicsModel, self).__init__()
9 self.fc1 = nn.Linear(state_dim + action_dim, 128)
10 self.fc2 = nn.Linear(128, 128)
11 self.fc3 = nn.Linear(128, state_dim) # Predict next state
12 self.reward = nn.Linear(128, 1) # Predict reward
13
14 def forward(self, state, action):
15 x = torch.cat([state, action], dim=-1)
16 x = torch.relu(self.fc1(x))
17 x = torch.relu(self.fc2(x))
18 next_state = self.fc3(x)
19 reward = self.reward(x)
20 return next_state, reward
다이나믹 모델 학습
이제 수집된 데이터를 사용하여 동역학 모델을 훈련할 수 있습니다.
1# Initialize model and optimizer
2state_dim = env.observation_space.shape[0]
3action_dim = env.action_space.n
4model = DynamicsModel(state_dim, action_dim)
5optimizer = optim.Adam(model.parameters(), lr=0.001)
6criterion = nn.MSELoss()
7
8# Convert collected data to tensors for training
9states = torch.tensor([d[0] for d in data], dtype=torch.float32)
10actions = torch.tensor([d[1] for d in data], dtype=torch.float32).unsqueeze(1)
11next_states = torch.tensor([d[3] for d in data], dtype=torch.float32)
12rewards = torch.tensor([d[2] for d in data], dtype=torch.float32).unsqueeze(1)
13
14# Train the dynamics model
15for epoch in range(100):
16 optimizer.zero_grad()
17 predicted_next_states, predicted_rewards = model(states, actions)
18 loss = criterion(predicted_next_states, next_states) + criterion(predicted_rewards, rewards)
19 loss.backward()
20 optimizer.step()
21
22print("Model training complete!")
3.모델 예측 제어 (MPC) 를 사용한 계획
역학 모델이 있으면 이를 사용하여 다음을 수행할 수 있습니다. 계획 우리의 행동.간단한 접근 방식은 모델 예측 제어 (MPC)학습된 모델을 사용하여 여러 액션 시퀀스를 시뮬레이션하고 총 보상을 최대화하는 모델을 선택합니다.
다음은 계획 기간 동안 최상의 조치를 선택하는 간단한 MPC 구현입니다.
1def mpc_action_selection(model, current_state, num_simulations=100, horizon=10):
2 best_action = None
3 best_reward = -np.inf
4
5 for _ in range(num_simulations):
6 simulated_state = current_state
7 total_reward = 0
8 for _ in range(horizon):
9 action = np.random.choice([0, 1]) # Random action sampling for now
10 action_tensor = torch.tensor([action], dtype=torch.float32).unsqueeze(0)
11 state_tensor = torch.tensor(simulated_state, dtype=torch.float32).unsqueeze(0)
12 next_state, reward = model(state_tensor, action_tensor)
13 total_reward += reward.item()
14 simulated_state = next_state.detach().numpy()[0]
15
16 if total_reward > best_reward:
17 best_reward = total_reward
18 best_action = action
19
20 return best_action
4.평가: 모델 기반 에이전트 실행
마지막으로 MPC를 사용하여 에이전트의 성과를 평가하여 각 타임스텝에서 작업을 선택할 수 있습니다.
1def evaluate_model_based_agent(env, model, num_episodes=10):
2 for episode in range(num_episodes):
3 state = env.reset()
4 done = False
5 total_reward = 0
6
7 while not done:
8 action = mpc_action_selection(model, state)
9 state, reward, done, _ = env.step(action)
10 total_reward += reward
11 print(f"Episode {episode + 1}: Total Reward: {total_reward}")
12
13# Evaluate the agent
14evaluate_model_based_agent(env, model)다음 단계
이 자습서에서는 모델 기반 RL 에이전트 구축의 기본 사항을 다룹니다.확장 방법은 다음과 같습니다.
- 고급 계획: 다음과 같은 보다 정교한 계획 방법을 사용하십시오. 교차 엔트로피 방법 (CEM) 또는 정책 최적화.
- 불확실성 인식 모델: 모델 불확실성을 설명하기 위해 가능한 결과 (베이지안 방법 또는 앙상블 사용) 에 대한 분포를 학습합니다.
- 더 복잡한 환경: 이 방법을 다음과 같은 더 복잡한 환경에 적용해 보십시오.
카 레이싱-V0또는펜듈럼-V1.
결론
모델 기반 RL을 사용하면 환경 모델을 사용하여 학습하고 계획함으로써 샘플 효율성이 더 높은 에이전트를 구축할 수 있습니다.이 자습서는 시작점이긴 하지만 탐색해 볼 수 있는 고급 기술이 많이 있습니다.모델 기반 방법은 상호 작용에 많은 비용이 드는 실제 시나리오에서 특히 강력하므로 모델 기반 방법을 이해하는 것이 RL 툴킷의 핵심 기술이 될 수 있습니다.
추가 학습 자료
- 심층 강화 학습으로 Atari 플레이하기
- Atari를 위한 모델 기반 강화 학습
- 드루브 라마니 - 아타리를 위한 모델 기반 강화 학습
- 피터 아벨 - L6 모델 기반 RL (딥 RL 시리즈의 기초)


