Chuyển đến nội dung chính

Giải thích Định lý Gradient Chính sách: Hướng dẫn Thực hành

Tìm hiểu về định lý gradient chính sách trong RL và cách suy ra nó một cách toán học. Triển khai một thuật toán dựa trên gradient chính sách để giải một môi trường RL đơn giản trong Gymnasium.
· 15 phút đọc

Khám phá cùng AI

Gradient chính sách trong học tăng cường (RL) là một nhóm thuật toán tối ưu trực tiếp chính sách của tác tử bằng cách ước lượng gradient của phần thưởng kỳ vọng theo các tham số của chính sách. 

Trong hướng dẫn này, chúng tôi giải thích định lý gradient chính sách và phép dẫn xuất của nó, đồng thời minh họa cách triển khai thuật toán gradient chính sách bằng PyTorch. 

Định lý Gradient Chính sách là gì?

Trong học tăng cường, chính sách của tác tử là thuật toán mà nó dùng để quyết định hành động dựa trên quan sát về môi trường. Mục tiêu trong các bài toán RL là tối đa hóa phần thưởng mà tác tử nhận được khi tương tác với môi trường. Chính sách mang lại phần thưởng lớn nhất là chính sách tối ưu.

Hai nhóm thuật toán lớn được dùng để tối đa hóa lợi tức là phương pháp dựa trên chính sách và phương pháp dựa trên giá trị:

  • Phương pháp dựa trên chính sách, như thuật toán gradient chính sách, học trực tiếp chính sách tối ưu bằng cách chạy leo dốc trên phần thưởng kỳ vọng. Chúng không dựa vào hàm giá trị. Chính sách được biểu diễn dưới dạng tham số hóa. Khi chính sách được triển khai bằng mạng nơ-ron, các tham số của chính sách chính là trọng số mạng. Mạng học chính sách tối ưu bằng cách leo dốc theo các tham số của chính sách. 
  • Phương pháp dựa trên giá trị, như Q-learning, ước lượng giá trị của các trạng thái hoặc cặp trạng thái-hành động. Chúng suy ra chính sách một cách gián tiếp bằng cách chọn các hành động có giá trị cao nhất. Chính sách dẫn đến hàm giá trị tối ưu được chọn làm chính sách tối ưu. Phương trình Bellman mô tả các hàm giá trị trạng thái tối ưu và hàm giá trị trạng thái-hành động tối ưu. 

Theo định lý gradient chính sách, đạo hàm của lợi tức kỳ vọng chính là kỳ vọng của tích giữa lợi tức và đạo hàm của logarit chính sách (thường được biểu diễn như một phân phối xác suất). 

Một chính sách thường được mô hình hóa như một hàm tham số hóa. Khi chính sách được mô hình hóa bằng mạng nơ-ron, các tham số của chính sách là trọng số mạng. Do đó, việc tính gradient của lợi tức kỳ vọng (tổng phần thưởng) theo các tham số chính sách sẽ dẫn đến cập nhật chính sách để cải thiện hiệu suất. Gradient này có thể được dùng để cập nhật lặp dần các tham số chính sách theo hướng làm tăng lợi tức kỳ vọng. Quá trình huấn luyện sẽ hội tụ về chính sách tối ưu tối đa hóa lợi tức kỳ vọng. 

Ở các phần sau, chúng tôi sẽ giải thích chi tiết định lý này và cách dẫn xuất nó.

Vì sao nên dùng phương pháp Policy Gradient?

Một lợi thế then chốt của các phương pháp policy gradient là khả năng xử lý không gian hành động phức tạp, nơi các cách tiếp cận dựa trên giá trị truyền thống gặp khó khăn.

Xử lý không gian hành động có số chiều cao

Các phương pháp dựa trên giá trị, như Q-learning, hoạt động bằng cách ước lượng hàm giá trị cho mọi hành động có thể. Điều này trở nên khó khi không gian hành động của môi trường là liên tục hoặc rời rạc nhưng rất lớn. 

Các phương pháp policy gradient tham số hóa chính sách và ước lượng gradient của tổng phần thưởng theo các tham số của chính sách. Chúng dùng gradient này để tối ưu trực tiếp chính sách bằng cách cập nhật các tham số. Vì vậy, chúng có thể xử lý hiệu quả các không gian hành động có số chiều cao hoặc liên tục. Policy gradient cũng là nền tảng của các phương pháp Học tăng cường với phản hồi từ con người (RLHF). 

Bằng cách tham số hóa chính sách và điều chỉnh tham số dựa trên gradient, policy gradient có thể xử lý hiệu quả các hành động liên tục và nhiều chiều. Cách tiếp cận trực tiếp này cho phép khái quát hóa tốt hơn và thăm dò linh hoạt hơn, rất phù hợp cho các tác vụ như điều khiển robot và những môi trường phức tạp khác.

