去听了 hzxu 老师的 DRL 课,感觉终于听懂了,记录一下…
- 0 我们想做什么
- 1 三个数学 trick
- 2 对单个 transition 的 policy gradient
- 3 对整个 trajectory 的 policy gradient
- 4 REINFORCE 算法
相关链接:
- RL 基础 | Value Iteration 的收敛性证明
- RL 基础 | Policy Iteration 的收敛性证明
0 我们想做什么
我们想最大化的东西: (J(theta) = mathbb E_tau[R(tau)]) ,其中 R 是轨迹的 reward 求和(或 discount 求和)。
我们希望,期望下的轨迹的 reward 求和(reward discounted 求和)最大。
1 三个数学 trick
①: (nabla_thetalog z = frac1znabla_theta z)
②: (mathbb E_{xsim p(x)}[f(x)] = int p(x)f(x)dx)
③: (a/b = [acdo服务器托管网t p(x)] / [bcdot p(x)])
2 对单个 transition 的 policy gradient
nabla_thetamathbb{E}_{asim p(a|s;theta)}[r(a)]& =nabla_thetasum_ap(amid s;theta)r(a)
&=sum_ar(a)nabla_theta p(amid s;theta)
&=sum_ar(a)p(amid s;theta)frac{nabla_theta p(amid s;theta)}{p(amid s;theta)}
&服务器托管网amp;=sum_a^ar(a)p(amid s;theta)nabla_thetalog p(amid s;theta)
&=mathbb{E}_{asim p(a|s;theta)}[r(a)nabla_thetalog p(amid s;theta)]
end{aligned}
]
其中,
第一行 把单个 (s,a) 的 reward 期望写为 (a|s)r(s,a) 的形式;
第二行 认为 r(a) 是不可微分的,去微分 (a|s);
第三行 在分数线上下 同时塞了一个 (a|s) (即 p(a|s;) );
第四行 因为 d log z = dz/z,原式变成 p(a|s)(nabla)p(a|s) 了;
第五行 把 p(a|s) 塞回去,变成了 期望下的 r(s,a) (nabla)log (a|s)。
结论:如果想最大化期望下的 r(s,a),可以把 r(s,a) 放 (nabla) 外面,去对 log (a|s) 求梯度。
3 对整个 trajectory 的 policy gradient
先计算 trajectory 的概率:
]
然后,对单个 transition,我们有
]
对于整个 trajectory 的 total reward 的梯度,应用跟 2 相同的方法(分数线上下同乘 p(|theta) ),可以得到
]
现在,让我们来看 (nabla_thetalog p(taumidtheta)) 。
log p(taumidtheta)& =logmu(s_0)+logprod_{t=0}^{T-1}[pi(a_tmid s_t,theta)cdot p(s_{t+1},r_tmid s_t,a_t)]
&=logmu(s_0)+sum_{t=0}^{T-1}log[pi(a_tmid s_t,theta)cdot p(s_{t+1},r_tmid s_t,a_t)]
&=logmu(s_0)+sum_{t=0}^{T-1}[logpi(a_tmid s_t,theta)+log p(s_{t+1},r_tmid s_t,a_t)]
end{aligned}
]
其中,
第一行 是把 trajectory 的概率展开;
第二行 第三行 都是把 log(AB) 变成 logA + logB;
然后发现,只有中间这一项 (sum_{t=0}^{T-1}logpi(a_tmid s_t,theta)) 带 ,因此,前后两项都不用跟 求梯度了。
由此,我们得到:
]
结论:如果想最大化期望下的 R(),可以把 R() 放 (nabla) 外面,去求 (nabla) log (a|s) ,即 log [action 概率] 的梯度。
4 REINFORCE 算法
- 使用策略 (a|s;),生成一个 trajectory:((s_0, a_0, r_1, …, s_{T-1}, a_{T-1}, r_T)) ;
- 对每个时间步 t,计算回报:(R_t = sum_{k=t+1}^{T} ^{k-t-1} r_k)
- 更新策略参数:( = + ^t R_t ∇_ log (a_t|s_t;))
(算法是 GPT 生成的,看起来好像没问题)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
1、编译 cd jvm-package包,然后进行编译mvn install -P ‘libxgboost,java’ -Ds服务器托管网kipTests 2、报错信息: 3、解决方法 A、在jvm-packages包下找到xgboost4j中找到pom.xm…