回顾

image.png|800

以上方法都是在更新价值函数,这些函数实际是保存到表格的数据|记录|词条|entry,对应不同状态下的价值;

表格的方式容易直观理解, 表格中相邻的状态,在更新时没有,他们是完全独立的,这会导致更新时的低效性 例如,迷宫中两个相邻的位置,当其中一个更新时,不会影响另一个更新,但是他们效果相近,或者说有联系,我们期望,这种联系(他们相邻)可以让他自动更新,这样可以提高效率 又例如,同一状态下,两个可选择的动作a 效果非常接近,这时候只会更新更好的动作的价值

本节解决的关键问题

  • 之前所有模型的做法都是基于创建一个查询表,在表中维护状态值函数 或状态-动作值函数

  • 当处理大规模马尔可夫决策过程(MDP)时,即:

    • 状态后者状态-动作空间非常大
    • 连续的状态或者动作空间
  • 是否仍然需要未每一个状态维护 或者为每个状态-动作对维护 ? 例如

    • 围棋博弈( 的状态空间)
    • 直升机,自动驾驶汽车(连续的状态空间)

主要内容

大规模马尔可夫巨测过程的解决方法

  • 对状态/动作进行离散化或分桶 (bucktization)
  • 构建参数化的值函数估计

对状态/动作进行离散

离散化连续马尔可夫决策过程

对于连续状态马尔可夫决策过程,我们可以对状态空间进行离散化

  • 例如,如果用 2 维连续值 表示状态,可以使用网格对状态空间进行切分从而转化为离散的状态值
  • 记离散的状态值为
  • 离散化的马尔可夫决策过程可以表示为: (\bar{S},A,\{P_{sa}\},\gamma,R)\tag{五元组}
  • 这样,就能使用前述的方法求解马尔可夫决策过程

image.png|300

对大型马尔可夫决策过程分桶

对于一个大型的离散状态马尔可夫决策过程,我们可以对状态值进一步分桶以进行采样聚合

  • 使用先验知识将相似的离散状态归类到一起
    • 例如,利用根据先验知识抽取出来的状态特征对状态进行聚类

image.png|300

这里可以理解为用聚类根据状态特征聚合,对数据做一个预处理,相当于给各个特征划分了不同的状态空间区域,这个空间区域肯定是更小的; 但是当维度比较多的时候,聚类出的桶的数量也会数量爆炸

分桶/离散化

优点

  • 操作简单直观
  • 高效
  • 在处理许多问题时能够达到较好的效果

缺点

  • 过于简单的表示价值函数
  • 可能为每个离散区间假设一个常数值
  • 维度灾难

image.png|800

如图左,对状态空间进行离散化,目标价值是左下到右上的直线,但是由于离散化,路线变成了斜着的折线

既然目标函数是一个直线,那我们可以直接建模一个线性函数,可能只需要两个参数(k, b)就可以把他表示出来 ,采用分桶的方式需要多个直线(如图右) 来建模

参数化值函数估计

构建参数化(可学习的)函数来近似值函数

  • 是近似函数的参数,可以通过强化学习进行更新
  • 参数化的方法将现有可见的状态泛化到没有见过的状态上

参数化的值函数优势在于,随着数据的增大,数据分布的改变,参数的量是完全不变,比如线性模型、神经网络,模型参数本身的维度 |参数量是不变的,只需要修改参数本身就可以了 ,在这种强化学习这种智能体不断学习过程当中, 数据分布一直再变化,数据量在扩大的场景下,非常适合,比较之下树模型、Boosting 的方法不适合,强化学习中很多时候使用的是参数化的函数方法

Boosting 方法随着与环境交互越来越多,这一类的模型会越来越大(因为数据是存到表格里的),此时他的数据相当于他的参数;或者环境交互的数据在不断地以分布的形式在变化的时候,需要舍弃更早的数据

值函数近似的主要形式

  • 一些函数近似
    • 一般的线性模型
    • 神经网络
    • 决策树
    • 最近邻
    • 傅里叶/小波基底
  • 可微函数
    • 一般的线性函数
    • 神经网络
  • 我们希望模型射和在非稳态的,非独立同分布的数据上训练
    • 因此参数化模型比树模型更适合