Học các chính sách ngẫu nhiên

Với một tập quan sát đã cho: 

  • Chính sách tất định chỉ rõ tác nhân sẽ thực hiện hành động nào. 
  • Chính sách ngẫu nhiên đưa ra một tập hành động và xác suất tác nhân chọn mỗi hành động. 

Khi theo một chính sách ngẫu nhiên, cùng một quan sát có thể dẫn đến các hành động khác nhau ở các lần lặp khác nhau. Điều này khuyến khích việc thăm dò không gian hành động và ngăn chính sách mắc kẹt ở các cực trị cục bộ. Vì thế, chính sách ngẫu nhiên hữu ích trong những môi trường nơi thăm dò là thiết yếu để khám phá con đường dẫn đến phần thưởng tối đa. 

Trong các phương pháp dựa trên chính sách, đầu ra của chính sách được chuyển thành một phân phối xác suất, gán xác suất cho từng hành động có thể. Tác nhân chọn hành động bằng cách lấy mẫu từ phân phối này, nhờ đó có thể triển khai một chính sách ngẫu nhiên. Do đó, các phương pháp policy gradient kết hợp thăm dò với khai thác, hữu ích trong những môi trường có cấu trúc phần thưởng phức tạp. 

Suy dẫn Định lý Policy Gradient

Trước khi đi vào phần suy dẫn, cần thiết lập ký hiệu toán học và các khái niệm chính dùng xuyên suốt phần chứng minh.

Ký hiệu toán học và phần mở đầu

Như đã đề cập ở phần trước, định lý policy gradient phát biểu rằng đạo hàm của kỳ vọng lợi tức bằng kỳ vọng của tích giữa lợi tức và đạo hàm của logarit chính sách. 

Trước khi suy dẫn định lý policy gradient, ta giới thiệu ký hiệu:

  • E[X] chỉ kỳ vọng xác suất của biến ngẫu nhiên X. 
  • Về mặt toán học, chính sách được biểu diễn như một ma trận xác suất cho biết xác suất chọn các hành động khác nhau dựa trên các quan sát khác nhau. Một chính sách thường được mô hình hóa dưới dạng hàm tham số, với các tham số ký hiệu là θ.
    • πθ chỉ một chính sách được tham số hóa bởi θ. Trong thực tế, các tham số này là trọng số của mạng nơ-ron mô hình hóa chính sách. 
  • Quỹ đạo, τ, là một chuỗi trạng thái, thường bắt đầu từ trạng thái khởi tạo ngẫu nhiên cho đến thời điểm hiện tại hoặc trạng thái kết thúc. 
  • ∇θf chỉ gradient của hàm f theo tham số θ. 
  • J(πθ) chỉ lợi tức kỳ vọng đạt được khi tác nhân đi theo chính sách πθ. Đây cũng là hàm mục tiêu cho leo dốc (gradient ascent). 
  • Môi trường đưa ra phần thưởng ở mỗi bước thời gian, phụ thuộc vào hành động của tác nhân. Lợi tức là tổng phần thưởng tích lũy từ trạng thái ban đầu đến thời điểm hiện tại. 
    • R(τ) là lợi tức tạo ra trên quỹ đạo τ. 

Các bước suy dẫn

Chúng tôi trình bày cách suy dẫn và chứng minh định lý policy gradient từ các nguyên lý cơ bản, bắt đầu bằng khai triển hàm mục tiêu và dùng mẹo log-đạo hàm. 

Hàm mục tiêu (Phương trình 1)

Hàm mục tiêu trong phương pháp policy gradient là lợi tức 

J được tích lũy bằng cách đi theo quỹ đạo dựa trên chính sách π biểu diễn theo các tham số θ. Hàm mục tiêu này được cho bởi: 

Trong phương trình trên: 

  • Vế trái (LHS) là lợi tức kỳ vọng đạt được khi đi theo chính sách πθ.
  • Vế phải (RHS) là kỳ vọng (trên quỹ đạo τ tạo ra khi đi theo chính sách πθ ở mỗi bước) của lợi tức R(τ) tạo ra trên quỹ đạo τ.  

Vi phân của hàm mục tiêu (Phương trình 2)

Lấy đạo hàm (theo θ) hai vế của phương trình trên ta được:

Gradient của kỳ vọng (Phương trình 3)

Kỳ vọng (ở vế phải) có thể được biểu diễn như một tích phân trên tích của: 

  • Xác suất đi theo một quỹ đạo τ
  • Lợi tức tạo ra trên quỹ đạo τ

Do đó, vế phải của Phương trình 2 được viết lại là: 

