跳转至

强化学习

🤖 实践代码 可以参考“动手学强化学习”

引言


强化学习最关键的两个概念,就是状态+动作。其他的什么策略、价值函数、奖励函数等等,都是基于这俩概念引申出来的。

先说说状态,状态分为环境的状态智能体的状态。这俩不一定等价。如果等价,则说明环境是完全可观测的,如果不等价,则说明是部分可观测的

再说动作,动作分为离散动作连续动作,具体显而易见不解释。

然后就是状态和动作引申出来的一些概念,包括策略、价值函数、模型

  • 策略:

  • 随机性策略:输入状态,输出采取某个动作的概率

  • 确定性策略:输入状态,输出下一步最有可能的动作

  • 价值函数(对未来奖励的预测):

  • π函数:对于给定策略,将所有状态映射都映射为一个价值。(比如一个网格迷宫,状态是位置,那么每个位置都有一个值,就是价值)

  • Q函数:对于给定策略,将当前状态和当前动作映射为一个值,

  • 模型:

  • 状态转移概率:输入当前状态和动作,输出下一个状态的概率。

  • 奖励函数:输入当前状态和动作,输出一个奖励值。

最后就是一些分类,包括基于价值和基于策略的智能体,有模型智能体和无模型智能体。一般机器人抓取操作等强化学习,会采用基于策略的无模型智能体。

其他关键词:探索、利用、学习、规划

马尔科夫决策过程


马尔科夫过程、马尔科夫奖励过程、马尔科夫决策过程有所区别。

马尔科夫过程:下一个时刻状态只于当前状态和转移概率有关

马尔科夫奖励过程:马尔科夫链+奖励函数,利用贝尔曼方程,求解当前状态的价值函数。求解方式有蒙特卡洛采用、时序查分、迭代求解法等。贝尔曼方程如下所示:

\[ V(s)=R(s)+\gamma\sum_{s'\in S}p(s'|s)V(s') \]

马尔科夫决策过程:马尔科夫奖励过程+决策。引入了Q函数。贝尔曼方程升级为贝尔曼期望方程。求解需要依赖于备份图。

预测与控制:预测是已知马尔科夫决策过程+策略,预测价值函数,控制是已知马尔科夫决策过程,求解最优价值函数和最优控制策略

  • 预测:对应策略评估,不停迭代执行贝尔曼期望方程,然后得到价值函数。常用的表格型免模型预测有蒙特卡洛法、动态规划、时序差分法

  • 控制:如果采取策略迭代,则使用的就是贝尔曼期望方程。如果是价值迭代,使用的就是贝尔曼最优方程。

基于策略的算法


一般强化学习在LLM或机器人里面应用,都是属于基于策略的算法,本质是先给定一个策略,然后不断优化他使得目标函数最大。

优化策略有如下几种方式:

策略梯度

策略梯度本质上就是用神经网络去学习策略(\(p_\theta (a_t^n | s_t^n)\)中的\(\theta\)),而学习过程就是用下面的公式去更新\(\theta\)

核心更新公式如下所示,注意,每次采样N组T时间步的(s,a)对,然后用于更新一次参数。

\[ \nabla \bar{R}_\theta = \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^n) \nabla \log p_\theta (a_t^n | s_t^n) \]

训练的时候,目标函数实际上就是,在分类模型最大化似然函数的基础上,加一个\(R(\tau^n)\) 的权重。

梯度更新公式优化:

  • 添加基线:实际上就是把上面公式的奖励减一个b,使得奖励有负有正。

  • 动作加权与奖励折扣:动作加权实际上就是给每个动作乘以不同权重,然后奖励折扣就是时间越久动作奖励越少。更新后的公式如下:

  • \[ \nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} \left( \sum_{t'=t}^{T_n} \gamma^{t'-t} r_{t'}^n - b \right) \nabla \log p_\theta (a_t^n | s_t^n) \quad (4.20) \]
  • 其中\(\left( \sum_{t'=t}^{T_n} \gamma^{t'-t} r_{t'}^n - b \right)\)就可以紧凑表达为函数\(A^\theta(s_t,a_t)\),通常是用一个叫critic的网络估计出来。

对于梯度更新方式而言,有蒙特卡洛时序差分两种,蒙特卡洛每回合更新一次,时序差分每步更新一次。

近端策略优化(PPO)

之前PG(同策略)方式,采样完一轮数据之后,才能更新一次\(\theta\),效率极低。因此,PPO采用异策略方式,一轮数据可以更新多次参数,

异策略梯度的梯度公式:

\[ \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} A^{\theta'}(s_t, a_t) \nabla \log p_\theta(a_t|s_t) \right] \]

异策略梯度的目标函数(相较于同策略多了一个概率分布比例项):

\[ J^{\theta'}(\theta) = \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} A^{\theta'}(s_t, a_t) \right] \]

PPO:通过对目标函数加入KL散度,约束\(\theta\)\(\theta'\)的相似程度,即不让这俩分布差距太多,更新后的目标函数如下所示:

\[ J_{\text{PPO}}^{\theta'}(\theta) = J^{\theta'}(\theta) - \beta \text{KL} (\theta, \theta') \]

PPO的两个变种包括近端策略优化惩罚近端策略优化裁剪。近端策略优化惩罚是通过设置最大最小KL散度,来自动调整系数\(\beta\)。近端策略优化裁剪是不要KL散度,将目标函数修改为如下形式:

\[ J_{\text{PPO2}}^{\theta^k}(\theta) \approx \sum_{(s_t, a_t)} \min \left( \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} A^{\theta^k}(s_t, a_t), \right. \\ \left. \text{clip} \left( \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}, 1-\varepsilon, 1+\varepsilon \right) A^{\theta^k}(s_t, a_t) \right) \quad \]

深度Q网络


本质是一种基于价值的方法,包括状态价值函数(V函数)和动作价值函数(Q函数)两种。

基于策略和基于价值的本质区别在于,基于策略的方式对于一个状态s,会输出所有动作a的概率分布,然后选择概率最大的a。而基于价值的方式,对于一个状态s和动作a,会输出未来期望奖励Q,对所有a计算一个Q,就可以得到当前s状态下最优的动作。

相关改进方式:

  • 目标网络
  • 探索
  • 经验回放

几种进阶变体:

  • 双深度Q网络:用两个Q网络,解决奖励函数高估问题
  • 竞争深度Q网络:不直接输出Q值,而是分两条路径,分别输出V(s)和A(s,a)
  • 优先经验回放
  • N步骤更新策略,平衡蒙特卡洛和时序差分
  • 噪声网络:不给动作加噪声,而是给网络参数加噪声
  • 分布式Q函数:输出所有动作的Q值

连续式动作处理:

  • 采样动作
  • 梯度上升
  • 修改网络架构,是Q网络输出均值、标准差等等
  • 采用演员-评论员

演员-评论员算法


演员输入状态输出动作,评论员输入状态输出评估分数。

相关算法:

  • 优势Actor-critic(A2C)
  • 异步Actor-critic(A3C):是同策略算法,只不过平行探索加速效率
  • 路径延伸策略梯度:是DQN解决连续动作的一种方式
  • 深度确定性策略梯度(DDPG):解决连续动作的一种方式,结合经验回放、演员和评论员均有目标网络等
  • 双延迟DDPG(TD3):引入截断、演员-评论员延迟更新梯度、目标策略平滑等方式,优化DDPG

稀疏奖励


结合状态和动作的特性,设计稀疏奖励。

相关知识:

  • 好奇心:引入内在好奇心模块,结合特征提取,来鼓励机器人探索
  • 课程学习:从易到难学习
  • 分层学习:上层粗略决策,下层精细决策

模仿学习


机器人通过模仿人类行为,进行学习。包括行为克隆(BC)逆强化学习(IRL)两种。

行为克隆:本质是一个回归问题,让策略跟专家一致,使用数据集聚合策略增强其泛化性(处理专家没遇见的情况)

逆强化学习:首先通过专家学习一个奖励函数,再用这个奖励函数指导智能体学习到最优策略。本质是通过学习专家奖励函数,得到专家策略的隐式表达,然后将该隐式表达传递给要学习的智能体,使得智能体具备专家水平同时保有泛化性。

第三人称视角学习:演示视频是第三人称的,但是机器人自己操作时是第一人称。可以转换为域适应(类似cv里从一个数据域迁移到另一个数据域)问题,采用领域对抗训练来解决。

一些概念区分

on-policy vs off-policy

区分在线策略和离线策略,要看算法更新权重所使用的数据,是否是当前策略所采集的策略。一般而言,带有经验回放的算法如DQN、DDPG就是异策略算法,而没有经验回放的如PG算法是同策略。而目前为提升数据利用率,通常采用异策略,特别是机器人领域的RL经常采用带有经验回放的PPO算法。

online-rl vs offline-rl

区分在线RL和离线RL,区别是agent是否与env有交互。离线RL中,最终要训练的agent不会跟环境交互,而是用其他agent与环境交互的数据来训练。而在线RL则agent可以与环境交互获取数据来训练。