image.png|350

通常使用可微的函数来建模,这样可以通过梯度自动学习

基于随机梯度下降(SGD)的值函数近似

  • 目标:找到参数向量 最小化值函数近似值与真实值之间的均方误差
  • 误差减小的梯度方向
  • 单次采样进行随机梯度下降

这里我们需要关注的是 的取值,他是学习的目标,可以使用 MC 或者 TD 的方法来估计它的值 是模型的估计值,模型的输出值

特征化状态

用一个特征向量表示状态

以直升机控制问题为例

  • 3 D 位置
  • 3 D 速度(位置的变化量)
  • 3 D 加速度(速度的变化量)

价值函数近似算法

状态值函数近似

线性状态值函数近似

  • 用特征的线性组合表示价值函数
  • 目标函数是参数 的二次函数
  • 因而随机梯度下降能够收敛到全局最优解上

其中,,式 1 求导得 步长: 预测误差: 特征值: ,是状态空间的的特征向量

这里我们需要考虑目标值 需要填入什么值呢? 可以采用之前的方法 MC 或者TD如下

蒙特卡洛状态值函数近似

  • 我们使用 表示真实的目标价值函数
  • 在“训练数据”上运用监督学习对价值函数进行预测
\langle s_{1},g_{1}\rangle,\langle s_{2},g_{2}\rangle, \dots,\langle s_{T},\textcolor \right{g_{T}}\rangle
  • 对于每一个数据样本
  • 蒙特卡洛预测至少能收敛到一个局部最优解
    • 在价值函数为线性的情况下可以收敛到全局最优

蒙特卡洛方法可以使用 近似表示目标价值

时序差分状态值函数近似

  • 时序差分算法的目标 是真实目标价值 的有偏采样
  • 在“训练数据”上运用监督学习
  • 对于每个数据样本
  • 线性情况下时序差分学习(接近)收敛到全局最优解

使用 TD 表示

状态-动作值函数近似

  • 对动作-状态值函数进行近似
  • 最晓均方误差
  • 在单样本上进行随机梯度下降

线性状态-动作值函数近似

  • 用特征向量表示状态-动作对
  • 线性情况下,参数化后 Q 函数
  • 利用随机梯度下降更新

时序差分状态-动作值函数近似

  • 对于蒙特卡洛学习,目标是累积奖励
  • 对于时序差分学习,目标是

对于蒙特卡洛学习,需要整条轨迹 return

对于时序差分学习,如果是在线学习|同策略学习|SARAS,可以直接采样五元组进行学习;如果是离线学习|异策略学习|Q-learning,使用的是四元组,如果不使用重要性采样,需要在 状态下采样一个动作 ,使用 采样,即当前策略下的 Q 函数采样

image.png|500

  • 策略评估:近似策略评估
  • 策略改进: 贪心策略提升

这样的更新方式仍然是寻找策略提升点, 沿着策略提升点进行相关的策略更新的方式;再开始有一个 Q 函数的参数, 基于当前 Q 函数的参数可以有对策略做出 greedy| |softmax 的更新,都是遵循梯度提升定理的保证,当策略进行一定的更新之后,又可以按照当前策略更新当前的参数

为什么 更新一次不能到达

  1. 的建模方式对函数有一定假设,大概率不能够把真正的 Q 函数完全表达|包括真正的 Q 函数|只是近似
  2. 更新不需要一定要收敛,只需要更新一两步,让 Q 走到新的位置就可以 ;基于这种没有收敛的 Q 函数, 他只要有了相关的更新方向,在基于当前拟合出来的估计的 Q 函数做策略提升,也可以提升策略的性能

时序差分学习参数更新过程

  • 对于 ,时序差分学习的目标是
    • 状态值函数
- 动作-状态价值函数
  • 虽然 在时序差分学习的目标中出现,但是我们不需要计算目标函数的梯度,为什么?