Gradient của một tích phân bằng tích phân của gradient. Vì vậy, trong biểu thức trên, ta có thể đưa toán tử gradient ∇θ vào dưới dấu tích phân. Khi đó vế phải trở thành: 

Vì vậy, Phương trình 2 có thể viết lại thành:

Xác suất của quỹ đạo (Phương trình 4)

Giờ ta xem xét kỹ hơn P(τ|θ), xác suất tác nhân đi theo quỹ đạo τ với các tham số chính sách θ (và do đó là chính sách πθ). Một quỹ đạo gồm nhiều bước. Do đó: 

  • Xác suất thu được quỹ đạo τ là tích của:
    • Xác suất đi theo tất cả các bước riêng lẻ. 

  • Tại bước thời gian t, tác nhân đi từ trạng thái s sang trạng thái st+1 bằng cách thực hiện hành động at. Xác suất của việc này bằng tích của:
    • Xác suất chính sách dự đoán hành động at tại trạng thái st
    • Xác suất đi đến trạng thái st+1 với hành động at và trạng thái st

Vì vậy, bắt đầu từ trạng thái ban đầu s0, xác suất tác nhân đi theo quỹ đạo τ dựa trên chính sách πθ được cho bởi: 

Để đơn giản hóa, ta muốn biểu diễn tích ở vế phải trên dưới dạng tổng. Vì vậy, ta lấy logarit hai vế của phương trình trên:

 

Đạo hàm của log-xác suất (Phương trình 5) 

Giờ ta lấy đạo hàm (theo θ) của log-xác suất trong phương trình trên. 

Ở vế phải của phương trình trên: 

  • Hạng tử đầu tiên log ρ0(s0) là hằng theo θ. Do đó đạo hàm của nó bằng 0. 
  • Hạng tử đầu tiên bên trong tổng P(st+1|st, at) cũng độc lập với θ và đạo hàm của nó theo θ cũng bằng 0. 

Loại bỏ các hạng tử bằng 0 ở trên khỏi phương trình, ta thu được (Phương trình 5): 

Nhắc lại từ Phương trình 2 rằng: 

Phương trình 5 đánh giá log của phần đầu vế phải Phương trình 2. Ta cần liên hệ đạo hàm của một hạng tử với logarit của nó. Ta làm điều này bằng quy tắc dây chuyền và mẹo log-đạo hàm. 

Mẹo log-đạo hàm

Ta rẽ nhánh và dùng các quy tắc giải tích để suy ra một kết quả, sẽ được dùng để đơn giản hóa phương trình trước và khiến nó phù hợp cho các phương pháp tính toán. 

Trong giải tích, đạo hàm của logarit có thể viết là: 

Vì vậy, bằng cách sắp xếp lại phương trình trên, đạo hàm của x có thể được biểu diễn theo đạo hàm của logarit của x:

Điều này đôi khi được gọi là mẹo log-đạo hàm. 

Quy tắc dây chuyền

Theo quy tắc dây chuyền, cho z(y) là hàm của y, trong đó y bản thân là hàm của θ, y(θ), đạo hàm của z theo θ được cho bởi:

Trong trường hợp này, y(θ) biểu thị cho P(θ) và z(y) biểu thị cho log(y). Do đó, 

Áp dụng quy tắc dây chuyền

Ta biết từ giải tích rằng d(log(y)) / dy = 1/y. Dùng điều này trong biểu thức đầu tiên của vế phải ở trên. 

Chuyển y sang vế trái và dùng ký hiệu :

y biểu thị cho P(θ). Vậy phương trình trên tương đương với: 

Áp dụng mẹo log-đạo hàm

Kết quả trên cho vế phải đầu tiên của Phương trình 2 (hiển thị bên dưới).  

Dùng kết quả đó vào vế phải của Phương trình 2, ta được: 

Ta hoán vị các hạng tử dưới dấu tích phân ở vế phải như sau:

Suy ra kết quả cuối cùng

Lưu ý rằng biểu thức trên chứa khai triển tích phân của một kỳ vọng: ∫P(θ)∇logP(θ) = E[∇logP(θ)]

Vì thế, vế phải trên có thể được biểu diễn như một kỳ vọng: 

Ta thế đạo hàm của log-xác suất vào biểu thức của phần thưởng kỳ vọng: 

Trong phương trình trên, thay giá trị của ∇logP(θ) từ Phương trình 5 để được: 

Đây là biểu thức cho gradient của hàm phần thưởng theo định lý gradient chính sách. 

Trực giác đằng sau policy gradient

Các phương pháp policy gradient chuyển đầu ra của chính sách thành một phân phối xác suất. Tác tử lấy mẫu từ phân phối này để chọn hành động. Các phương pháp này điều chỉnh các tham số của chính sách, dẫn đến cập nhật phân phối xác suất qua từng vòng lặp. Phân phối được cập nhật có xác suất cao hơn chọn những hành động mang lại phần thưởng cao hơn. 

