[Reinforcement Learning] Cross-entropy Method

Cross-entropy Method(简称CEM)虽然是一种基于交叉熵的算法,但并不是我们熟知的监督学习中的交叉熵方法,与其说它是一种基于交叉熵的算法,倒不如说是一种基于蒙特卡洛和进化策略的算法。CEM算法不仅可以用作评估,也可以作为一种有效的优化算法,与进化算法(EAs)类似CEM是一种完全免梯度(gradients free)的算法。

这里引用维基百科上对Cross-entropy Method的解释[1]:

The cross-entropy (CE) method is a Monte Carlo method for importance sampling and optimization. It is applicable to both combinatorial and continuous problems, with either a static or noisy objective.

CEM算法的迭代训练过程可以分为两个阶段:

  • 根据采样概率分布进行重采样;
  • 通过最小化采样概率分布和目标概率分布的交叉熵来更新采样概率分布。

Importance sampling

CEM要解决的是这样一种问题,假设我们需要估计一个事件H(x)发生的期望:

Eu[H(x)]=H(x)f(x;u)dx

最简单的方法就是利用朴素蒙特卡洛采样从真实概率密度函数f(x;u)中采样一些样本x,然后通过求均值估计期望,即:

Eu[H(x)]=1Ni=1Nxi

但如果事件H(x)是一种小概率事件,那么朴素蒙特卡洛模拟需要采样非常多的样本才能准确估计期望。针对这个问题,CEM算法引入了重要性采样(importance sampling)。

Importance sampling[2]的主要思想如下:

首先通过一个类似于目标概率分布的采样概率分布f(x;v)(其中v被称为reference parameter)来进行采样,则期望变为:

Eu[H(x)]=1Ni=1Nxif(x;u)f(x;v)

于是现在的目标变成了如何找到一个最优的采样概率函数f(x;v)去指导采样出一些少量的样本来准确地估计期望。CEM在每次迭代中通过选取较好的采样样本(Elite samples)来更新采样概率函数的参数v,目的是减小当前采样概率函数f(x;v)与最优采样概率函数f(x;v)的分布差距(即KL散度,相对熵)(PS:paper最后只用到了交叉熵,所以取名为CEM)。

Pseudo-code of CEM

下面给出一个以高斯分布作为采样概率分布的CEM伪代码:

复制代码
# Step1: initialization
初始化采样概率分布参数:mu, sigma;
初始化当前迭代次数t=0,设置最大迭代次数max_its,样本个数N,精英样本个数Ne,以及采样方差的误差范围epsilon;
for t in range(0, max_its):
# Step2: 使用高斯分布进行随机采样
X = SampleGaussian(mu, sigma, N)
# Step3: 评估样本
S = EvaluateSamples(X)
# Step4: 重要性采样
X = sort(X, S)
mu = mean(X[0:Ne-1])
sigma = var(X[0:Ne-1])
if sigma > epsilon:
break
# Step5: 返回精英样本的均值
return mu
复制代码

CEM && RL

注:以下内容引自博文《进化策略优化算法CEM(Cross Entropy Method)》[3]。

CEM也可以用来求解马尔可夫决策过程,也就是强化学习问题。我们知道,强化学习也是一种动态规划过程,在某个状态下选择某个动作就像在某个节点选择路径一样,整个过程就是一个从初始状态到末状态的路径规划问题,只不过我们希望得到一条能最大化收益的路径。在这种考虑下,就可以用CEM建模了,我们让一条完整的路径成为一个样本x=(s0,a0,s1,a1,,sn,an),路径获得的总收益为S(x)=i=0Nr(si,ai),目标是最大化这个S(x),那么如何采样出这些样本呢?我们可以构建一个p矩阵:矩阵行表示状态,列表示动作,如pij表示在状态si下执行aj动作的概率,我们通过对这个p矩阵进行多次采样就可以获得多个样本,然后选出S(x)较高的样本用来更新p矩阵,不断迭代,最终找到最优p^矩阵。

这是一种类似于策略迭代(policy iteration)的强化学习方法:通过p矩阵找到在每一步状态下各个动作的概率来形成决策策略,但参数更新并没有用到梯度。从另外一个角度,你也可以认为这是一种值迭代(value iteration)的强化学习方法,此时p矩阵就是经典Q-learning中的Q矩阵,只不过Q矩阵中第i行第j列元素表示的是状态si下动作aj的未来收益的期望,基于贝尔曼方程(Bellman equation)来更新Q值;而p矩阵表示的是概率值,通过交叉墒来更新。

Reference

[1] 维基百科:Cross-entropy Method

[2] 维基百科:Importance sampling

[3] 进化策略优化算法CEM(Cross Entropy Method)

posted @   Poll的笔记  阅读(6015)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示