中含有 ,训练的时候不需要对它计算梯度并反向传播 如果使用 pytorch 来写,自动求梯度的时候会对这一项自动求导,这里要注意,我们不需要对这一项求梯度,而是把他当成常数,把他当成数据里面的数据(虽然他是模型采样得到的,这里用它来代替真正的价值函数, 这里只是使用值函数的方式表示出来,应该把他当成真正的值函数) 同时这一项代表的是看到的未来的信息,我们是基于未来的信心更新当前的策略,而不是直接更新未来的状态 另一方面对这一项进行求梯度,会让模型学习不稳定性大幅度提升

案例分析

Deep Q-Network (DQN)

深度强化学习的第一篇论文,作者萨顿 直接输入连续的 4 帧的图片像素, 对每一个动作做出 Q 价值的估计,在原版的算法上 2/3 的情况能打败人类

image.png

  • 使用深度神经网络表示 Q 函数

image.png

使用深度神经网络好处在于让神经网络自动地去挖掘出相关的输入像素之间的这种关系, 他的问题在于他的计算的复杂度比较高,输入不再是状态-动作对,而是 s 本身,输出是可选动作的一个多向头

  • 第 i 轮迭代中更新的 Q-学习损失函数

目标 Q 值: 预测 Q 值:

  • 是第 轮迭代中将要更新的网络参数
    • 通过标准的反向传播算法进行更新
  • 是目标网络参数
    • 仅在 每更新 步后进行更新
  • :样本从经验池 D 中均匀采样
    • 这样可以避免在近期经验上过拟合

指的是上一轮的参数,即这个 Q 使用上一轮的模型生成的;这样只要更新一步,整个模型|神经网络都会发生改变,和之前只改变一个状态的值函数不同

策略梯度

既然价值函数可以进行建模的,无论输入是连续的状态,还是连续状态动作,还是非常大的状态空间, 都可以进行建模 那策略是否也一样可以进行建模,如果策略仍然是一个表格,价值函数就算建模出来了,策略本身仍然是一个问题

策略本身是是一个函数|条件概率分布, 无论是函数(直接输出一个对应的动作)还是条件概率分布(按分布随机选取动作),都可以以一个参数化的函数的形式进行建模

  • 我们能够将策略参数化
策略可以是确定性的
$$

a=\pi_{\theta}(s)

\pi_{\theta}(a|s)=P(a|s;\theta)

- $\theta$ 是策略的参数 - 将可见的一直状态泛化到未知的状态上 - 在本课程中主要讨论模型无关的强化学习 在强化学习中有两个最核心的模块,一个是价值函数模块,,另外一个是策略模块;价值函数负责评估什么是好的,什么是坏的。真正落实的时候是策略,策略是直接给出我在当前状态下智能体应该选择什么动作 价值函数的作用是帮助找到策略提升点,最后蒸馏出来的,我们要的是策略本身. 基于策略的强化学习,在做的是直接修改数据分布本身,对比价值的方法,策略学习直接基于奖励,修改的是分布本身

\begin{align} &value:\ J(\theta)=\mathbb{E}{\rho^\pi}\left[\left(V^\pi(s)-V{\theta}(s)^2\right)\right] \ &policy:J(\theta)=\mathbb{E}_{\rho^\pi}\left[r(s,a)\right] \end{align}

强化学习最终吐出来的是策略 $\pi$ ## 策略如何学习? - 对于随机策略 $\pi_{\theta}(a|s)=P(a|s;\theta)$ - 直觉上我们应该 - 降低带来较低价值/奖励的动作出现的概率 - 提高带来较高价值/奖励的动作出现的概率 - 一个离散动作空间维度为 5 的例子 ![image.png](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250513153901053.png) > 在某一状态下,采取一个动作之后,如果获得正收益, 增加选取这个动作的概率;获得负收益就弱化 ## 单步马尔可夫决策过程中的策略梯度 - 考虑一个简单的单步马尔可夫决策过程 - 起始状态为 $s\sim d(s)$ - 决策过程在进行一步决策后结束,获得奖励值为 $r_{sa}$ - 策略的价值期望

