Back to Home

RL - Phương pháp Actor Critic

Trong các bài viết trước, chúng ta đã đi qua những viên gạch nền móng đầu tiên của Reinforcement Learning. Từ việc định hình bài toán bằng phương trình Bellman, chứng minh sự hội tụ bằng ánh xạ co (Contraction Mapping)bài 1, cho đến việc hiện thực hóa lý thuyết thành thuật toán cụ thể như Q-LearningDQN dựa trên nền tảng Học sai biệt thời gian (Temporal Difference Learning) bài 2.

Tất cả các phương pháp đó đều có một điểm chung: Chúng thuộc trường phái Value-based (Dựa trên giá trị). Tư tưởng cốt lõi của Value-based là cố gắng học một hàm giá trị thật chuẩn xác (như hàm Q(s,a)Q(s, a)), rồi từ đó suy ra hành động một cách gián tiếp bằng chiến lược tham lam (Greedy) — nghĩa là trạng thái nào có điểm cao nhất thì ta chọn.

Một hướng tiếp khác thay vì tiếp cận trên value-based đã ra đời: Policy-based mà đại diện là thuật toán Policy Gradient bài 3. Mặc dù Policy Gradient giải quyết được bài toán hành động liên tục và chính sách ngẫu nhiên, nó lại mang một điểm yếu chí mạng khác: Phương sai quá lớn (High Variance), khiến mô hình học rất chậm và không ổn định.

Hôm nay chúng ta cùng nhau tìm hiểu một phương pháp mới là Actor-Critic. Đây là một sự kết hợp hài hòa và tinh tế giữa hai trường phái tưởng chừng như đối lập: Value-basedPolicy-based.

Review Policy Gradient

Trong Policy Gradient, mục tiêu cốt lõi của chúng ta là tìm bộ tham số chính sách θ\theta sao cho tối đa hóa phần thưởng tích lũy kỳ vọng. Hàm mục tiêu được định nghĩa là:

J(θ)=Eπθ[Gt]J(\theta) = \mathbb{E}_{\pi_\theta} [G_t]

Trong đó Gt=k=0γkrt+kG_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k} là tổng phần thưởng chiết khấu thu được từ thời điểm tt. Để tối ưu hóa hàm mục tiêu này, Định lý Gradient chính sách (Policy Gradient Theorem) chỉ ra hướng cập nhật tăng gradient cho θ\theta như sau:

θJ(θ)=Eπθ[θlnπθ(atst)Gt]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} [\nabla_\theta \ln \pi_\theta(a_t|s_t) G_t]

Khái niệm Baseline b(s)b(s) và Chứng minh tính không chệch (Unbiasedness)

Việc sử dụng trực tiếp giá trị phần thưởng thực tế GtG_t dẫn đến phương sai (variance) rất lớn trong việc ước lượng gradient. Nhằm giảm bớt phương sai, chúng ta trừ đi một hàm baseline b(st)b(s_t) chỉ phụ thuộc vào trạng thái hiện tại sts_t mà không phụ thuộc vào hành động. Gradient sửa đổi có dạng:

θJ(θ)=Eπθ[θlnπθ(atst)(Gtb(st))]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} [\nabla_\theta \ln \pi_\theta(a_t|s_t) (G_t - b(s_t))]

Chứng minh chi tiết toán học: (Mình đã chứng minh ở bài trước rồi, tuy nhiên mình vẫn sẽ chứng minh lại ở đây để đọc cho tiện) Việc trừ đi baseline b(st)b(s_t) hoàn toàn không làm thay đổi hướng góc của gradient (không gây chệch). Chúng ta chứng minh giá trị kỳ vọng của thành phần chứa baseline bằng 0:

Eπθ[θlnπθ(atst)b(st)]=0\mathbb{E}_{\pi_\theta} [\nabla_\theta \ln \pi_\theta(a_t|s_t) b(s_t)] = 0
  • Bước 1: Khai triển kỳ vọng theo phân phối trạng thái dπ(s)d_\pi(s) và phân phối hành động πθ(as)\pi_\theta(a|s):

    LHS=sSdπ(s)aAπθ(as)θlnπθ(as)b(s)\text{LHS} = \sum_{s \in \mathcal{S}} d_\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a|s) \cdot \nabla_\theta \ln \pi_\theta(a|s) \cdot b(s)
  • Bước 2: Đưa Baseline ra ngoàib(s)b(s) độc lập với hành động aa:

    LHS=sSdπ(s)b(s)[aAπθ(as)θlnπθ(as)]\text{LHS} = \sum_{s \in \mathcal{S}} d_\pi(s) b(s) \left[ \sum_{a \in \mathcal{A}} \pi_\theta(a|s) \nabla_\theta \ln \pi_\theta(a|s) \right]
  • Bước 3: Sử dụng mẹo Đạo hàm Log (Log-Derivative Trick) với công thức lnf(x)=f(x)f(x)\nabla \ln f(x) = \frac{\nabla f(x)}{f(x)}:

    πθ(as)θlnπθ(as)=πθ(as)θπθ(as)πθ(as)=θπθ(as)\pi_\theta(a|s) \nabla_\theta \ln \pi_\theta(a|s) = \pi_\theta(a|s) \frac{\nabla_\theta \pi_\theta(a|s)}{\pi_\theta(a|s)} = \nabla_\theta \pi_\theta(a|s)

    Biểu thức trong dấu ngoặc vuông trở thành:

    aAθπθ(as)\sum_{a \in \mathcal{A}} \nabla_\theta \pi_\theta(a|s)
  • Bước 4: Tráo đổi tổng và gradient. Vì tổng xác suất của tất cả các hành động trong một trạng thái luôn bằng 1 (aπθ(as)=1\sum_{a} \pi_\theta(a|s) = 1):

    aAθπθ(as)=θ(aAπθ(as))=θ(1)=0\sum_{a \in \mathcal{A}} \nabla_\theta \pi_\theta(a|s) = \nabla_\theta \left( \sum_{a \in \mathcal{A}} \pi_\theta(a|s) \right) = \nabla_\theta (1) = 0
  • Kết luận: Do thành phần bên trong bằng 0, toàn bộ kỳ vọng của số hạng baseline bằng 0:

    sSdπ(s)b(s)0=0\sum_{s \in \mathcal{S}} d_\pi(s) b(s) \cdot 0 = 0

    Từ đó khẳng định việc thêm baseline giúp giảm phương sai hiệu quả mà không làm sai lệch kết quả tối ưu.

Hàm Advantage (Hàm Lợi Thế) và Ý tưởng từ TD-Learning

phương pháp Monte Carlo thuần túy sử dụng toàn bộ chuỗi phần thưởng GtG_t có nhược điểm lớn:

  • Phương sai cao: Do tích lũy sự ngẫu nhiên từ mọi hành động và trạng thái tiếp theo trong tương lai.

  • Ràng buộc theo tập (Episodic): Chỉ có thể cập nhật trọng số sau khi một tập (episode) đã kết thúc hoàn toàn.

  • Kém hiệu quả: Không áp dụng mượt mà cho các tác vụ liên tục (continuous) hoặc có chu kỳ dài.

Giải pháp cải tiến là chuyển dịch sang Học sai biệt thời gian (Temporal Difference - TD Learning) thông qua 3 định nghĩa hàm giá trị:

  • Hàm Giá trị trạng thái Vπ(s)V^\pi(s): Kỳ vọng phần thưởng khi bắt đầu từ trạng thái ss.

  • Hàm Giá trị hành động Qπ(s,a)Q^\pi(s, a): Kỳ vọng phần thưởng khi đứng ở trạng thái ss và thực hiện hành động aa.

  • Hàm Lợi thế Aπ(s,a)A^\pi(s, a): Đo lường mức độ hiệu quả của một hành động cụ thể so với mức trung bình của trạng thái đó:

    Aπ(s,a)=Qπ(s,a)Vπ(s)A^\pi(s, a) = Q^\pi(s, a) - V^\pi(s)

Khi chọn hàm baseline tối ưu b(s)=Vπ(s)b(s) = V^\pi(s), thành phần (Gtb(st))(G_t - b(s_t)) có thể thay thế bằng hàm Lợi thế Aπ(st,at)A^\pi(s_t, a_t). Hàm mục tiêu cập nhật chính sách mới trở thành:

θJ(θ)=Eπθ[θlnπθ(atst)Aπ(st,at)]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} [\nabla_\theta \ln \pi_\theta(a_t|s_t) A^\pi(s_t, a_t)]

