Advantage Actor Critic

Deep Reinforcement Learning bằng Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Vì sao Actor–Critic?

 

  • Hạn chế của REINFORCE:

    • Phương sai cao
    • Hiệu quả mẫu kém
  • Phương pháp Actor–Critic thêm mạng critic, cho phép học Chênh lệch Thời gian (TD)

Một hình chữ nhật lớn nhãn 'agent'; bên trong có hai hình chữ nhật nhỏ, nhãn lần lượt 'actor' và 'critic'.

Deep Reinforcement Learning bằng Python

Trực giác về phương pháp Actor–Critic

Sinh viên trò chuyện quanh bàn, với sách và bút rải rác.

 

  • Mạng Actor:

    • Ra quyết định
    • Không tự đánh giá được
  • Mạng Critic:

    • Phản hồi cho actor ở mỗi bước
Deep Reinforcement Learning bằng Python

Mạng Critic

 

  • Critic xấp xỉ hàm giá trị trạng thái

Mô tả mạng critic, với trạng thái làm đầu vào và hàm Value làm đầu ra; vì vậy chỉ có một nút đầu ra.

  • Đánh giá hành động $a_t$ dựa trên lợi thế hoặc sai số TD

 

class Critic(nn.Module):
    def __init__(self, state_size):
        super(Critic, self).__init__()
        self.fc1 = nn.Linear(state_size, 64)
        self.fc2 = nn.Linear(64, 1)

def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) value = self.fc2(x) return value
critic_network = Critic(8)
Deep Reinforcement Learning bằng Python

Động lực Actor–Critic

 

  • Mỗi bước:
    • Actor chọn hành động (giống mạng chính sách trong REINFORCE)

Phía trên: Một hình chữ nhật lớn nhãn 'agent'; bên trong có hai hình chữ nhật nhỏ, nhãn lần lượt 'actor' và 'critic'. Phía dưới: một hình chữ nhật riêng nhãn 'environment'.

Deep Reinforcement Learning bằng Python

Động lực Actor–Critic

 

  • Mỗi bước:
    • Actor chọn hành động (giống mạng chính sách trong REINFORCE)
    • Critic quan sát phần thưởng và trạng thái

Một mũi tên đỏ nhãn 'action' đi từ actor đến environment.

Deep Reinforcement Learning bằng Python

Động lực Actor–Critic

 

  • Mỗi bước:
    • Actor chọn hành động (giống mạng chính sách trong REINFORCE)
    • Critic quan sát phần thưởng và trạng thái
    • Critic tính sai số TD
    • Actor và Critic dùng sai số TD để cập nhật trọng số

Hai mũi tên đỏ, nhãn lần lượt 'State' và 'Reward', đi từ environment đến Critic.

Deep Reinforcement Learning bằng Python

Động lực Actor–Critic

 

  • Mỗi bước:
    • Actor chọn hành động (giống mạng chính sách trong REINFORCE)
    • Critic quan sát phần thưởng và trạng thái
    • Critic tính sai số TD
    • Actor và Critic dùng sai số TD để cập nhật trọng số
    • Actor đã cập nhật quan sát trạng thái mới

Một mũi tên nhãn 'TD error' đi từ Critic đến Actor.

Deep Reinforcement Learning bằng Python

Động lực Actor–Critic

 

  • Mỗi bước:
    • Actor chọn hành động (giống mạng chính sách trong REINFORCE)
    • Critic quan sát phần thưởng và trạng thái
    • Critic tính sai số TD
    • Actor và Critic dùng sai số TD để cập nhật trọng số
    • Actor đã cập nhật quan sát trạng thái mới
  • ... lặp lại

Mũi tên State giờ cũng đi đến Actor.

Deep Reinforcement Learning bằng Python

Hàm mất mát A2C

 

Critic

Hàm mất mát của critic. Dùng sai số TD bình phương cho critic: Lc(theta c) = ((r_t + gamma * V theta c (s t + 1)) - V theta c) bình phương

  • Mất mát critic: sai số TD bình phương

 

Actor

Hàm mất mát của actor. Có thể chứng minh rằng ở mỗi bước t, ta dùng: L(theta) bằng âm log xác suất hành động nhân sai số TD hay lợi thế.

  • Sai số TD phản ánh đánh giá của critic
  • Tăng xác suất các hành động có sai số TD dương
Deep Reinforcement Learning bằng Python

Tính các hàm mất mát

 

def calculate_losses(critic_network, action_log_prob, 
                     reward, state, next_state, done):

# Critic provides the state value estimates value = critic_network(state)
next_value = critic_network(next_state)
td_target = (reward + gamma * next_value * (1-done))
td_error = td_target - value
# Apply formulas for actor and critic losses actor_loss = -action_log_prob * td_error.detach()
critic_loss = td_error ** 2
return actor_loss, critic_loss

 

 

  • Tính sai số TD
  • Tính mất mát actor
    • Dùng .detach() để chặn lan truyền gradient sang trọng số critic
  • Tính mất mát critic
Deep Reinforcement Learning bằng Python

Vòng lặp huấn luyện Actor–Critic

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:

# Select action action, action_log_prob = select_action(actor, state)
next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated
# Calculate losses actor_loss, critic_loss = calculate_losses(critic, action_log_prob, reward, state, next_state, done)
# Update actor actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()
# Update critic critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()
state = next_state
Deep Reinforcement Learning bằng Python

Ayo berlatih!

Deep Reinforcement Learning bằng Python

Preparing Video For Download...