\begin{align} J(\theta)=\mathbb{E}{\pi{\theta}}[r]=\sum_{s\in S}d(s)\sum_{a\in A}\pi_{\theta}(a|s)r_{sa} \ \frac{\partial J(\theta)}{\partial \theta}=\sum_{s\in S}d(s)\sum_{a\in A}\frac{\partial \pi_{\theta}(a|s)}{\partial \theta}r_{sa} \end{align}

### 似然比(Likelihood Ratio) - 似然利用以下特性

\begin{align} \frac{\partial \pi_{\theta}(a|s)}{\partial \theta}&=\pi_{\theta}(a|s) \frac{1}{\pi_{\theta}(a|s)} \frac{\partial \pi_{\theta}(a|s)}{\partial \theta} \ &=\pi_{\theta}(a|s)\frac{\partial\log \pi_{\theta}(a|s)}{\partial \theta} \end{align}

\begin{align} J(\theta)&=\mathbb{E}{\pi{\theta}}\left[r\right]=\sum_{s\in S}d(s)\sum_{a\in A}\pi_{\theta}(a|s)r_{sa} \ \frac{\partial J(\theta)}{\partial \theta}&=\sum_{s\in S}d(s)\sum_{a\in A}\textcolor{red}{\frac{\pi_{\theta}(a|s)}{\partial \theta}}r_{sa} \ &=\sum_{s\in S}d(s)\sum_{a\in A}\textcolor{red}{\pi_{\theta}(a|s)\frac{\partial \log\pi_{\theta}(a|s)}{\partial \theta}}r_{sa} \ &=\mathbb{E}{\pi{\theta}}\left[\frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta}r_{sa}\right] \end{align}

这个结果可以通过从 $d(s)$ 中采样状态 $s$ 和从 $\pi_{\theta}$ 中采样动作 $a$ 来近似估计 $\frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta}$ 这一项可以可以通过策略 $\pi_{\theta}$ 进行采样,来估计这个偏导的数值,在拿来更新策略的参数 这里的对数似然对应深度学习也有 ![image.png](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250513165659306.png) 这个损失函数求导之后,对应上式

\begin{align} \frac{\partial J(\theta)}{\partial \theta}&=\mathbb{E}{\pi{\theta}}\left[\frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta}r_{sa}\right] \ \frac{\partial L(y)}{\partial \theta}&=\mathbb{E}{(x,y)\sim P}\left[\frac{\partial \log P{\theta}(y|x )}{\partial \theta} \ 1\right] \end{align}

上述是强化学习和有监督学习的训练范式,他们的区别 - 数据分布,有监督学习的数据是给好的,标签是 1 - $r_{sa}$ 和 $1$ 的区别,强化学习的 $r_{sa}$ 相当于加权, 是当前策略下采样得到的,有监督学习的标签是 1 ,固定的 ## 策略梯度定理 - 策略梯度定理把似然比的推导过程泛化到多步马尔可夫决策过程 - 用长期的价值函数 $Q^{\pi_{\theta}}(s,a)$ 代替前面的瞬时的奖励 $r_{sa}$ - 策略梯度定理涉及 - 起始状态目标函数 $J_{1}$,平均奖励目标函数 $j_{avR}$ 和平均价值目标函数 $J_{avV}$ - 定理 - 对任意可微的策略 $\pi_\theta(a|s)$,任意策略的目标函数 $J=J_{1},J_{avR},J_{avV}$,其策略梯度是

\frac{\partial J(\theta)}{\partial \theta}=\mathbb{E}{\pi{\theta}}\left[\frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta }Q^{\pi_{\theta}}(s,a)\right]

> 这个定理把情况推理到多步的情况,是说上面三个 $J$ 损失的梯度是通用的,都可以使用对数似然表示,并且进一步把 $r_{sa}$ 替换为 $Q^{\pi_{\theta}}(s,a)$,这是当前策略下的 $Q(s,a)$ 的值 > > 证明在强化学习导论,或者本书附录 ## 蒙特卡洛策略梯度(REINFORCE) - 利用随机梯度上升更新参数 - 利用策略梯度定理 - 利用累计奖励值 $G_{t}$ 作为 $Q^{\pi_{\theta}}(s,a)$ 的无偏采样

