强化学习方法
# Deep Reinforcement Learning
1|0Introduction
机器学习的最终目标是学习一个function用于我们的tasks,强化学习是机器学习的一个分支,去深度学习不同,强化学习的训练机制是要与环境交互,并且是以一个孩子的身份从自己以往的经验去学习。
以上是我们的强化学习学习图,Policy是我们要学习的function with parameter,用表示,我们的输入是observation , 以及输出 action ,其中action作用于环境中会有一个函数判断我们的reward 。对于我们的每一组实验,我们在不同时间段有不同的观测和动作,其中我们定义一组实验(游戏)为trajectory ,对于,我们可以定义其概率
并且,对于每一组 ,我们定义最终的Reward ,定义其均值
所以整个学习的目标找到最佳的
那么现在问题就变成了我们怎么去优化得到最佳的
2|0Policy Gradient
我们根据的梯度优化模型参数
之后我们通过 去优化参数
2|1Add a Baseline
如果当 总是是正的,由于我们计算的是用采样的,由于某些行为被采样的概率是很小的,然后 又是正的,所以会导致容易采样到的action的概率越大,所以我们要加一个baseline或者理解为一个bias,我们在优化的时候使用这个方法
2|2Assign Suitable Credit
由于上式中,在相同的中的每一个action中都有相同的 ,这并非是公平的,因为其实每一个action的好坏其实是不同,而且一个动作的收益只能从后面的结果中才能体现出来,并且随着时间戳越长,的权重应该是越小的,所以我们做出如下改变
并且,我们把上式的 称为 Advantage Function,用于评价我们下,相较于其他行为action更好的的程度
3|0Proximal Policy Optimization
Importance Sampling
由于如果当我们对p(x)并不了解的时候,我们可以使用另一个分布去模拟,如下证明
我们在使用分布去计算 均值的时候,需要乘上
但是分布和不能差太多,因为这样做出的模拟其实是有弊端的,我们考虑两个分布的方差
我们使用Importance Sampling的思路用于我们的训练Policy的过程,我们先介绍On-policy和Off-policy的直观概念
- On-policy:意味着直接和环境做互动,从自己以往的经验中学习
- Off-policy:表示让别人和环境做互动,从别人的行为中学习
那么使用Off-policy时,我们使用,去收集数据。当被更新时,我们可以多次使用样本数据,使用的方法就是使用 去训练,使用如下的函数,并且使用之前提到的梯度函数
使用了之前提到的Policy Gradient,使用了条件概率优化,但是由于$\frac{p_\theta\left(s_t\right)}{p_{\theta^{\prime}}\left(s_t\right)} (4)$
那么,我们根据 去优化的方法的目标函数如下
同样的,我们要保证 和 差距不能太大所以我们要使用PPO方法,我们使用的目标函数如下
除了PPO之外,我们还有一个限制 的方法去优化,TRPO(Trust Region Policy Optimization),公式如下:
我们写出PPO算法如下:
- 初始化 作为模型参数
- 使用 去环境进行交互,并收集数据,并且计算
- 优化通过 off-policy做gradient ascent
然而在实际训练时,是超参数,所以我们要通过实际情况去调节
- 如果,增大 ,如果 ,减小
由于上述算法,我们还需要计算 KL散度,这个过程可以使用PPO2进行化简
4|0Q-Learning
Q-learning 和之前提到的训练policy的策略不同,它训练的是一个critic,批评家。critic的作用是去评判一个action的好坏,也就是给出actor ,critic给出 (代表了在状态 下,累计的reward的预期值),也就是说critic评价是actor,首先 是一个网络,那么我们接下来介绍怎么得到
4|1Monte-Carlo(MC)based approach
MC方法就是计算累计reward的方法,需要在episode结束后计算,我们要让模型去拟合
4|2Temporal-difference (TD)approach
由于我们使用的MC方法要将游戏结束后,我们才能得到我们的累计reward,但是如果有个游戏特别长的话,MC方法是不合适的,所以可以使用TD方法,它基于的公式是
4|3MC v.s. TD
由于MC的方法需要拟合的 是比较大的reward,而TD需要拟合的小的每一步的reward,所以会导致MC的方法会产生较大的variance,这会导致过拟合。但是TD的方法的准确率较低,目前的话比较常用的依旧是TD的方法
4|4Other
计算 ,计算对于 policy ,在当前状态 下给出action 后的累计奖励预期值
以上我们说的 是用来评估 的好坏,但是接下来我们要说的是运用学习出来的去训练一个更好的 ,我们给出以下结论: 如果对于一个 ,我们学习到了其critic ,那么我们可以找到更好的
4|5Q-Learning
我们承接之前所说的,我们要用我们训练出来的 critic 去学习一个更好的 ,定义以上提到的更好,我们给出下列表示
证明: 比更好的,即证
根据上式,我们从 推导到
4|6Target Network
固定下面的去得到我们的target ,我们训练上面模型 的参数,经过训练多次之后把固定的网络的参数更新,进行重新训练,要注意的是,上下两个模型的输出是不一样的
4|7Exploration
由于我们使用Q函数去决定采取的行为时,我们的选择策略是 ,这并不利于数据采样,我们总是会选择我们觉得会好的行为,但是实际上可能会有 比起我们认为的最好的最佳
有两个方法解决这个问题
- Epsilon Greedy
我们采取action依据这个公式 ,
上面的 会随着时间变小,这个是非常符合直观理解的,因为最开始我们跟倾向于让模型选择一些其他结果,在训练一段时间后在选择自己认为的最好的结果,这是符合经验积累的过程
- Boltzmann Exploration
使用上述概率,去使用最好的action,为什么这种方法会work呢,因为在训练的初期,我们的函数对于一种state采取的action的结果倾向于相同的,所以使用上式相当于使这种发布更为平均,使在训练早期呈现出一种随机采样的结果
4|8Replay Buffer
重复使用交互样本,将交互样本存进Buffer中,这有点Off-policy的味道,因为交互完的样本用于模型学习之后,后面还会用于模型学习,这就是新的模型学习旧的模型的样本,是学习它人的经验。这会让我们的学习样本更diverse,并且在一定程度上减小模型训练的时间消耗,因为训练模型用的时间大部分是在与环境的交互中
4|9Typical Q-Learning Algorithm
- 初始化
- 收集训练材料
- 模型拟合训练材料
- 更新目标 后迭代 2-4操作
4|10Continuous Actions
我们上述提到的action是离散的,也就是说他是有限值去收集的训练材料,但是如果我们的action是连续的,比如说射击角度这样的值得话,我们无法穷举所有得action,首先我们回到最初得假设,我们使用函数得目的是为了得到满足
我们先给出几个比较容易思考的到的解决方案
- Approximate Sampling
我们不需要去找到确定的,使得满足最大的奖励,我们可以通过采样多组实验,从中选择最大的去执行,这样的可能是近似于最大的行为,当时这会增大计算量,并且不一定能找到好的
- Optimization
我们将看作是一个我们要训练的参数,使用优化算法比如梯度上升去找到最好的去最大化,但是每一次找一个还要调用优化的方法去训练,这无疑是非常耗时的行为
基于上面两个方法的不好的地方,我们设计出第三种解决方法
我们通过专门设计的结构,得到了三个值,分别是向量,矩阵和标量,这里有个假设很重要,我们得出的是正定的。我们让得出的三个数做交互,与action做运算。需要注意的是,我们的三个值是根据状态得出的,我们最大化下面的
由于我们要最大化,由于是正定的,所以我们我们就要最小化,那么最小化的方法就是,使,这样我们就找到的最佳的
5|0Actor-Critic (A3C)
我们回到之前提到的Policy Gradient的 表达式
我们将上式的定义为 ,它是通过模型和环境交互得来的,回顾Q-Learning中的两种函数
- 状态值函数 ,给定状态,在下的累计预期奖励
- 转台行为值函数,给定actor ,在状态下做出的行为,之后的累计预期奖励
由于我们在Policy Gradient中要计算Advantage Function,由于的值代表的含义也是目前行为的奖励值,那么一种很natural的想法就是把我们的通过Q-Learning中的函数去计算,而的值作为一种基线可以用来代替
所以我们的Advantage Function就变为了,那么此时我们要预测两个网络,由于实际上实际上是一种期望值,
由于我们在实际过程中,我们是不计算这种均值的,改为下列式子
于是我们可以把最开始训练两个网络的Advantage Function变为下式
这样我们就只用训练一个网络,但是我们也因此引入了一个随机值 ,但是我们可以在每一步都得出相应的值
5|1Advantage Actor-Critic
在训练模型的过程中,和的参数可以共享,并且使用输出熵作为regularization,可以让不同的actor尝试不同的action
5|2Asynchronous
5|3Pathwise Derivative Policy Gradient
使用actor和critic结合的方法,直接训练actor和critic
原来的将s输入进然后得到,将这个和再重新输入进,算法解释如下
- 初始化 两个函数,actor ,和目标
- 收集交互样本 ,储存进buffer中
- 使用前面的交互样本出 拟合 和 ,通过几组交互数据更新参数,更新的参数去
- ,迭代2-4步
6|0Sparse Reward
当我们使用强化学习去训练网络时,在外面训练初期,模型的能力是很低的,这导致获得奖励可能是十分稀少的,那么Sparse Reward的情况下,如何训练我们的模型。
6|1Reward Shaping
通过人工设计reward,来调整这个issue,这是很合理的一件事情。比如射击游戏中,原本是击杀敌人能够得分,但是由于在训练初期,机器做到这种这个行为是很困难的。但是我们可以设计一些其他的reward来平衡,比如说开枪reward,存活之类的reward。
6|2Curiosity
增加模型的好奇心,让模型敢于去冒险
可以发现我们重新有训练了两个网络,网络1的作用是接收到和之后输出我们预测的,如果和的差别很大,那么我们输出一个新的reward很大。也就是说我们的新的reward和根据网络一的预测有关,如果网络一越不能预测出那个结果,那么奖励越大。那么网络二的作用是什么呢,这个是由和的拟合网络,通过输入和,来预测。网络二的训练和Feature Ext有关,或者说Feature Ext的作用就是用来过滤掉那些无关紧要的带来的冒险reward。
6|3Curriculum Learning
上面提到一开始我们的模型能力去做我们的task时,其能力最开始是不够的。那么就像我们上课一样,如果课程太难,那么我们先打好基础从简单开始。Curriculum Learning就是让模型从简单的任务还是学起,逐渐增加难度和挑战。但是机器设计课程也是需要技巧的,有一种常用的方法是Reverse Curriculum Generation,关于这个方法需要搜索一下相关资料
6|4Hierarchical RL
通过设计层级关系,上层下达任务给下层网络,如果下层执行不了,那么上层就会收到惩罚,这个就让上层指定的task是让下层能够学习的。那么强化学习用这个方法也是为了让模型能够从简单的task坐起,并且简单的task具体由上层模型来做。
__EOF__

本文链接:https://www.cnblogs.com/ykzhou/p/16727889.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下