Về mặt lý thuyết, để xác định được giá trị lợi thế tại mỗi bước, hệ thống bắt buộc phải ước lượng hoặc tính toán đồng thời hai đại lượng riêng biệt: Giá trị của cặp trạng thái - hành động Q(s,a)Q(s, a) và Giá trị trung bình của trạng thái V(s)V(s). Tuy nhiên, việc phải duy trì hai bộ ước lượng song song—bù lại—sẽ làm phức tạp hóa bài toán tính toán (cho dù ta lưu trữ dạng bảng (Tabular) hay xấp xỉ bằng hàm số/mạng thần kinh). Để tối ưu hóa cấu trúc này, chúng ta tận dụng bản chất đệ quy của môi trường thông qua Phương trình Bellman 1 bước.

Chứng minh toán học triệt tiêu hàm QQ để giảm số lượng đại lượng cần ước lượng

Theo định nghĩa, hàm giá trị hành động Qπ(st,at)Q^\pi(s_t, a_t) chính là kỳ vọng của phần thưởng tức thời cộng với giá trị chiết khấu của trạng thái kế tiếp:

Qπ(st,at)=E[rt+γVπ(st+1)st,at]Q^\pi(s_t, a_t) = \mathbb{E} [r_t + \gamma V^\pi(s_{t+1}) | s_t, a_t]

Bằng cách sử dụng giá trị mẫu thực tế tại mỗi bước để xấp xỉ (stochastic approximation), ta có thể biểu diễn QπQ^\pi gián tiếp thông qua VπV^\pi:

Qπ(st,at)rt+γVπ(st+1)Q^\pi(s_t, a_t) \approx r_t + \gamma V^\pi(s_{t+1})

Khi thế biểu thức xấp xỉ này vào công thức gốc của hàm Lợi thế Aπ(st,at)A^\pi(s_t, a_t), một phép biến đổi toán học xuất hiện:

Aπ(st,at)=Qπ(st,at)Vπ(st)A^\pi(s_t, a_t) = Q^\pi(s_t, a_t) - V^\pi(s_t)
    Aπ(st,at)(rt+γVπ(st+1))Vπ(st)\implies A^\pi(s_t, a_t) \approx \left( r_t + \gamma V^\pi(s_{t+1}) \right) - V^\pi(s_t)

Biểu thức rút gọn này chính là Sai số sai biệt thời gian (TD Error), ký hiệu là δt\delta_t:

δt=rt+γVπ(st+1)Vπ(st)\delta_t = r_t + \gamma V^\pi(s_{t+1}) - V^\pi(s_t)

Nhờ phép biến đổi toán học này, hàm Lợi thế Aπ(st,at)A^\pi(s_t, a_t) giờ đây đã được quy đổi hoàn toàn về một hàm duy nhất là Hàm giá trị trạng thái V(s)V(s) thay vì phải tìm cách tính toán/ước lượng cả hai hàm số Q(s,a)Q(s,a)V(s)V(s).

Thuật toán Actor-Critic

Bây giờ, bài toán được tinh giản chỉ còn cấu thành từ Chính sách chọn hành động (π\pi)Hàm giá trị trạng thái (VV)—mô hình Actor-Critic chính thức được khai sinh như một sự phân rã nhiệm vụ tự nhiên và tường minh. Mô hình này chia hệ thống học tăng cường làm hai thành phần chính tương tác đồng thời với nhau:

  • Actor (Bộ hành động / "Vận động viên"):

    • Bản chất: Chính là đại diện cho chính sách πθ(as)\pi_\theta(a|s) được tham số hóa bởi bộ trọng số θ\theta. Thông thường, chúng ta dùng một neural network để biểu diễn cho Actor với các giá trị θ\theta chính là bộ trọng số của mạng.

    • Nhiệm vụ: Nhìn vào trạng thái hiện tại sts_t của môi trường để đưa ra quyết định chọn hành động ata_t tối ưu nhất nhằm thu về nhiều phần thưởng.

  • Critic (Bộ phê bình / "Huấn luyện viên"):

    • Bản chất: Chính là bộ ước lượng cho hàm giá trị trạng thái V(s)V(s) mà ta vừa rút gọn được ở trên. Tùy theo độ phức tạp của bài toán, Critic có thể là một bảng tra cứu (Tabular VV-table) hoặc một hàm xấp xỉ phức tạp (như Neural Network Vϕ(s)V_\phi(s) với tham số ϕ\phi).

    • Nhiệm vụ: Critic không trực tiếp sinh ra hành động. Nó chỉ đóng vai trò là một người đánh giá nội tại, quan sát trạng thái sts_t, nhận phần thưởng thực tế rtr_t và trạng thái kế tiếp st+1s_{t+1} để tính toán ra thước đo TD Error (δt\delta_t).