\Delta \theta_{t}=\alpha\frac{\partial \log \pi_{\theta}(a_{t}|s_{t})}{\partial \theta}g_{t}

- REINFORCE 算法 ![image.png](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250513175117558.png) 坏处 $g_{t}$ 会导致方差变大(这里是自举出来的值),好处是直接的计算的方式 - 可以通过多次 roll-out 的 $G_{t}$ 平均值来逼近 $Q(s_{t},a_{t})$ ![image.png|800](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250515084108137.png)

\tilde{g_{t}}=\frac{1}{N}\sum_{i=1}^ng_{t}^{(i)}

## 案例分析:Puck World 冰球世界 ![image.png](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250515084816402.png) - 连续的动作对冰球施加较小的力 - 冰球接近目标可以得到奖励 - 目标位置每 30 秒重置一次 - 使用蒙特卡洛策略梯度方法训练策略 # Softmax 随机策略 前面公式需要对策略 $\pi$ 计算 $log$ 在求偏导,那么策略可以怎样表示呢? 策略函数是对每一个 $(s,a)$ 的打分函数,输出选择动作的概率 - Softmax 策略是一种非常实用的随机策略

\pi(a|s)=\frac{e^{f_{\theta }(s,a)}}{\sum_{a^\prime}e^{f_{\theta}(s,a^\prime)}}

- 始终,$f_{\theta}(s,a)$ 是用 $\theta$ 参数化的状态-动作对得分函数,可以预先定义 - 其对数似然的梯度是

\begin{align} \frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta}&=\frac{\partial f_{\theta}(s,a)}{\partial \theta}-\frac{1}{\sum_{a^\prime}e^{f_{\theta}(s,a^\prime)}}\sum_{{a^{\prime\prime}}}e^{f{\theta}(s,a^{\prime\prime})}\frac{\partial f_{\theta}(s,a^{\prime\prime})}{\partial \theta} \ &=\frac{\partial f_{\theta}(s,a)}{\partial \theta}-\mathbb{E}{a^\prime \sim \pi{\theta}(a^\prime|s)}\left[\frac{\partial f_\theta(s,a^{\prime})}{\partial \theta}\right] \end{align}

f_{\theta}(s,a)=\theta^Tx(s,a)

\begin{align} \frac{\partial \log \pi_{\theta}(a|s)}{\partial \pi}&=\frac{\partial f_{\theta}(s,a)}{\partial \theta}-\mathbb{E}{a^\prime\sim \pi{\theta}(a^\prime|s)}\left[\frac{\partial f_{\theta}(s,a^\prime)}{\partial\theta}\right] \ &=x(s,a)-\mathbb{E}{a^\prime\sim \pi{\theta}(a^\prime|s)}\left[x(s,a^\prime)\right] \end{align}

# Actor-Critic ## REINFORCE 存在的问题 - 基于片段式数据的任务 - 通常情况下,任务需要有**终止状态**,REINFORCE 才能直接计算累计折扣奖励 - 低数据效率 - 实际中,REINFORCE 需要**大量的**训练数据 - 高训练方差(**最重要的缺陷**) - 从单个或多个片段中采样得到的值函数有**很高的方差** ## Actor-Critic > 这个框架,仍然是强化学习中最有效的、最本质、最主流的方法 之前基于 Value 的方法,更适合初学者,理解得不是很透彻的,可以先上价值函数快速的做出一个效果;最终要达到一个很好的效果需要以来这个框架 > > 这个框架是基于策略的,专门设计一个网络来拟合Q 这个框架 - Actor-Critic 的思想 - REINFORCE 策略梯度方法:使用**蒙特卡洛**采样来直接估计 $(s_{t},a_{t})$ 的值 $\textcolor{red}{g_{t}}$ - 为什么步建立一个可训练的值函数 $\textcolor{red}{Q_{\Phi}}$ 来完成这个估计过程? - 演员(Actor)和评论家(Critic) ![image.png](https://cdn.jsdelivr.net/gh/AustinSuun/image/img/20250515094620519.png) ## Actor-Critic 训练 - 评论家 Critic:$Q_{\phi}(s,a)$ - 学会准确估计当前演员策略(actor policy)的动作价值

