Cross-Entropy Method (CEM, 交叉熵方法) 与强化学习

转自:https://the0demiurge.blogspot.com/2017/08/cross-entropy-method-cem.html

 

前言

之前阅读Deep Reinforcement Learning: Pong from Pixels的时候,作者在文中最后提到“One should always try a BB gun before reaching for the Bazooka. In the case of Reinforcement Learning for example, one strong baseline that should always be tried first is the cross-entropy method (CEM), a simple stochastic hill-climbing “guess and check” approach inspired loosely by evolution.” (如果你做强化学习,就应该先用最原始的方法即CEM先测试一下,当然试验结果也可以充当benchmark进行对比。)

由于(居然)没找到相关的中文资料,我就来简要介绍一下吧。

简介

交叉熵方法是一种蒙特卡洛方法,主要用来优化和重要性采样。和进化算法类似,在空间中按照某种规则撒点,获得每个点的误差,再根据这些误差信息决定下一轮撒点的规则。交叉熵方法之所以叫这个名字,是因为该方法(从理论上来说)目标是最小化随机撒点得到的数据分布与数据实际分布的交叉熵(等价于最小化 KL 距离),尽量使采样分布(撒的点)与实际情况同分布。

该方法适当选取撒点规则就可以适应多目标优化等情况,在组合优化中也有许多应用。本文主要讨论 CEM 在强化学习的策略优化中的应用。

CEM 流程

简介说得花里胡哨,可是实际应用起来基本没有交叉熵什么事,实际应用通常是以下步骤:

 

 

  1. 首先,建模,将问题的解参数化。比如强化学习中,假设状态 S 为一个 n 维向量,动作总共有 2 种,最简单的想法就是建立一个 n 维参数向量 W ,求 ST  ×× W 得到一个标量 Q ,当 Q > 0 则采取第一种动作,否则采取第二种。强化学习问题转化为优化问题。(接下来其实可以使用任何优化算法求解最优的 W ,只不过交叉熵方法可以很快很稳定地收敛。)
  2. 假设参数 W 属于高斯分布,随机设置一个 n 维向量 μμ 和一个 n 维向量 σ2σ2 ,分别对应于 W 的每一维。
  3. 以 μμ 和 σ2σ2 为均值、方差采样得到 m 组参数 w1,w2,w3...wmw1,w2,w3...wm
  4. 计算每一组 w 的回报 reward
  5. 选取回报最高的 k (k<m) 组参数,计算这组参数的均值和方差,并将 μμ 和 σ2σ2 更新为刚刚计算的均值和方差。
  6. 如果收敛则返回 reward 最大的一组 w, 否则重复步骤3~6

评价

从简介里说的蒙特卡洛方法就知道,该方法就是靠不断尝试,方法十分简单,所以也只是在简单的情况下十分有效。由此可见,简单的强化学习模型用进化算法也可解。

CEM只是最简单的方法,因此可用于验证最小网络结构是否能优化得出来,由于求解费时少,能够快速验证想法(还能快速验证代码是否有错)

参考资料

代码实现:https://gist.github.com/andrewliao11/d52125b52f76a4af73433e1cf8405a8f

 

维基百科中的伪代码:

1. mu:=-6; sigma2:=100; t:=0; maxits=100;    // Initialize parameters
2. N:=100; Ne:=10;                           //
3. while t < maxits and sigma2 > epsilon     // While maxits not exceeded and not converged
4.  X = SampleGaussian(mu,sigma2,N);         // Obtain N samples from current sampling distribution
5.  S = exp(-(X-2)^2) + 0.8 exp(-(X+2)^2);   // Evaluate objective function at sampled points
6.  X = sort(X,S);                           // Sort X by objective function values (in descending order)
7.  mu = mean(X(1:Ne)); sigma2=var(X(1:Ne)); // Update parameters of sampling distribution
8.  t = t+1;                                 // Increment iteration counter
9. return mu                                 // Return mean of final sampling distribution as solution


一篇非常棒的论文(理论讲得很详细清楚)
CROSS-ENTROPY FOR MONTE-CARLO TREE SEARCH
https://dke.maastrichtuniversity.nl/m.winands/documents/crossmc.pdf

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
熵 (Entropy) 是信息论中的一个概念,用来衡量随机变量的不确定性。在机器学习中,我们通常使用交叉熵 (Cross-Entropy) 作为损失函数,用来衡量模型预测结果与实际结果之间的差异。 以下是一些关于熵和交叉熵的基本概念和公式。 ## 熵 (Entropy) 熵是一个概率分布的度量,它表示随机变量的不确定性。对于一个离散的随机变量 $X$,其熵的数学定义为: $$H(X)=-\sum_{x\in X}p(x)\log_2p(x)$$ 其中,$p(x)$ 表示随机变量 $X$ 取值为 $x$ 的概率,$\log_2$ 表示以 2 为底的对数。 可以看出,当 $p(x)$ 的分布越均匀(即所有 $x$ 的概率都相等)时,熵的值最大,达到 $H(X)=\log_2|X|$;当 $p(x)$ 的分布越集中在某些特定的取值上时,熵的值越小。 ## 交叉熵 (Cross-Entropy) 交叉熵是用来衡量模型预测结果与实际结果之间的差异的一种损失函数。对于一个离散的随机变量 $Y$,其真实分布为 $p(Y)$,模型预测的分布为 $q(Y)$,则交叉熵的数学定义为: $$H(p,q)=-\sum_{y\in Y}p(y)\log_2q(y)$$ 可以看出,当模型的预测结果与真实结果越接近时,交叉熵的值越小。 ## 交叉熵在机器学习中的应用 在机器学习中,我们通常使用交叉熵作为分类模型的损失函数。对于一个分类问题,我们需要将输入 $x$ 分类到 $k$ 个类别中的一个,并且每个类别都对应一个概率值 $p_i$,表示输入 $x$ 属于第 $i$ 个类别的概率。设模型的预测结果为 $q_1,q_2,...,q_k$,表示输入 $x$ 属于每个类别的概率预测值,则其交叉熵的数学定义为: $$H(p,q)=-\sum_{i=1}^kp_i\log_2q_i$$ 我们的目标是最小化交叉熵,使得模型的预测结果尽可能接近真实结果,从而提高模型的准确率。 以上就是关于熵和交叉熵的基本概念和公式,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值