Actor và Critic tạo thành một vòng lặp phản hồi khép kín:

  • Actor tương tác với môi trường để sinh ra dữ liệu mẫu.

  • Critic đứng sau quan sát dữ liệu mẫu đó, tính ra sai số δt\delta_t. Tín hiệu δt\delta_t này đóng vai trò như một "lời phê bình": Nếu δt>0\delta_t > 0, hành động Actor vừa chọn tốt hơn mong đợi; nếu δt<0\delta_t < 0, hành động đó tệ hơn mong đợi.

  • Tín hiệu δt\delta_t của Critic sẽ được gửi lại để làm kim chỉ nam điều chỉnh cho cả hai: giúp Actor nâng cao/hạ thấp xác suất chọn lại hành động đó, và giúp chính Critic tinh chỉnh khả năng dự đoán giá trị VV của mình ngày một chính xác hơn.

Trong thực tế, chúng ta dùng 2 mạng neural network để biểu diễn cho Actor và Critic và chúng ta sẽ huấn luyện 2 mạng này sao cho chúng có thể tự điểu chỉnh trọng số để làm cho agent ngày càng thông minh hơn.

Cập nhật cho Critic (ϕ\phi)

Mục tiêu toán học của mạng Critic là ước lượng giá trị Vϕ(s)V_\phi(s) sao cho càng ngày càng sát với giá trị thực tế của môi trường. Do đó, bài toán học của Critic bản chất là một bài toán Học có giám sát (Supervised Learning), với mục tiêu (Target) là giá trị Bootstrapping: yt=rt+γVϕ(st+1)y_t = r_t + \gamma V_\phi(s_{t+1}).

Hàm mất mát (Loss function) của Critic được định nghĩa bằng Bình phương sai số trung bình (MSE Loss):

L(ϕ)=12(ytVϕ(st))2=12(rt+γVϕ(st+1)Vϕ(st))2L(\phi) = \frac{1}{2} \left( y_t - V_\phi(s_t) \right)^2 = \frac{1}{2} \left( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \right)^2

Để tối thiểu hóa hàm mất mát này, chúng ta sử dụng phương pháp Hạ gradient (Gradient Descent). Khai triển đạo hàm của L(ϕ)L(\phi) theo bộ tham số ϕ\phi bằng quy tắc chuỗi (Chain Rule):

ϕL(ϕ)=122(rt+γVϕ(st+1)Vϕ(st))ϕ(Vϕ(st))=(rt+γVϕ(st+1)Vϕ(st))δtϕVϕ(st)=δtϕVϕ(st)\begin{align*} \nabla_\phi L(\phi) &= \frac{1}{2} \cdot 2 \cdot \left( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \right) \cdot \nabla_\phi \left( -V_\phi(s_t) \right)\\ &= -\underbrace{\left( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \right)}_{\delta_t} \cdot \nabla_\phi V_\phi(s_t) \\ &= -\delta_t \nabla_\phi V_\phi(s_t) \end{align*}

Lưu ý: Trong kỹ thuật Bootstrapping tiêu chuẩn (như Semi-gradient TD), khi tính đạo hàm đối với trạng thái hiện tại sts_t, thành phần mục tiêu yt=rt+γVϕ(st+1)y_t = r_t + \gamma V_\phi(s_{t+1}) được coi là hằng số cố định (nghĩa là ta không lan truyền ngược gradient qua st+1s_{t+1}).

Quy tắc cập nhật trọng số ϕ\phi với tốc độ học ηc\eta_c (learning rate của Critic) là:

ϕϕηcϕL(ϕ)    ϕϕ+ηcδtϕVϕ(st)\phi \leftarrow \phi - \eta_c \nabla_\phi L(\phi)\\ \implies \phi \leftarrow \phi + \eta_c \delta_t \nabla_\phi V_\phi(s_t)

Cập nhật cho Actor (θ\theta)