Thuật toán policy gradient tính gradient của lợi nhuận kỳ vọng theo các tham số của chính sách. Bằng cách dịch chuyển các tham số theo hướng của gradient này, tác tử làm tăng xác suất chọn các hành động dẫn tới phần thưởng cao hơn trong quá trình huấn luyện. 

Về bản chất, những hành động dẫn tới kết quả tốt hơn sẽ có khả năng được chọn cao hơn trong tương lai, dần dần cải thiện chính sách để tối đa hóa phần thưởng dài hạn.

Triển khai Policy Gradients bằng Python

Sau khi thảo luận các nguyên lý cơ bản của policy gradients, chúng ta sẽ triển khai chúng bằng PyTorch và Gymnasium. 

Thiết lập môi trường

Bước đầu tiên, ta cần cài đặt gymnasium và một vài thư viện hỗ trợ như NumPy và PyTorch.

Để cài đặt gymnasium và các phụ thuộc trên máy chủ hoặc máy cục bộ, chạy:

$ pip install gymnasium 

Để cài đặt trong Notebook như Google Colab hoặc DataLab, dùng: 

!pip install gymnasium

Bạn import các gói này trong môi trường Python:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torch.distributions as distributions
import numpy as np
import gymnasium as gym  

Lập trình một tác tử policy gradient đơn giản

Tạo một instance của môi trường bằng phương thức .make().

env = gym.make('CartPole-v1')

Cũng như các phương pháp machine learning khác, ta dùng mạng nơ-ron để triển khai tác tử policy gradient. 

CartPole-v1 là một môi trường đơn giản, nên ta thiết kế một mạng đơn giản với 1 tầng ẩn gồm 64 neuron. Kích thước tầng đầu vào bằng với số chiều của không gian quan sát. Kích thước tầng đầu ra bằng với số lượng hành động của môi trường. Như vậy, mạng chính sách ánh xạ trạng thái quan sát được sang hành động. Với một quan sát làm đầu vào, mạng xuất ra hành động dự đoán theo chính sách. 

Đoạn mã dưới đây triển khai mạng chính sách: 

class PolicyNetwork(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim, dropout):
        super().__init__()

        self.layer1 = nn.Linear(input_dim, hidden_dim)
        self.layer2 = nn.Linear(hidden_dim, output_dim)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        x = self.layer1(x)
        x = self.dropout(x)
        x = F.relu(x)
        x = self.layer2(x)
        return x

Huấn luyện tác tử

Môi trường cung cấp phần thưởng ở mỗi bước thời gian tùy theo trạng thái và hành động của tác tử. Cách tiếp cận policy gradient bao gồm chạy gradient descent trên tổng phần thưởng (return). Mục tiêu là tối đa hóa tổng return. 

Để tính return trong một tập, bạn cộng dồn (có hệ số chiết khấu) các phần thưởng từ mọi bước trong tập đó. Ngoài ra, việc chuẩn hóa các return cũng hữu ích để đảm bảo quá trình huấn luyện mượt và ổn định. Đoạn mã dưới đây minh họa cách thực hiện:

def calculate_stepwise_returns(rewards, discount_factor):
    returns = []
    R = 0

    for r in reversed(rewards):
        R = r + R * discount_factor
        returns.insert(0, R)
    returns = torch.tensor(returns)
    normalized_returns = (returns - returns.mean()) / returns.std()
    return normalized_returns

Trong mỗi vòng lặp của forward pass, ta thực hiện các bước sau: 

  • Chạy tác tử theo chính sách hiện tại bằng hàm .step(). Chính sách dự đoán xác suất thực hiện hành động đã chọn ở mỗi bước thời gian.
  • Nhận phần thưởng từ môi trường dựa trên hành động của tác tử.
  • Tích lũy phần thưởng theo bước và log-xác suất của các hành động cho đến khi tác tử đạt trạng thái kết thúc.

Đoạn mã dưới đây triển khai forward pass:

def forward_pass(env, policy, discount_factor):
    log_prob_actions = []
    rewards = []
    done = False
    episode_return = 0

    policy.train()
    observation, info = env.reset()

    while not done:
        observation = torch.FloatTensor(observation).unsqueeze(0)
        action_pred = policy(observation)
        action_prob = F.softmax(action_pred, dim = -1)
        dist = distributions.Categorical(action_prob)
        action = dist.sample()
        log_prob_action = dist.log_prob(action)

        observation, reward, terminated, truncated, info = env.step(action.item())
        done = terminated or truncated

        log_prob_actions.append(log_prob_action)
        rewards.append(reward)
        episode_return += reward

    log_prob_actions = torch.cat(log_prob_actions)
    stepwise_returns = calculate_stepwise_returns(rewards, discount_factor)

    return episode_return, stepwise_returns, log_prob_actions

