Intuition
通过 gradient ascent 让 policy 下 trajectory 的期望 return 变得尽可能的大
计算
期望 return
一个 policy 下的 trajectory 的期望 return,可以认为是 policy 下所有可能的 trajectory 的 return,再用trajectory 出现的概率加权求和,如下式
E
τ
∼
π
θ
[
R
(
τ
)
]
=
∑
τ
R
(
τ
)
p
π
θ
(
τ
)
\underset{\tau \sim \pi_{\theta}}E [R(\tau)] = \underset{\tau}\sum R(\tau)p_{\pi_{\theta}}(\tau)
τ∼πθE[R(τ)]=τ∑R(τ)pπθ(τ)
其中 p π θ ( τ ) p_{\pi_{\theta}}(\tau) pπθ(τ) 表示轨迹 τ \tau τ 出现的概率, ∑ τ \underset{\tau}\sum τ∑表示穷举所有可能的轨迹
通过梯度上升来增大期望 return
梯度计算
∇ ∑ τ R ( τ ) p π θ ( τ ) = ∑ τ R ( τ ) ∇ p π θ ( τ ) = ∑ τ R ( τ ) p π θ ( τ ) ∇ p π θ ( τ ) p π θ ( τ ) = ∑ τ R ( τ ) p π θ ( τ ) ∇ log ( p π θ ( τ ) ) ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ log ( p π θ ( τ n ) ) = 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ log ( p π θ ( a t n ∣ s t n ) ) \nabla \underset{\tau}\sum R(\tau)p_{\pi_{\theta}}(\tau) \\ = \underset{\tau}\sum R(\tau)\nabla p_{\pi_{\theta}}(\tau) \\ = \underset{\tau}\sum R(\tau) p_{\pi_{\theta}}(\tau) \frac{\nabla p_{\pi_{\theta}}(\tau)}{p_{\pi_{\theta}}(\tau)} \\ = \underset{\tau}\sum R(\tau) p_{\pi_{\theta}}(\tau) \nabla \log(p_{\pi_{\theta}}(\tau))\\ \approx \frac{1}{N}\sum\limits_{n=1}^{N}R(\tau^n) \nabla \log(p_{\pi_{\theta}}(\tau^n))\\ =\frac{1}{N}\sum\limits_{n=1}^{N}\sum\limits_{t=1}^{T_n}R(\tau^n) \nabla \log(p_{\pi_{\theta}}(a_t^n|s_t^n)) ∇τ∑R(τ)pπθ(τ)=τ∑R(τ)∇pπθ(τ)=τ∑R(τ)pπθ(τ)pπθ(τ)∇pπθ(τ)=τ∑R(τ)pπθ(τ)∇log(pπθ(τ))≈N1n=1∑NR(τn)∇log(pπθ(τn))=N1n=1∑Nt=1∑TnR(τn)∇log(pπθ(atn∣stn))
近似
实际中,trajectory的概率分布不容易得到
所以我们可以采样尽可能多的 trajectory,然后近似认为穷举了所有可能的 trajectory
再用采样得到的各种 trajectory 的数量来得到概率
每个(s, a) pair 对应的权重是整条 trajectory 的权重
而不是这个 pair 的权重
也就是说 trajectory 得到的 reward 越多,对参数的更新贡献越大
policy参数在 p π θ ( a ∣ s ) p_{\pi_{\theta}}(a|s) pπθ(a∣s)里
policy是一个输入 state,输出各个 action 概率的模型
Add a Baseline
如果不加 baseline
如果所有 trajectory 的 return 都是正的
- 理论上
随着训练的进行,所有的 action 的输出值都会变大,但是因为有些 state action pair 对应的 return 更大,所以对应的 action 增大的幅度会更大,所以还是好的 action 的得分会相对的变大 - 实际上
求解的公式是在用采样来近似求期望
采样有可能会有误差,有些(s, a) pair可能没有被 sample 到,或者被 sample 到的很少
但是如果只要出现在 sample 里的(s, a) pair 的得分就会变大,没有被 sample 到的(s, a) pair 自然就会相对变小
而没有被 sample 到的(s, a) pair 不一定不好,它只是因为随机的没有被 sample 到,所以就得分就变小了
所以希望 return 不要总是正的
让每条 trajectory 的 return 减去一个 baseline 数值,比 baseline 大的才是正的 return,比 baseline 小的成了负的 return
加了 baseline 的梯度
1 N ∑ n = 1 N ∑ t = 1 T n ( R ( τ n ) − b ) ∇ log ( p π θ ( a t n ∣ s t n ) ) \frac{1}{N}\sum\limits_{n=1}^{N}\sum\limits_{t=1}^{T_n}(R(\tau^n) - b) \nabla \log(p_{\pi_{\theta}}(a_t^n|s_t^n)) N1n=1∑Nt=1∑Tn(R(τn)−b)∇log(pπθ(atn∣stn))
baseline 值怎么确定?
可以是所有 trajectory 的reward 的均值,也可以是其他的
Assign Suitable Credit
Intuition
在原有的计算梯度的公式里,一条 trajectory 里所有的(s, a) pair 都会乘以整条 trajectory 的reward,一条 trajectory的所有的 (s, a) pair 被强调的程度是一样的
但是一条 trajectory 里不是所有 action 都是好的,我们希望好的 action 被强调的更大,不好的 action 被强调的更小
我们希望同一条 trajectory 里的不同(s, a)pair 乘以不同的权重
如何给每个 (s, a) pair 计算不同的权重
- 可以以每条 trajectory 中从 (s, a) pair 开始以后的 return 作为权重
(s, a) 出现之前的 reward 和 (s, a) 关系不大 - 可以加入 discount factor
让离 (s, a) pair 远的 reward 进行衰减,从而强调近期的 reward
然后梯度变成了(替换了
R
(
τ
n
)
R(\tau^n)
R(τn)):
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
∑
t
′
=
t
T
n
γ
t
′
−
t
r
t
′
n
−
b
)
∇
log
(
p
π
θ
(
a
t
n
∣
s
t
n
)
)
\frac{1}{N}\sum\limits_{n=1}^{N}\sum\limits_{t=1}^{T_n}(\sum\limits_{t'=t}^{T_n} \gamma^{t'-t} r_{t'}^{n} - b) \nabla \log(p_{\pi_{\theta}}(a_t^n|s_t^n))
N1n=1∑Nt=1∑Tn(t′=t∑Tnγt′−trt′n−b)∇log(pπθ(atn∣stn))
特点
on-policy
采样只能使用一次。每次 sample 到一些 trajectory 并用来更新参数以后,这些 sample 就丢掉了,需要重新采样才能再用来更新参数