Khác với Critic, mạng Actor không đi giải bài toán giảm thiểu sai số dự đoán, mà nó hướng tới mục tiêu tối đa hóa hàm phần thưởng tích lũy kỳ vọng J(θ)J(\theta) đã được định nghĩa ban đầu. Do đó, chúng ta áp dụng phương pháp Tăng gradient (Gradient Ascent). Dựa trên định lý Gradient chính sách (Policy Gradient Theorem) kết hợp với việc thay thế hàm Lợi thế bằng sai số δt\delta_t toán học thu được từ Critic, hướng tăng gradient cho tham số θ\theta của Actor là:

θJ(θ)=Eπθ[θlnπθ(atst)δt]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} [\nabla_\theta \ln \pi_\theta(a_t|s_t) \delta_t]

Với mỗi mẫu dữ liệu thực tế thu được tại bước tt, quy tắc cập nhật trọng số θ\theta với tốc độ học ηa\eta_a (learning rate của Actor) là:

θθ+ηaδtθlnπθ(atst)\theta \leftarrow \theta + \eta_a \delta_t \nabla_\theta \ln \pi_\theta(a_t|s_t)

Ý nghĩa của sự phối hợp cập nhật

  • Nếu δt>0\delta_t > 0 (Khen thưởng): Hành động ata_t mang lại kết quả tốt hơn Critic mong đợi. Biểu thức cập nhật sẽ cộng thêm một lượng thuận chiều với θlnπθ(atst)\nabla_\theta \ln \pi_\theta(a_t|s_t), làm tăng xác suất Actor sẽ chọn lại hành động ata_t này tại trạng thái sts_t trong tương lai. Đồng thời, giá trị mục tiêu lớn hơn dự kiến sẽ khiến mạng Critic cập nhật để tăng ước lượng giá trị Vϕ(st)V_\phi(s_t) lên.

  • Nếu δt<0\delta_t < 0 (Phạt): Hành động ata_t tệ hơn dự kiến. Biểu thức cập nhật của Actor sẽ đổi dấu thành trừ, làm giảm xác suất chọn lại hành động này. Song song đó, Critic cũng nhận ra mình đã đánh giá quá cao trạng thái này và cập nhật để giảm ước lượng giá trị Vϕ(st)V_\phi(s_t) xuống.

Chi tiết thuật toán

Init Actor θ\theta and Critic ϕ\phi networks, with learning rates ηa<nc\eta_a \lt n_c
for each episode do
ssinit,i1s \leftarrow s_{init}, i \leftarrow 1
while ss not terminal do
sample aπθ(.s)a \sim \pi_\theta(.|s), observe r,sr,s'
// critic step
vnext(s is terminal)?0:Vϕ(s)v_{next} \leftarrow (s' \text{ is terminal})? 0: V_\phi(s')
δtr+γvnextVϕ(s)\delta_t \leftarrow r + \gamma v_{next} - V_\phi(s) // tính Advantage
ϕϕ+ηcδtϕVϕ(s)\phi \leftarrow \phi + \eta_c \delta_t \nabla_\phi V_\phi(s)// Minimize Mean Square Error
// actor step
θθ+ηaδtθlnπϕ(as)\theta \leftarrow \theta + \eta_a \delta_t \nabla_\theta \ln \pi_\phi(a|s) // Policy gradient
sss \leftarrow s'
end while
end for

Thảo luận mở rộng

Độ chệch và Cập nhật hai tốc độ (Bias & Two Time-Scale Convergence)

Việc thay thế GtG_t bằng mục tiêu TD giúp giảm mạnh phương sai nhưng lại đưa vào Độ chệch (Bias). Nguồn gốc của độ chệch đến từ:

  • Sai số xấp xỉ: VϕV_\phi chỉ là hàm xấp xỉ bằng mạng thần kinh chứ không phải hàm thực tế VπV^\pi.

  • Bootstrapping: Sử dụng một giá trị ước lượng của trạng thái kế tiếp để cập nhật cho trạng thái hiện tại ("dùng ước lượng để cập nhật ước lượng").

Để triệt tiêu độ chệch này và đảm bảo thuật toán hội tụ về nghiệm tối ưu, ta bắt buộc phải áp dụng cơ chế Cập nhật hai tốc độ (Two Time-Scale Update). Theo đó, mạng Critic phải học nhanh hơn đáng kể so với mạng Actor nhằm bám sát hàm giá trị thực tế nhanh nhất có thể:

ηactorηcritic    limηaηc=0\eta_{actor} \ll \eta_{critic} \implies \lim \frac{\eta_a}{\eta_c} = 0

Entropy Regularization

Trong giai đoạn đầu của quá trình huấn luyện, mạng Actor dễ rơi vào trạng thái hội tụ sớm (Premature Convergence). Tức là, nếu một vài hành động ngẫu nhiên ban đầu mang lại phần thưởng dương, Actor sẽ nhanh chóng tăng xác suất của các hành động đó lên mức tuyệt đối (1\approx 1). Điều này khiến phân phối chính sách bị "co cụm", triệt tiêu khả năng khám phá không gian môi trường (Exploration) và khiến tác nhân bị mắc kẹt tại các cực trị địa phương (Local Minima).

Để giải quyết tình trạng chính sách hội tụ sớm vào các cực trị địa phương (Premature Convergence) , ta thêm đại lượng Entropy Shannon H(πθ)H(\pi_\theta) vào hàm mục tiêu của Actor nhằm khuyến khích việc khám phá không gian môi trường. Tại một trạng thái ss, Entropy của phân phối chính sách πθ\pi_\theta được định nghĩa là:

H(πθ(st))=Eaπθ[lnπθ(ast)]=aAπθ(ast)lnπθ(ast)H(\pi_\theta(\cdot|s_t)) = \mathbb{E}_{a \sim \pi_\theta} [-\ln \pi_\theta(a|s_t)] = -\sum_{a \in \mathcal{A}} \pi_\theta(a|s_t) \ln \pi_\theta(a|s_t)

Hàm mục tiêu tổng thế (Total Objective Function) cần tối đa hóa lúc này trở thành:

Jtotal(θ)=JPG(θ)+βH(πθ(st))J_{\text{total}}(\theta) = J_{\text{PG}}(\theta) + \beta H(\pi_\theta(\cdot|s_t))

Trong đó, β0\beta \ge 0Hệ số Entropy (Entropy Coefficient) điều khiển sự cân bằng giữa Khám phá (Exploration) và Khai thác (Exploitation):

  • Nếu β\beta quá cao: Phân phối hành động tiệm cận về phân phối đều (Uniform Distribution), tác nhân hành động hỗn loạn và không thể hội tụ.

  • Nếu β\beta quá thấp hoặc bằng 0: Tác nhân dễ bị "lùi bước" vào các chiến thuật dưới mức tối ưu quá sớm.

Khai triển Gradient của Entropy theo tham số θ\theta:

Để áp dụng phương pháp tăng gradient, ta tính đạo hàm trực tiếp của thành phần Entropy bằng quy tắc đạo hàm tích (uv)=uv+uv(uv)' = u'v + uv':

θH(πθ(st))=θ(aAπθ(ast)lnπθ(ast))=aA[θπθ(ast)lnπθ(ast)+πθ(ast)θπθ(ast)πθ(ast)]=aAθπθ(ast)[lnπθ(ast)+1]\begin{align*} \nabla_\theta H(\pi_\theta(\cdot|s_t)) &= -\nabla_\theta \left( \sum_{a \in \mathcal{A}} \pi_\theta(a|s_t) \ln \pi_\theta(a|s_t) \right) \\ &= -\sum_{a \in \mathcal{A}} \left[ \nabla_\theta \pi_\theta(a|s_t) \cdot \ln \pi_\theta(a|s_t) + \pi_\theta(a|s_t) \cdot \frac{\nabla_\theta \pi_\theta(a|s_t)}{\pi_\theta(a|s_t)} \right] \\ &= -\sum_{a \in \mathcal{A}} \nabla_\theta \pi_\theta(a|s_t) \left[ \ln \pi_\theta(a|s_t) + 1 \right] \end{align*}

Sử dụng mẹo Đạo hàm Log ngược loại để đưa về dạng kỳ vọng lấy mẫu: θπθ(ast)=πθ(ast)θlnπθ(ast)\nabla_\theta \pi_\theta(a|s_t) = \pi_\theta(a|s_t) \nabla_\theta \ln \pi_\theta(a|s_t), ta được:

θH(πθ(st))=Eaπθ[θlnπθ(ast)(lnπθ(ast)+1)]\nabla_\theta H(\pi_\theta(\cdot|s_t)) = \mathbb{E}_{a \sim \pi_\theta} \left[ -\nabla_\theta \ln \pi_\theta(a|s_t) \left( \ln \pi_\theta(a|s_t) + 1 \right) \right]

