再探强化学习

主要记录一下自己仔细学习 RL 时的感悟。记录一下防止遗忘


Q-learning 和 DQN 都是基于值函数的(如 VQ 函数),而策略梯度(policy gradient)则是基于策略的。后者显式的训练一个策略,对这个策略使用梯度下降等方法。
actor-critic 本质上是对 policy gradient 的改进。核心是在训练策略(即 actor)的同时也训练一个评价这个策略的 critic。在 policy gradient 中,我们是将当前 actor 下的 trajectory 计算出来之后(倒序)求出 loss,即 γ 作为 discount factor 的加权和。进行梯度下降即可。而在 actor-critic 中,我们额外再训练一个 critic 作为衡量 actor 好坏的量度。critic 的 loss 可以设置为 r+γV(st+1)V(st),训练时,需要先将 γV(st+1) 中的 V detach 一下,不更新。
在 actor-critic 中,由于 critic 的选择不同会产生许多不同的方法。其一般更新形式如下:
image
其中,ψt 可以有不同的选法。如 Q、V、A 等。
更新方式也有不同。
image


DQN 算法:本质上是求一个值函数 Q(s,a) 并依据这个函数来进行决策。这个函数可以通过 gradient descent 求,loss 值就是 r+γmaxaQ(s,a)Q(s,a),假设 ssa 操作之后的后继。可以通过学习的方法来求出 Q 函数。每次训练的数据 (s,a,s,r) 是从 replay buffer 取出的
决策的时候,服从 ϵ-贪婪策略,即在 s 的状态下,有 ϵ 的概率随机,有 1ϵ 的概率直接选择 argmax。
很明显可以看到,策略的选择是依据值函数(QV 等)来进行的,因此是 value-based 的。


DQN 是 off-policy 的,因为有回放池的存在(replay buffer),每次 st 在 DQN 中找到Q 值最大的 action,并使用得到 (st,at,st+1,rt) 并存入 replay buffer 中,每次随机从 replay buffer 中抽出几个 (s,a) 对 Q-network 进行训练。


PPO 算法:也是基于策略(policy based)的 on policy 的算法,是对 TRPO 的改进。在传统的 TRPO 中,优化目标为:image
PPO 将这个限制条件写入了优化目标中。可以利用两种方法:PPO-惩罚和 PPO-截断来实现这个条件。其核心是利用优势函数 A(s,a) 来判断当前行为的概率是应该上升还是下降。
其中 A(s,a) 的定义:初始为 rt+γV(st+1)V(st)(TD 的时序残差值),后来经计算发现可以利用类似 TD+MC 的方式得到
image
这里,δt 表示 TD 在 t 时刻的时序残差(rt+γV(st+1)V(st)
,这样结合了 TD 和 MC 的优点。其中,λ 也是一个超参数,代表越往后的步骤的影响有多大。
在 PPO 中,还有一种操作叫做剪切,表示就算 A 很大,这一步对策略 π 的影响也应有限,在 ϵ 的范围内。即:
image
image
接着再分开训练 actor 和 critic 即可。


policy gradient 算法(基础版本的,叫做 reinforce 算法):输出一个策略即为输出 action 的分布,按照这个分布 sample 决策。设策略为 πθ 定义目标函数为 reward 的期望值 J(θ)
经过推导,J 的梯度与下式有关:
image
直观理解,Q 越大,那么策略中这个决策的概率就应该越大(来获得更高的期望值)。
按照这个梯度来 gradient ascent 即可。


actor-critic 相当于是 policy gradient 的改进。在原始的 policy gradient(reinforce)中,J 的求解依赖于 Q(s,a),通常采用蒙特卡洛等方法求出。在 actor-critic 中,我们发现 image
因此对新的 J 进行更新。
image
在训练时,训练了两个网络:actor 和 critic。在 DQN 中,相当于只训练了 critic(即 Q-network),通过 ϵ-greedy 的方式来进行决策(相当于没有训练 actor)。在 reinforce 中,只训练了 actor,critic 通过蒙特卡洛方法进行估测。
利用 actor-critic 框架,critic 依旧是 Q-network(具体 ψt 可以是 Q、V、A、时序残差 等),此外还训练了 actor 网络(如一个两层的网络,最后一层再取个 softmax 得到概率)。训练时,critic 网络就和普通 DQN 类似,用 TD 更新或者 DDQN 更新。而 actor 网络的更新就是拿概率的梯度和 ψt 计算(进行梯度上升/下降)。
image
image
(其中,states 的大小应为 batch×state_dim,action 大小为 batch×action_dim


DDPG:是一种确定性(deterministic)的 RL 方法。在 PPO,朴素的 actor-critic 等算法中,策略 π 是一个分布,每次 policy net(actor)的 take action 函数实际上是 sample 出符合对应 π 分布的结果。这是具有随机性的。与之相对的是确定性做法,即每次返回的是一个确定性的策略。
具体是如何做的呢?和 DQN 有点像。在 DQN 中,我们又新建了一个 target Q network Q^,来让 Q(st,at) 拟合 r+γmaxaQ^(st+1,a)。在 DDPG 中,我们使用学习到的确定性策略 μ(s) 来取代 maxa。此外,由于当前的确定性策略和从 replay buffer 中取出的 {st,at,st+1,rt} 所对应的策略不一定一样,因此 actor 也需要一个对应的延迟更新的 target actor。共计 4 个。
更新时,critic 和之前一样取 Q(st,at)Q(st+1,μ(st+1)) 的 MSE。actor 的更新借助公式,为 Q(st+1,μ(st+1)) 的值直接求平均再取梯度。
image
target actor 和 critic 采取软更新。


学习一下 sinkhorn distance 的由来。
有个 d×d 的矩阵 Pi,j,其中对每行求和是 ri,对每列求和是 cj,且 ri=cj=1(因此能将这个过程看成 r,c 两个概率分布)。此外,Pi,ji 送到 j 也是有代价的,这个代价就是 Mi,j,可以理解为“距离”,因为 optimal transport 也是从距离衍生出来的。M 需要满足的条件就是 Mi,i=0Mi,jMi,k+Mk,j。也就是说,答案即为 i,jPi,jMi,j
这里,Pi,j 被称为 transportation plan
解决原始的 optimal transport 是困难的,可以进行适当的简化。
定义熵为 h(P)=i,jPi,jlogPi,j
对原问题适当简化后:
image
将 KL 散度进一步简化,得到实际上需要最大化 h(P)
则原式i,jPi,jMi,j1λh(P),这个问题是可以利用 sinkhorn 理论快速计算的。


实例化:利用 yaml 中的数据传入 __init__ 函数中进行初始化

posted @   SkyRainWind  阅读(48)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示