Dùng lan truyền ngược và gradient ascent để cập nhật chính sách

Trong machine learning truyền thống:

  • Loss là chênh lệch giữa đầu ra dự đoán và thực tế. 
  • Ta tối thiểu hóa loss bằng gradient descent.

Trong RL:

  • Loss là một đại lượng thay thế cho đại lượng mà gradient descent (hoặc ascent) sẽ được áp dụng. 
  • Ta tối đa hóa return (tổng phần thưởng) bằng gradient ascent.
  • Giá trị return kỳ vọng được dùng làm đại diện cho loss cho gradient descent. Giá trị này là tích của:
    • Các return kỳ vọng từ mỗi bước với 
    • Xác suất chọn hành động được lấy mẫu ở mỗi bước. 
  • Để áp dụng gradient ascent bằng lan truyền ngược, ta dùng số âm của loss. 

Đoạn mã dưới đây tính loss:

def calculate_loss(stepwise_returns, log_prob_actions):
    loss = -(stepwise_returns * log_prob_actions).sum()
    return loss

Tương tự các thuật toán machine learning tiêu chuẩn, để cập nhật chính sách, bạn chạy lan truyền ngược theo hàm loss. Phương thức update_policy() dưới đây gọi phương thức calculate_loss(). Sau đó chạy lan truyền ngược trên loss này để cập nhật các tham số của chính sách, tức là trọng số mô hình của mạng chính sách. 

def update_policy(stepwise_returns, log_prob_actions, optimizer):
    stepwise_returns = stepwise_returns.detach()
    loss = calculate_loss(stepwise_returns, log_prob_actions)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    return loss.item()

Vòng lặp huấn luyện 

Ta dùng các hàm đã định nghĩa trước đó để huấn luyện chính sách. Trước khi bắt đầu huấn luyện, ta cần: 

  • Một chính sách chưa huấn luyện, được khởi tạo ngẫu nhiên từ lớp PolicyNetwork. 
  • Một bộ tối ưu hóa dùng thuật toán Adam. 
  • Siêu tham số cho hệ số chiết khấu, tốc độ học, tỷ lệ dropout, ngưỡng phần thưởng và số epoch huấn luyện tối đa. 

Ta lặp qua vòng huấn luyện cho đến khi return trung bình vượt ngưỡng phần thưởng. Ở mỗi vòng lặp, ta thực hiện các bước sau: 

  • Với mỗi tập, chạy forward pass một lần. Thu thập log-xác suất của các hành động, return theo bước, và tổng return của tập đó. Tích lũy return theo tập vào một mảng. 
  • Tính loss bằng log-xác suất và return theo bước. Chạy lan truyền ngược trên loss. Dùng bộ tối ưu để cập nhật tham số chính sách. 
  • Kiểm tra xem return trung bình trên N_TRIALS có vượt ngưỡng phần thưởng hay không. 

Đoạn mã dưới đây triển khai các bước trên:

def main(): 
    MAX_EPOCHS = 500
    DISCOUNT_FACTOR = 0.99
    N_TRIALS = 25
    REWARD_THRESHOLD = 475
    PRINT_INTERVAL = 10
    INPUT_DIM = env.observation_space.shape[0]
    HIDDEN_DIM = 128
    OUTPUT_DIM = env.action_space.n
    DROPOUT = 0.5

    episode_returns = []

    policy = PolicyNetwork(INPUT_DIM, HIDDEN_DIM, OUTPUT_DIM, DROPOUT)

    LEARNING_RATE = 0.01
    optimizer = optim.Adam(policy.parameters(), lr = LEARNING_RATE)

    for episode in range(1, MAX_EPOCHS+1):
        episode_return, stepwise_returns, log_prob_actions = forward_pass(env, policy, DISCOUNT_FACTOR)
        _ = update_policy(stepwise_returns, log_prob_actions, optimizer)

        episode_returns.append(episode_return)
        mean_episode_return = np.mean(episode_returns[-N_TRIALS:])

        if episode % PRINT_INTERVAL == 0:
            print(f'| Episode: {episode:3} | Mean Rewards: {mean_episode_return:5.1f} |')

        if mean_episode_return >= REWARD_THRESHOLD:
            print(f'Reached reward threshold in {episode} episodes')
            break

Chạy chương trình huấn luyện bằng cách gọi hàm main():

main()

Sổ tay DataLab này chứa phần triển khai thuật toán policy gradient ở trên. Bạn có thể chạy trực tiếp hoặc dùng nó làm điểm khởi đầu để chỉnh sửa thuật toán.

Ưu điểm và Thách thức của Phương pháp Gradient Chính sách