Do đó, quy tắc cập nhật độ dốc cho Actor tại mỗi bước thời gian tt khi có thêm Entropy Regularization là:

θJtotal(θ)=θlnπθ(atst)δtβθlnπθ(atst)[lnπθ(atst)+1]=θlnπθ(atst)[δtβ(lnπθ(atst)+1)]\begin{align*} \nabla_\theta J_{\text{total}}(\theta) &= \nabla_\theta \ln \pi_\theta(a_t|s_t) \delta_t - \beta \nabla_\theta \ln \pi_\theta(a_t|s_t) \left[ \ln \pi_\theta(a_t|s_t) + 1 \right]\\ &= \nabla_\theta \ln \pi_\theta(a_t|s_t) \left[ \delta_t - \beta (\ln \pi_\theta(a_t|s_t) + 1) \right] \end{align*}

Từ TD(0) đến TD(n) và Ước lượng Lợi thế Tổng quát (GAE)

Mô hình Actor-Critic cơ bản sử dụng sai số TD 1 bước—gọi là TD(0):

δt=rt+γVϕ(st+1)Vϕ(st)\delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

Phương pháp này có phương sai cực thấp vì nó chỉ phụ thuộc vào một phần thưởng thực tế rtr_t. Tuy nhiên, nó có độ chệch (bias) rất cao vì mục tiêu cập nhật phụ thuộc hoàn toàn vào mức độ chính xác của hàm ước lượng Vϕ(st+1)V_\phi(s_{t+1}) tại thời điểm đó.

Để dung hòa mối quan hệ đánh đổi phương sai - độ chệch (Bias-Variance Trade-off), ta mở rộng không gian nhìn trước ra nn bước thời gian—gọi là TD(nn) Return. Mục tiêu phần thưởng tích lũy lúc này được viết dưới dạng:

Rt(n)=rt+γrt+1+γ2rt+2++γn1rt+n1+γnVϕ(st+n)R_t^{(n)} = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \dots + \gamma^{n-1} r_{t+n-1} + \gamma^n V_\phi(s_{t+n})

Hàm lợi thế nn-bước tương ứng sẽ là: At(n)=Rt(n)Vϕ(st)A_t^{(n)} = R_t^{(n)} - V_\phi(s_t).

Ước lượng Lợi thế Tổng quát (Generalized Advantage Estimation - GAE)

Thay vì cố định một con số nn cứng nhắc, thuật toán sử dụng giải pháp GAE bằng cách lấy trung bình trọng số hình học của tất cả các hàm lợi thế nn-bước, được điều phối qua một siêu tham số suy giảm λ[0,1]\lambda \in [0, 1]:

AtGAE=(1λ)n=1λn1At(n)A_t^{\text{GAE}} = (1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} A_t^{(n)}

Khi triển khai toán học khai triển chuỗi, một tính chất đệ quy cực kỳ đẹp đẽ xuất hiện thông qua việc xếp chồng các chuỗi sai số TD 1-bước (δt\delta_t):

AtGAE=δt+(γλ)δt+1+(γλ)2δt+2+=l=0(γλ)lδt+lA_t^{\text{GAE}} = \delta_t + (\gamma \lambda) \delta_{t+1} + (\gamma \lambda)^2 \delta_{t+2} + \dots = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}

Cơ chế Đệ quy ngược (Backward Recursion)

Nếu tính toán chuỗi tổng trên một cách tuần tiến từ thời điểm t=0t=0 trở đi, độ phức tạp tính toán sẽ là O(T2)\mathcal{O}(T^2) do phải duyệt lại tương lai tại mỗi bước. Để tối ưu hóa tài nguyên về mức tuyến tính O(T)\mathcal{O}(T), thuật toán triển khai cơ chế Đệ quy ngược (Backward Recursion) từ cuối một quỹ đạo dữ liệu (t=tmax1t = t_{\max} - 1) lộn ngược về thời điểm đầu (t=0t=0):

AtGAE=δt+(γλ)At+1GAEA_t^{\text{GAE}} = \delta_t + (\gamma \lambda) A_{t+1}^{\text{GAE}}

Với điều kiện biên tại thời điểm kết thúc quỹ đạo hoặc trạng thái terminal là AtmaxGAE=0A_{t_{\max}}^{\text{GAE}} = 0.