Q_{\Phi}(s,a)\simeq r(s,a)+\gamma\mathbb{E}{s^\prime\sim p(s^\prime|s,a),a\sim \pi{\theta}(a^\prime|s^\prime)}\left[Q_{\Phi}(s^\prime,a^\prime)\right]

- 演员 Actor:$\pi_{\theta}(a|s)$ - 学会采取使 critic 满意的动作

J(\theta)=\mathbb{E}{s\sim p,\pi{\theta}}\left[\pi_{\theta}(a|s)Q_{\Phi}(s,a)\right]

\frac{\partial J(\theta)}{\partial \theta}=\mathbb{E}{\pi{\theta}}\left[\frac{\partial \log \pi_{\theta}(a|s)}{\partial \theta}Q_{\Phi}(s,a)\right]

> 这里拟合 $Q_{\Phi}$ 使用 TD 的方法,这样可以快速拟合,不用采样大量的数据 > Actor 的更新方向是没有偏差的,但是 Q 的估计会存在一定的误差,通过不断迭代,向最优方向前进 ## A 2 C:Advantageous Actor-Critic > 价值函数 Q,如果所有的奖励都是正的,那么学习会变慢,小的正奖励也会试图增加它的选取概率;而我们只希望最优的动作增加选取概率 - 思想:**通过减去一个基线函数来标准化评论家的打分** - 更多信息指导:降低较差动作概率,提高较优动作概率 - 进一步降低方差 - 优势函数:(**Advantage Function**)

A^\pi(s,a) =Q^\pi(s,a)-V^\pi(s)

\begin{align} Q^\pi(s,a)&=r(s,a)+\gamma\mathbb{E}{s^\prime\sim p(s^\prime|s,a),a^\prime\sim \pi{\theta}(a^\prime|s^\prime)}\left[Q_{\Phi}(s^\prime,a^\prime)\right] \ &=r(s,a)+\gamma\mathbb{E}_{s^\prime\sim p(s^\prime|s,a)}[V^\pi(s^\prime)] \end{align}

\begin{align} A^\pi(s,a)&=Q^\pi(s,a)-V^\pi(s) \ &=r(s,a)+\gamma\mathbb{E} _{s^\prime\sim p(s^\prime|s,a)}\left[V^\pi(s^\prime)\right] -V^\pi(s)\ &\simeq r(s,a)+\gamma V^\pi(s^\prime)-V^\pi(s) \end{align}

> 这里神奇的地方是只需要使用 V 值函数来表示,那就是从 Q 函数到 A 函数表示,A 函数又变成 V 函数表示 > Q 函数网络和 V 函数网络的区别在于,**V 函数网络更好学习**。 > V 函数网络只需要状态 s 作为输入,Q 函数网络需要(s, a)对来作为输入;V 函数网络数值相对来说更加稳定,Q 函数网络数值需要更多(s, a)对的数据来学习,才能学习的很好 # 价值和策略的近似逼近方法总结 > 近似逼近算法是深度强化学习的前身,,其中使用的参数化值函数,参数化策略,向深度神经网络方向走,发扬除了深度强化学习 - 价值和策略的近似逼近方法是强化学习技术从玩具走向现实的第一步,是深度强化学习的基础设置 - 参数化的价值函数和策略 - 通过链式法则,价值函数的参数可以被直接学习 - 相比价值函数的方法,策略梯度方法是本质上更直接的强化学习方法 - 通过 likelihood-ratio 方法,可以用 advantag 对策略的参数进行学习 - Actor-critic 框架同时学习了价值函数和策略,通过价值函数的Q(或者 Advantage)估计,以策略梯度的方式更新策略参数