Các phương pháp gradient chính sách mang lại một số ưu điểm, chẳng hạn như:

  • Xử lý không gian hành động liên tục: Các phương pháp dựa trên giá trị (như Q-learning) kém hiệu quả với không gian hành động liên tục vì chúng phải ước lượng giá trị trên toàn bộ không gian hành động. Phương pháp gradient chính sách có thể tối ưu trực tiếp chính sách bằng gradient của lợi nhuận kỳ vọng. Cách tiếp cận này hoạt động tốt với các phân phối hành động liên tục. Do đó, các phương pháp gradient chính sách phù hợp cho các bài toán như điều khiển robot vốn dựa trên không gian hành động liên tục.
  • Chính sách ngẫu nhiên: Phương pháp gradient chính sách có thể học các chính sách ngẫu nhiên - đưa ra xác suất chọn mỗi hành động khả dĩ. Điều này cho phép tác tử thử nhiều hành động và giảm nguy cơ mắc kẹt trong cực trị cục bộ. Nó hữu ích trong môi trường phức tạp nơi tác tử cần khám phá không gian hành động để tìm chính sách tối ưu. Bản chất ngẫu nhiên giúp cân bằng giữa khám phá (thử hành động mới) và khai thác (chọn các hành động tốt nhất đã biết), điều then chốt trong môi trường có bất định hoặc phần thưởng thưa thớt.
  • Tối ưu trực tiếp chính sách: Gradient chính sách tối ưu trực tiếp chính sách thay vì dùng các hàm giá trị. Trong không gian hành động liên tục hoặc có số chiều cao, xấp xỉ giá trị cho mọi hành động có thể rất tốn chi phí tính toán. Vì vậy, các phương pháp dựa trên chính sách hoạt động tốt trong những môi trường như vậy. 

Dù có nhiều ưu điểm, phương pháp gradient chính sách vẫn tồn tại một số thách thức cố hữu:

  • Phương sai cao trong ước lượng gradient: Các phương pháp gradient chính sách chọn hành động bằng cách lấy mẫu từ một phân phối xác suất. Thực chất, chúng lấy mẫu quỹ đạo để ước lượng lợi nhuận kỳ vọng. Vì quá trình lấy mẫu vốn ngẫu nhiên, các lợi nhuận ước lượng ở những vòng lặp sau có thể có phương sai cao. Điều này khiến tác tử khó học hiệu quả vì các cập nhật lên chính sách có thể dao động mạnh giữa các vòng lặp. 
  • Bất ổn trong quá trình huấn luyện: 
    • Các phương pháp gradient chính sách rất nhạy với siêu tham số như tốc độ học. Nếu tốc độ học quá cao, các cập nhật tham số chính sách có thể quá lớn, khiến quá trình huấn luyện bỏ lỡ bộ tham số tối ưu. Ngược lại, nếu tốc độ học quá thấp, hội tụ có thể chậm. 
    • Các phương pháp gradient chính sách cần cân bằng giữa khám phá và khai thác. Nếu tác tử không khám phá đủ, nó có thể không đến gần vùng lân cận của chính sách tối ưu. Ngược lại, nếu khám phá quá nhiều, nó sẽ không hội tụ về chính sách tối ưu và dao động quanh không gian hành động. 
  • Kém hiệu quả về mẫu: Các phương pháp gradient chính sách ước lượng lợi nhuận bằng cách theo sát mỗi chính sách cho đến khi kết thúc và cộng dồn phần thưởng mỗi bước. Vì vậy, chúng cần rất nhiều tương tác với môi trường để thu thập số lượng lớn các quỹ đạo mẫu. Điều này kém hiệu quả và tốn kém đối với các môi trường có không gian trạng thái hoặc hành động lớn. 

Giải pháp cho tính ổn định

Vì bất ổn là vấn đề khá phổ biến trong các phương pháp gradient chính sách, các nhà phát triển đã áp dụng nhiều giải pháp để ổn định quá trình huấn luyện. Dưới đây, chúng tôi giới thiệu những giải pháp thường dùng để ổn định huấn luyện với gradient chính sách: 

Sử dụng hàm cơ sở (baseline)

Do việc lấy mẫu kém hiệu quả, các gradient của lợi nhuận ước lượng trong các vòng lặp huấn luyện có thể có phương sai cao, khiến quá trình huấn luyện thiếu ổn định và chậm. Cách tiếp cận phổ biến để giảm phương sai là dùng các hàm cơ sở, như phương pháp Advantage Actor-Critic (A2C). Ý tưởng là dùng một đại diện (hàm lợi thế - advantage) thay cho lợi nhuận ước lượng trong hàm mục tiêu. 