Thuật toán: Actor-Critic với Cập nhật Tích lũy (Batch A2C)

  • Khởi tạo: Bộ tham số mạng Actor θ\theta, bộ tham số mạng Critic ϕ\phi, các tốc độ học ηa,ηc\eta_a, \eta_c, hệ số entropy β\beta, hệ số chiết khấu γ\gamma, và hệ số GAE λ\lambda.

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

    • Bước 1: Thu thập trajectory (Forward Pass)

      • Đặt các biến tích lũy gradient về không: dθ0d\theta \leftarrow 0, dϕ0d\phi \leftarrow 0

      • Xóa bộ nhớ đệm lịch sử bước thời gian.

      • For t=0t = 0 to tmax1t_{\max} - 1 do:

        1. Thực thi hành động atπθ(st)a_t \sim \pi_\theta(\cdot|s_t)

        2. Nhận phần thưởng rtr_t và trạng thái tiếp theo st+1s_{t+1} từ môi trường.

        3. Lưu trữ dữ liệu bộ tuple {st,at,rt,st+1}\{s_t, a_t, r_t, s_{t+1}\} vào bộ đệm.

        4. Nếu gặp trạng thái kết thúc (terminal): Bẻ gãy vòng lặp thu thập.

    • Bước 2: Tính toán mục tiêu tương lai và Ước lượng GAE ngược (Backward Pass)

      • Khởi tạo giá trị bootstrap tại biên:

        R={0neˆˊstmax laˋ trạng thaˊi terminalVϕ(stmax)trường hợp ngược lạiR = \begin{cases} 0 & \text{nếu } s_{t_{\max}} \text{ là trạng thái terminal} \\ V_\phi(s_{t_{\max}}) & \text{trường hợp ngược lại} \end{cases}
      • Khởi tạo biến tích lũy lợi thế: AnextGAE0A_{\text{next}}^{\text{GAE}} \leftarrow 0

      • For t=tmax1t = t_{\max} - 1 down to 00 do:

        1. Cập nhật giá trị đích thực tế nn-bước: Rrt+γRR \leftarrow r_t + \gamma R

        2. Tính toán sai số TD 1-bước cục bộ: δt=rt+γVϕ(st+1)Vϕ(st)\delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

        3. Tính toán lợi thế GAE đệ quy ngược: AtGAE=δt+(γλ)AnextGAEA_t^{\text{GAE}} = \delta_t + (\gamma \lambda) A_{\text{next}}^{\text{GAE}}

        4. Gán nhãn giá trị kế tiếp cho bước sau: AnextGAEAtGAEA_{\text{next}}^{\text{GAE}} \leftarrow A_t^{\text{GAE}}

    • Bước 3: Tích lũy Gradients (Accumulating Gradients)

      • Cộng dồn các đạo hàm riêng qua từng bước thời gian trong Batch vào biến tích lũy tổng:

        dϕdϕ+ϕ[12(RVϕ(st))2]dθdθθ[lnπθ(atst)AtGAE]βθH(πθ(st))d\phi \leftarrow d\phi + \nabla_\phi \left[ \frac{1}{2} \left( R - V_\phi(s_t) \right)^2 \right] \\ d\theta \leftarrow d\theta - \nabla_\theta \left[ \ln \pi_\theta(a_t|s_t) A_t^{\text{GAE}} \right] - \beta \nabla_\theta H(\pi_\theta(\cdot|s_t))
    • Bước 4: Thực thi Cập nhật Tích lũy Toàn cục (Global Accumulated Update)

      • Sau khi kết thúc việc duyệt ngược và tích lũy qua toàn bộ Batch, bộ tham số của hai mạng thần kinh được tối ưu hóa đồng loạt theo quy tắc:

        ϕϕηcdϕθθ+ηadθ\phi \leftarrow \phi - \eta_c \cdot d\phi\\ \theta \leftarrow \theta + \eta_a \cdot d\theta
      • Ý nghĩa: Toàn bộ các hướng dịch chuyển của vector trọng số trên đồ thị lỗi đã được tối ưu hóa đồng bộ dựa trên thông tin tổng hòa của cả một chuỗi hành động trong quá khứ, giúp giảm tối đa hiện tượng nhiễu stochastic và tăng tốc độ hội tụ của mô hình.

Demo

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!