简介:这篇文章发表于2017年的ICML,一作是Marc G. Bellemare,现就职于Google Brain。这篇文章主要分析研究如何使用一个分布而不是单个值去进行强化学习(Reinforcement Learning, RL)。
背景及简介
在经典的强化学习中,执行体(agent)一般会去学习预测一系列动作后所得的期望奖励。常见的形式,如状态价值函数或者行为价值函数$Q(s, a)$。分布(distributional)强化学习的主要思想是,期望奖励不应该是单一一个值,而是应该是一个分布。
举一个简单的例子:假设我们去买彩票,彩票价格10元,有$0.01\%$的概率可以获取1万,$99.99\%$的概率什么也没有。那么从期望角度来说,我们花10元可以获取的奖励的期望为1元,那么净收益为$-9 = 1 - 10$元。显然,如果从期望角度来看,买彩票相当于送给商家9块。现实生活中,还是有很多人买彩票,因为彩票是有一定概率中奖的,也就是收益是一个分布。
从上面的例子,我们可以看出,分布所能给的信息远比单一一个值要多很多。那么,在我们本次分享的论文中,作者将收益的分布引入强化学习中。实验结果表明,使用分布相比于单一一个期望值在大部分情况下可以获取相比于使用单一值的方法更多的收益。
分布贝尔曼算子
首先我们定义一下RL中常用术语的一些符号。
符号 | 含义 |
---|---|
$\mathcal{X}$ | 状态空间 |
$\mathcal{A}$ | 行为(action)空间 |
$R$ | 回报(return)空间 |
$P(\cdot\vert x, a)$ | 状态转移概率($x$:状态,$a$:行为) |
$\gamma$ | 衰减系数 |
$Z^\pi$ | 带衰减的期望收益(是一个分布) |
$Q^\pi(x, a)$ | $Q$函数($\pi$为某个策略) |
我们知道,带衰减的$Q$函数公式为:
其中:$x_t \sim P(\cdot \vert x_{t-1}, a_{t-1})$,$a_t \sim \pi(\cdot \vert x_t)$,$x_0=x, a_0 = a$。
我们将其写成贝尔曼等式的形式为:
那么根据公式,我们可以得到$Q$函数的更新方法,我们使用贝尔曼算子$\mathcal{T}$来表示即为:
使用$Q$函数的贝尔曼算子,我们可以很容易构建出一个强化学习算法$DQN$。那么分布形式的算子是什么样的呢?
此处省略一堆数学推导、证明。我们通过上面$Q$函数的贝尔曼算子,可以直接类推分布期望的形式$Z$下:
有了回报的分布$Z$之后,我们就很容易得到一个简单的贪婪策略,即每次都选择最大化期望收益的行为:
在下文中,我们介绍论文中是如何根据上述算子来构建具体的算法的。
分布拟合学习
分布的表示
有了上述算法之后,想要构建一个RL算法,首先需要解决的问题就是分布如何表示。
在DQN算法中,我们使用神经网络来输出每一个行为(action)的$Q$值。而神经网络如何输出一个分布呢?论文中使用了一个离散分布来近似收益的分布。假设我们所预测的收益的取值在一个范围$(V_{MIN}, V_{MAX})$内,我们将这个范围平分为$N-1$块,那么每块的大小为$\Delta z=\cfrac{V_{MAX} - V_{MIN}}{N-1}$,这样我们一共有了$N$个取值点:
此时,我们就可以使用神经网络来输出在这N个取值点上的概率。
模型
我们记模型为$\theta(x, a): \mathcal{X} \times \mathcal{A} \to \mathbb{R}^N$,某个取值点$z_i$的取值输出为$\theta_i(x, a)$,由于对于每一个$(x, a)$我们需要输出的是一个分布,因此我们可以很容易想到是要$softmax$来将神经网络的输出归一化为一个分布。那么取值$z_i$的概率为:
我么回顾一下前面推导的贝尔曼算子的分布形式:
这里我们为了简洁将$\mathbb{E}$略去。此处由于我们使用神经网络来拟合我们的分布,所以我们需要使用梯度下降法来进行优化,如果我们可以找到一个度量$\mathcal{L}$来衡量两个分布间的距离:
那么显然我们可以通过最小化这个距离来进行神经网络的优化。
空间变换
根据上文描述,我们可以知道我们假定收益回报$Z$在$V_{MIN} \sim V_{MAX}$之间,但是在算子$\mathcal{T}^\pi$的计算中 ,我们将当前的收益$R(x, a)$加到了$\gamma Z(x^\prime, a^{\prime})$上。这就很有可能导致$\mathcal{T}^\pi$超出了指定范围。那么我们需要将新得到的$\mathcal{T}^\pi$重新映射到$V_{MIN} \sim V_{MAX}$之间,并且将在原本取值上的概率分配到新取值的分布概率之上。记重新得到的第$i$个取值的概率为$(\Phi\hat{\mathcal{T}} Z_\theta(x, a))_i$:
其中$[\cdot]_a^b$将取值范围截断在a, b之间;$\hat{\mathcal{T}}z_j = r + \gamma z_j$。
这个公式看起来很复杂,其实说起来比较简单。我们以一个取值为例:假设原先有一个$z_j = 1.6$,设置的$V_{MIN}=0, V_{MAX}=10, N=11, \Delta z= 1$,当前$r=2.3, \gamma=0.5$,$z_j$的取值概率为$0.3$,那么有$\hat{\mathcal{T}}z_j = 2.3 + 0.5 * 1.6 = 3.1$。此时我们将原本$z_j$0.3 的取值概率分到靠近$\hat{\mathcal{T}}z_j$最近的两个取值即$3, 4$上。由于3.1靠近3比较近,因此我们将$1 - (3.1-3) = 0.9$的部分$0.9 \times 0.3 = 0.27$分配给取值3;而将$1 - (4 - 3.1)=0.1$的部分$0.1 \times 0.3 = 0.03$分配给取值4。这样我们将原本所有点都分配一下就可以得到新的分布。
注:上面公式与论文中文字描述有冲突,按照公式$z_j$的概率需要按照与$z_i$的远近分配给各个$z_i$,而算法描述中仅将原本概率分配给最近的两个(或单个)边界值。实际实现按算法描述实现即可。
文中给出了一个整个变换过程的示意图:
有了新的分布之后,我们可以直接计算两个分布之间的距离,文中直接使用交叉熵损失作为损失函数(直接看作分类问题)。算法截图如下:
实验对比
超参数:
- $N$取值为51,所以此算法常被称作C51(不是单片机哦)
- 实验探索概率$\epsilon = 0.05$
- 模型与DQN论文模型一致,除了输出层输出的是各个取值的概率
- $V_{MAX} = -V_{MIN} = 10$
- 其它一些训练细节都与DQN 论文中一致
对比DQN
可以看到在大多数游戏上C51的性能超过DQN不少。
N取值
可以看出从训练帧数上来看,C51的表现最好。
问题
- 算法中空间变换计算量大,实际是现实时可能成为瓶颈(根据简单实现,确实成为瓶颈)
- 边界限制需手动调节(后续有改进算法,参考QR-DQN)
引用
[1] Bellemare M G, Dabney W, Munos R. A distributional perspective on reinforcement learning[C]//International Conference on Machine Learning. PMLR, 2017: 449-458.
扫描二维码关注公众号,查看最新分享:
More Recommendations