Lợi thế được tính bằng hiệu giữa lợi nhuận thực tế từ quỹ đạo đã lấy mẫu và lợi nhuận kỳ vọng cho trạng thái ban đầu. Cách này sử dụng hàm giá trị như giá trị kỳ vọng của các trạng thái và cặp trạng thái-hành động. Bằng cách biểu diễn hàm mất mát là chênh lệch giữa lợi nhuận thực tế và lợi nhuận kỳ vọng thay vì chỉ dùng lợi nhuận, A2C giảm phương sai trong hàm mất mát và do đó trong các gradient, giúp quá trình huấn luyện ổn định hơn. 

Sử dụng điều chuẩn entropy

Trong một số môi trường, như những nơi có phần thưởng thưa thớt (chỉ rất ít trạng thái mang lại phần thưởng), chính sách nhanh chóng trở nên tất định. Nó cũng trở nên tham lam và khai thác các đường đi đã khám phá. Điều này ngăn cản việc khám phá thêm và thường dẫn đến hội tụ về các cực trị cục bộ và chính sách kém tối ưu. 

Giải pháp là khuyến khích khám phá bằng cách phạt chính sách khi nó trở nên quá tất định. Điều này được thực hiện bằng cách thêm một hạng tử dựa trên entropy vào hàm mục tiêu. Entropy đo lường mức độ ngẫu nhiên trong chính sách. Entropy càng lớn, hành động tác tử chọn càng ngẫu nhiên. Hạng tử dựa trên entropy này là tích của hệ số entropy và entropy của chính sách hiện tại. 

Đưa entropy vào thành phần của hàm mục tiêu giúp đạt cân bằng giữa khai thác và khám phá. 

Mở rộng Gradient Chính sách

Trong số các phần mở rộng của phương pháp gradient chính sách, một thuật toán nền tảng nhất là REINFORCE. Nó cung cấp một cách triển khai trực tiếp định lý gradient chính sách và là nền tảng cho các kỹ thuật nâng cao hơn.

Thuật toán REINFORCE

Thuật toán REINFORCE, còn gọi là Monte Carlo Reinforce, là một trong những triển khai cơ bản của định lý gradient chính sách. Nó sử dụng phương pháp Monte Carlo để ước lượng lợi nhuận và gradient chính sách. Khi theo thuật toán REINFORCE, tác tử lấy mẫu trực tiếp tất cả hành động (từ trạng thái đầu đến trạng thái cuối) từ môi trường. Điều này tương phản với các phương pháp khác như TD-Learning và Lập trình Động, vốn nội suy (bootstrap) hành động dựa trên ước lượng hàm giá trị. 

Dưới đây là các bước cơ bản của thuật toán REINFORCE:

  • Khởi tạo chính sách với các tham số ngẫu nhiên
  • Lặp lại nhiều tập huấn luyện. Với mỗi tập: 
    • Sinh từng bước của toàn bộ tập như sau: 
      • Truyền trạng thái vào hàm chính sách. 
      • Hàm chính sách sinh xác suất cho mỗi hành động khả dĩ.
      • Lấy mẫu ngẫu nhiên một hành động từ phân phối xác suất này.
    • Với mỗi trạng thái trong tập, ước lượng lợi nhuận (tổng phần thưởng chiết khấu) đến từng bước.
    • Ước lượng gradient của hàm mục tiêu (theo định lý gradient chính sách), được biểu diễn như tích của lợi nhuận theo từng bước và xác suất hành động ở mỗi bước. 
    • Cập nhật các tham số chính sách bằng cách áp dụng các gradient

Với mỗi chính sách, bạn có thể lấy mẫu một quỹ đạo duy nhất để ước lượng gradient (như trình bày ở trên) hoặc lấy trung bình gradient qua nhiều quỹ đạo được lấy mẫu dưới cùng một chính sách. 

Các phương pháp actor-critic

Các phương pháp actor-critic kết hợp phương pháp gradient chính sách (như REINFORCE) với các hàm giá trị.

  • Cách hoạt động của actor tương tự các phương pháp gradient chính sách. Actor hiện thực hóa chính sách, chọn hành động ở mỗi bước dựa trên chính sách. Nó cập nhật chính sách bằng cách đi theo gradient của lợi nhuận kỳ vọng. 
  • Critic hiện thực hóa hàm giá trị, được dùng làm baseline (đã bàn ở phần trước). Điều này giúp huấn luyện hiệu quả và ổn định hơn. 

Các phương pháp gradient chính sách như REINFORCE ước lượng gradient dọc theo mỗi quỹ đạo bằng lợi nhuận thô. Vì các quỹ đạo này được rút ra qua quá trình lấy mẫu, điều đó có thể dẫn đến phương sai lớn trong lợi nhuận và gradient. Dùng hàm lợi thế thay cho lợi nhuận thô giải quyết vấn đề này. Hàm lợi thế là hiệu giữa lợi nhuận thực tế và lợi nhuận kỳ vọng (tức hàm giá trị). Các phương pháp actor-critic là một lớp thuật toán. Khi critic được hiện thực bằng hàm lợi thế (cách tiếp cận phổ biến nhất), nó còn được gọi là Advantage actor-critic (A2C). 

