再探强化学习
主要记录一下自己仔细学习 RL 时的感悟。记录一下防止遗忘
Q-learning 和 DQN 都是基于值函数的(如 和 函数),而策略梯度(policy gradient)则是基于策略的。后者显式的训练一个策略,对这个策略使用梯度下降等方法。
actor-critic 本质上是对 policy gradient 的改进。核心是在训练策略(即 actor)的同时也训练一个评价这个策略的 critic。在 policy gradient 中,我们是将当前 actor 下的 trajectory 计算出来之后(倒序)求出 loss,即 作为 discount factor 的加权和。进行梯度下降即可。而在 actor-critic 中,我们额外再训练一个 critic 作为衡量 actor 好坏的量度。critic 的 loss 可以设置为 ,训练时,需要先将 中的 detach 一下,不更新。
在 actor-critic 中,由于 critic 的选择不同会产生许多不同的方法。其一般更新形式如下:
其中, 可以有不同的选法。如 Q、V、A 等。
更新方式也有不同。
DQN 算法:本质上是求一个值函数 并依据这个函数来进行决策。这个函数可以通过 gradient descent 求,loss 值就是 ,假设 是 在 操作之后的后继。可以通过学习的方法来求出 函数。每次训练的数据 是从 replay buffer 取出的
决策的时候,服从 -贪婪策略,即在 的状态下,有 的概率随机,有 的概率直接选择 argmax。
很明显可以看到,策略的选择是依据值函数( 等)来进行的,因此是 value-based 的。
DQN 是 off-policy 的,因为有回放池的存在(replay buffer),每次 在 DQN 中找到 值最大的 action,并使用得到 并存入 replay buffer 中,每次随机从 replay buffer 中抽出几个 对 Q-network 进行训练。
PPO 算法:也是基于策略(policy based)的 on policy 的算法,是对 TRPO 的改进。在传统的 TRPO 中,优化目标为:
PPO 将这个限制条件写入了优化目标中。可以利用两种方法:PPO-惩罚和 PPO-截断来实现这个条件。其核心是利用优势函数 来判断当前行为的概率是应该上升还是下降。
其中 的定义:初始为 (TD 的时序残差值),后来经计算发现可以利用类似 TD+MC 的方式得到
这里, 表示 TD 在 时刻的时序残差()
,这样结合了 TD 和 MC 的优点。其中, 也是一个超参数,代表越往后的步骤的影响有多大。
在 PPO 中,还有一种操作叫做剪切,表示就算 很大,这一步对策略 的影响也应有限,在 的范围内。即:
接着再分开训练 actor 和 critic 即可。
policy gradient 算法(基础版本的,叫做 reinforce 算法):输出一个策略即为输出 action 的分布,按照这个分布 sample 决策。设策略为 定义目标函数为 reward 的期望值 。
经过推导, 的梯度与下式有关:
直观理解, 越大,那么策略中这个决策的概率就应该越大(来获得更高的期望值)。
按照这个梯度来 gradient ascent 即可。
actor-critic 相当于是 policy gradient 的改进。在原始的 policy gradient(reinforce)中, 的求解依赖于 ,通常采用蒙特卡洛等方法求出。在 actor-critic 中,我们发现
因此对新的 进行更新。
在训练时,训练了两个网络:actor 和 critic。在 DQN 中,相当于只训练了 critic(即 Q-network),通过 -greedy 的方式来进行决策(相当于没有训练 actor)。在 reinforce 中,只训练了 actor,critic 通过蒙特卡洛方法进行估测。
利用 actor-critic 框架,critic 依旧是 Q-network(具体 可以是 Q、V、A、时序残差 等),此外还训练了 actor 网络(如一个两层的网络,最后一层再取个 softmax 得到概率)。训练时,critic 网络就和普通 DQN 类似,用 TD 更新或者 DDQN 更新。而 actor 网络的更新就是拿概率的梯度和 计算(进行梯度上升/下降)。
(其中,states 的大小应为 ,action 大小为 )
DDPG:是一种确定性(deterministic)的 RL 方法。在 PPO,朴素的 actor-critic 等算法中,策略 是一个分布,每次 policy net(actor)的 take action 函数实际上是 sample 出符合对应 分布的结果。这是具有随机性的。与之相对的是确定性做法,即每次返回的是一个确定性的策略。
具体是如何做的呢?和 DQN 有点像。在 DQN 中,我们又新建了一个 target Q network ,来让 拟合 。在 DDPG 中,我们使用学习到的确定性策略 来取代 。此外,由于当前的确定性策略和从 replay buffer 中取出的 所对应的策略不一定一样,因此 actor 也需要一个对应的延迟更新的 target actor。共计 4 个。
更新时,critic 和之前一样取 和 的 MSE。actor 的更新借助公式,为 的值直接求平均再取梯度。
target actor 和 critic 采取软更新。
学习一下 sinkhorn distance 的由来。
有个 的矩阵 ,其中对每行求和是 ,对每列求和是 ,且 (因此能将这个过程看成 两个概率分布)。此外, 将 送到 也是有代价的,这个代价就是 ,可以理解为“距离”,因为 optimal transport 也是从距离衍生出来的。 需要满足的条件就是 且 。也就是说,答案即为
这里, 被称为 transportation plan
解决原始的 optimal transport 是困难的,可以进行适当的简化。
定义熵为 。
对原问题适当简化后:
将 KL 散度进一步简化,得到实际上需要最大化
则原式,这个问题是可以利用 sinkhorn 理论快速计算的。
实例化:利用 yaml 中的数据传入 __init__
函数中进行初始化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示