[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)$发生的期望:
$$\mathbb{E}_{u}[H(x)]=\int H(x)f(x;u)dx$$
最简单的方法就是利用朴素蒙特卡洛采样从真实概率密度函数$f(x;u)$中采样一些样本$x^{'}$,然后通过求均值估计期望,即:
$$\mathbb{E}_{u}[H(x)]=\frac{1}{N}\sum_{i=1}^{N}x_{i}^{'}$$
但如果事件$H(x)$是一种小概率事件,那么朴素蒙特卡洛模拟需要采样非常多的样本才能准确估计期望。针对这个问题,CEM算法引入了重要性采样(importance sampling)。
Importance sampling[2]的主要思想如下:
首先通过一个类似于目标概率分布的采样概率分布$f(x;v)$(其中$v$被称为reference parameter)来进行采样,则期望变为:
$$\mathbb{E}_{u}[H(x)]=\frac{1}{N}\sum_{i=1}^{N}x_{i}^{'}\frac{f(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=(s_0,a_0,s_1,a_1,…,s_n,a_n)$,路径获得的总收益为$S(x)=\sum_{i=0}^{N} r(s_i,a_i)$,目标是最大化这个$S(x)$,那么如何采样出这些样本呢?我们可以构建一个$p$矩阵:矩阵行表示状态,列表示动作,如$p_{ij}$表示在状态$s_i$下执行$a_j$动作的概率,我们通过对这个$p$矩阵进行多次采样就可以获得多个样本,然后选出$S(x)$较高的样本用来更新$p$矩阵,不断迭代,最终找到最优$\hat{p}$矩阵。
这是一种类似于策略迭代(policy iteration)的强化学习方法:通过$p$矩阵找到在每一步状态下各个动作的概率来形成决策策略,但参数更新并没有用到梯度。从另外一个角度,你也可以认为这是一种值迭代(value iteration)的强化学习方法,此时$p$矩阵就是经典Q-learning中的$Q$矩阵,只不过$Q$矩阵中第$i$行第$j$列元素表示的是状态$s_i$下动作$a_j$的未来收益的期望,基于贝尔曼方程(Bellman equation)来更新Q值;而$p$矩阵表示的是概率值,通过交叉墒来更新。
Reference
[3] 进化策略优化算法CEM(Cross Entropy Method)
[Reinforcement Learning] Cross-entropy Method的更多相关文章
- Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor 20 ...
- Awesome Reinforcement Learning
Awesome Reinforcement Learning A curated list of resources dedicated to reinforcement learning. We h ...
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...
- (转) Playing FPS games with deep reinforcement learning
Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...
- (zhuan) Deep Reinforcement Learning Papers
Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...
- (转) Deep Reinforcement Learning: Playing a Racing Game
Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...
- getting started with building a ROS simulation platform for Deep Reinforcement Learning
Apparently, this ongoing work is to make a preparation for futural research on Deep Reinforcement Le ...
- (转) Deep Learning in a Nutshell: Reinforcement Learning
Deep Learning in a Nutshell: Reinforcement Learning Share: Posted on September 8, 2016by Tim Dettm ...
- (转) Deep Reinforcement Learning: Pong from Pixels
Andrej Karpathy blog About Hacker's guide to Neural Networks Deep Reinforcement Learning: Pong from ...
随机推荐
- c#核心基础 - 浅谈 c# 中的特性 Attribute)
特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面 ...
- Windows Server 2008远程桌面默认端口更改方法
win2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,经常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口. 本文以改为端口为25608商品为例,讲解一下具体操作过程. ...
- 64位Win7下Asp.net项目连接Oracle时报ORA-6413:连线未打开异常
当时小弟碰到这个问题的时候,也找了挺久的回答,但是回答都是模棱两可的说是因为()的问题,但是没有给出具体的解决方案,这里小弟就用一个比较笨的方法来解决这个问题. 第一种:就是使用本地IISWeb服务器 ...
- cent os 7 与cent os 6区别
原文地址:https://www.cnblogs.com/Csir/p/6746667.html 前言 centos7与6之间最大的差别就是初始化技术的不同,7采用的初始化技术是Systemd,并行的 ...
- 伺服电机&旋转变压器&光电编码器
旋转变压器与光电编码器是目前伺服领域应用最广的测量传感器. 一.伺服系统 又称为随动系统,精确的跟随或者复现某个过程的反馈系统. 使物体的位置.方位.状态等输出被控量能够跟随目标(设定)的任意变化的自 ...
- 【spring源码分析】IOC容器初始化(一)
前言:spring主要就是对bean进行管理,因此IOC容器的初始化过程非常重要,搞清楚其原理不管在实际生产或面试过程中都十分的有用.在[spring源码分析]准备工作中已经搭建好spring的环境, ...
- day 25 面向对象之接口、抽象类、多态、异常处理、反射、断言
复习 '''继承1.父类:在类后()中写父类们class A:passclass B:passclass C(A, B):pass2.属性查找顺序:自己 -> ()左侧的父类 -> 依 ...
- Jsp监听器
监听器: 监听器就是对内置对象的状态或者属性变化进行监听,并且做出反应的特殊的servlet,在web.xml文件中对监听器进行的配置. 内置对象有两种状态变化:产生.销毁,就是当产生内置对象的时候能 ...
- 类Math
概述 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单. 常用方法 ...
- “Axure”介绍
一. Axure RP简介: Axure RP 能帮助网站需求设计者,快捷而简便的创建基于网站构架图的带注释页面示意图.操作流程图.以及交互设计,并可自动生成用于演示的网页文件和规格文件,以提供演示与 ...