欢迎光临散文网 会员登陆 & 注册

深度强化学习之策略梯度(Policy Gradient)

2021-05-01 14:14 作者:刹那-Ksana-  | 我要投稿

前言

本文算是对于策略梯度做一个简单介绍,因为敲公式巨麻烦,所以也不想写得太长,如果以后有机会(当我说这句话的时候,就代表大概率没有)做相关的视频的话,会更加详细的说明其中的细节。

注意:本文中会出现很多英文术语。

一、什么是策略梯度

首先,策略梯度是一种所谓的policy based learning,即我们的对象是我们的策略(policy),而非某个value function(虽然我们可能会间接地用到value function)。

在这种policy based learning下,我们用θ参数化(parameterize)我们的策略%CF%80,换言之,我们希望用某些参数θ来控制我们的%CF%80。比方说——我们可以用一个神经网络来参数化我们的%CF%80。我们给模型输入某个state s,然后模型输出对应的action a

确立模型之后,我们还需要一个衡量标准,即我们的objective,这个标准可以是我们的Reward的期望值(expected reward):

J(%CE%B8)%3DE_%7B%CF%84~%CF%80%7D%20%5BR(%CF%84)%5D%3DE_%7B%CF%84~%CF%80%7D%20%5B%E2%88%91_%7Bt%3D0%7D%5ETR_t%20%5D

这里的%CF%84%3D(s_0%2Ca_0%2Cr_0%20)%2C(s_1%2Ca_1%2Cr_1%20)%E2%80%A6(s_t%2Ca_t%2Cr_t)代表我们的路径。

这个objective的意义很明确——我们希望我们的策略π能够给出高return.

当我们明确了我们的objective以后,自然我们就用gradient ascent来更新我们的参数θ,让我们的参数向高处爬:

%CE%B8_%7Bt%2B1%7D%3D%CE%B8_t%2B%CE%B1%E2%88%87J(%CE%B8)

但是问题是,如果我们想要用gradient ascent,我们首先需要计算我们的%E2%88%87J(%CE%B8).

我们知道期望的计算是E(x)%3D%E2%88%91_%7Bi%3D0%7D%5Ekx_i%20p_i,这里的x_i对应我们的R_tp_i对应我们的p(%CF%84%E2%94%82%CF%80_%CE%B8%20)%3Dp_0%20%E2%88%8F_%7Bt%3D0%7D%5ET%5Bp(s_%7Bt%2B1%7D%20%7Cs_t%2Ca_t)%CF%80(a_t%20%7Cs_t)%5D.

在将%E2%88%87J(%CE%B8)变形之后(这里省略过程),我们得到:

%E2%88%87J(%CE%B8)%3DE_%CF%80%20%5BQ%5E%CF%80%20(s%2Ca)%20%E2%88%87_%CE%B8%20%20log%E2%81%A1(%CF%80_%CE%B8%20(a%7Cs))%20%5D

*公式在不同的地方可能会有不同的版本。

二、REINFORCE

REINFORCE(所有字母都是大写)是用total reward G_t%3D%E2%88%91_%7Bi%3D0%7D%5EtR_i%20%20%20(这里先不考虑γ)来估测Q%5E%CF%80%20(s%2Ca)

%E2%88%87J(%CE%B8)%3DE_%CF%80%20%5BQ%5E%CF%80%20(s%2Ca)%20%E2%88%87_%CE%B8%20%20log%E2%81%A1(%CF%80_%CE%B8%20(a%7Cs))%5D%E2%89%85E_%CF%80%20%5B%E2%88%91_%7Bt%3D0%7D%5ETR_t%20%20%E2%88%91_%7Bt'%3D0%7D%5Et%E2%88%87_%CE%B8%20%20log%E2%81%A1(%CF%80_%CE%B8%20(a_%7Bt'%7D%7Cs_%7Bt'%7D))%5D

将这个转变为我们的objective:

L%3D-%E2%88%91_%7Bt%3D0%7DR_t%20%20%20log%E2%81%A1(%CF%80_%CE%B8%20(a_t%E2%94%82s_t%20))

(注意这里有一个负号)

三、Actor-Critic

相比REINFOECE,actor-critic有两个参数化的模型——Actor和Critic,Actor是策略%CF%80_%CE%B8,Critic是一个用w参数化的value function V_w%5E%CF%80%20(s),你可以用另一个神经网络来代表这个V_w%5E%CF%80%20(s),这个神经网络我们输入state s,输出我们的state value V.

所以在训练的时候,我们既更新我们的θ,也更新我们的w:

w_%7Bt%2B1%7D%E2%86%90w_t%2B%CE%B7%E2%88%87_w%20J(w)

传统的Actor-Critic用TD Learning来确立objective:

J(w)%3D1%2F2%20%5BR_%7Bt%2B1%7D%2B%CE%B3V_w%5E%CF%80%20(s_%7Bt%2B1%7D)-V_w%5E%CF%80%20(s_t%20)%5D%5E2

Actor-Critic下面衍生出了很多个版本,如A2C,A3C,还有Unity用户熟悉的SAC和PPO。

后记

策略梯度的方法和我们平时常见的supervised learning形式不太一样,所以刚接触会有点不适应。多看几下就习惯了(?)

参考资料:

Richard S. Sutton, Andrew G Barto - Reinforcement Learning: An Introduction

Zihan Ding, Yanhua Huang, Hang Yuan, and Hao Dong - Introduction to Reinforcement Learning

THE END.

深度强化学习之策略梯度(Policy Gradient)的评论 (共 条)

分享到微博请遵守国家法律