Tối ưu Chính sách Lân cận (PPO)

Trong các môi trường phức tạp, các phương pháp actor-critic như A2C là chưa đủ để kiểm soát phương sai trong lợi nhuận và gradient. Trong những trường hợp như vậy, việc hạn chế nhân tạo mức độ thay đổi của chính sách ở mỗi vòng lặp sẽ hữu ích. Điều này buộc chính sách đã cập nhật (sau khi leo dốc gradient) nằm trong vùng lân cận của chính sách cũ. 

Các phương pháp như Tối ưu Chính sách Lân cận thực hiện hai điều chỉnh đối với gradient chính sách:

  • Dùng hàm lợi thế. Thông thường, hàm lợi thế này dùng hàm giá trị làm baseline. Ở điểm này, chúng tương tự phương pháp A2C. 
  • Hạn chế mức độ thay đổi tham số chính sách trong mỗi vòng lặp. Điều này được thực hiện bằng một hàm mục tiêu thay thế có cắt ngưỡng (clipped surrogate objective). Thuật toán chỉ định một khoảng mà trong đó tỉ lệ của chính sách mới so với chính sách cũ phải nằm. Khi tỉ lệ này (sau cập nhật gradient) vượt quá các giá trị định trước, nó sẽ được cắt để nằm trong khoảng đó. 

Như vậy, PPO cải thiện đáng kể so với gradient chính sách thuần, giúp tăng tính ổn định trong môi trường phức tạp. Hàm mục tiêu có cắt ngưỡng ngăn các phương sai lớn trong lợi nhuận và gradient làm mất ổn định các cập nhật chính sách. Để đạt cân bằng giữa khám phá và khai thác, cũng có thể điều chỉnh PPO để sử dụng điều chuẩn entropy. Việc này được thực hiện bằng cách thêm một hạng tử entropy (một tham số tỉ lệ nhân với entropy của chính sách) vào hàm mục tiêu. 

Những tiến bộ gần đây

Gradient chính sách là một trong những phương pháp sớm nhất dùng để giải các bài toán RL. Sau khi GPU nhanh ra đời, nhiều cách tiếp cận mới đã được đề xuất để áp dụng các kỹ thuật ML hiện đại vào gradient chính sách. 

Tăng cường Gradient cho Học tăng cường 

Những năm gần đây, đã có tiến bộ trong việc áp dụng các phương pháp như gradient boosting cho các thuật toán RL. Gradient boosting kết hợp dự đoán từ nhiều mô hình yếu để tạo thành một mô hình mạnh. Cách tiếp cận này được gọi là Gradient-Boosted Reinforcement Learning (GBRL). GBRL là một gói Python tương tự XGBoost triển khai các kỹ thuật này cho thuật toán RL.

Học tăng cường Chuyển giao 

Học chuyển giao (TL) là kỹ thuật trong đó kiến thức mà một mô hình thu nhận được được áp dụng để cải thiện hiệu năng của mô hình khác. Học chuyển giao hữu ích vì việc huấn luyện mô hình ML từ đầu rất tốn kém. Các cách tiếp cận TL đã được dùng với gradient chính sách để cải thiện hiệu năng mô hình RL. Cách tiếp cận này được gọi là Học tăng cường Chuyển giao (TRL). 

Kết luận

Gradient chính sách là một trong những cách tiếp cận nền tảng nhất để giải các bài toán RL.

 Trong bài viết này, chúng tôi đã trình bày các nguyên lý đầu tiên của gradient chính sách và chỉ ra cách suy ra định lý gradient chính sách. Chúng tôi cũng minh họa cách triển khai một thuật toán dựa trên gradient đơn giản bằng PyTorch trong môi trường Gymnasium. Cuối cùng, chúng tôi bàn về các thách thức thực tiễn và những mở rộng phổ biến của thuật toán gradient chính sách cơ bản.

Nếu bạn muốn đào sâu hiểu biết về học tăng cường và học sâu với PyTorch, hãy xem các khóa học này:

Arun Nanda

Tác giả

Arun Nanda

Arun là cựu nhà sáng lập startup, yêu thích xây dựng những điều mới mẻ. Hiện tại, anh đang khám phá các nền tảng kỹ thuật và toán học của Trí tuệ Nhân tạo. Anh thích chia sẻ những gì mình học được, vì thế anh viết về chúng.

Bên cạnh DataCamp, bạn có thể đọc các bài viết của anh trên Medium, Airbyte và Vultr.

Chủ đề

Liên quan