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

1. 进化策略与遗传算法

进化策略算法(Evolutionary Strategies,ES)是一种基于进化理论的算法,通过适者生存的自然法则来淘汰和筛选样本,目的是获得更好的样本(参数),与遗传算法一样,它也是通过参数扰动来探索更好的解,但是进化策略可以看做是遗传算法的一种扩展:在遗传算法中,我们用一串0/1数组表示遗传DNA,用父代们的DNA重组和变异得到不同的子代DNA,然后通过适应性函数判断子代DNA的得分,选出得分较高的子代进行下一次重组和变异,直到算法收敛;而进化策略算法把DNA的0/1的二值性表示扩展到了连续的实数空间,每个数值的变异强度由其方差决定,变异后的值围绕其均值波动。进化策略算法在遗传信息上的表达相对更加丰富,而且还可以遗传变异强度,因此可以看做是遗传算法的一种扩展。

2.Cross Entropy Method (CEM)

Cross Entropy Method是一种进化策略算法,它虽然也是基于交叉熵,但并不是我们熟知的监督学习中的交叉熵方法。这个算法的核心是一个参数优化的过程,举个一般的例子,我们考虑估计一个期望 E u ( H ( x ) ) = H ( x ) f ( x ; u ) d x ,最简单的方法就是用朴素蒙特卡罗采样从真实概率密度函数 f ( x ; u ) 中采样一些样本 x i ,然后计算 1 / n n H ( x i ) ,若事件 H ( x ) 发生的概率很小,那么朴素蒙特卡罗需要非常多的样本代价才能估计准这个期望;CEM算法则引入重要性采样(importance sampling),从另一个类似的概率密度函数 f ( x ; v ) 中进行采样,则期望计算变成: 1 / n n H ( x i ) W ( z ; u , v ) ,其中 W ( z ; u , v ) = f ( x ; u ) / f ( x ; v ) ,于是现在的目标变成了如何找到一个最优的采样函数 f ( x ; v ) 去指导采样出一些少量的样本来准确地估计这个期望,CEM通过在每次迭代中找到较好的采样样本 x 来更新重要性函数的参数 v (reference parameter),目的是减小 f ( x ; v ) f ( x ; v ) 两个分布的差距,而这个差距是由KL散度(相对墒,但最后公式中只用到了交叉墒)来衡量的,所以最后取名为Cross Entropy Method(CEM).

从本质上来说,CEM是一种基于参数扰动的搜索算法,给参数空间 v 一些合理的扰动,然后在这些扰动(变体/子代)中搜索和选择较好的集和,然后利用交叉墒来指导更新 v ,让这些扰动方向越趋近于我们想要的目标优化方向。与众多监督学习算法一样,CEM也运用了交叉墒来指导更新方向,但它却是一个免梯度(gradients free)的方法,从进化的角度在解优化问题。下面是维基百科的解释,有兴趣的可以去看一下关于 v 是如何更新的推导,这里只给出它的最终形式:

v ( t ) = argmax u 1 N i = 1 N H ( X i ) f ( X i ; u ) f ( X i ; v ( t 1 ) ) log f ( X i ; v ( t 1 ) )

The cross-entropy (CE) method developed by Reuven Rubinstein is a general Monte Carlo approach to combinatorial and continuous multi-extremal optimization and importance sampling. The method originated from the field of rare event simulation, where very small probabilities need to be accurately estimated, for example in network reliability analysis, queueing models, or performance analysis of telecommunication systems. The CE method can be applied to static and noisy combinatorial optimization problems such as the traveling salesman problem, the quadratic assignment problem, DNA sequence alignment, the max-cut problem and the buffer allocation problem, as well as continuous global optimization problems with many local extrema.

下面,我们根据两个例子具体来看一下CEM方法的应用:

2.1 求最短路径大于固定值的概率

我们首先考虑一个最短路问题,从A到B点如何找到一条路径让总距离最小。每条路的距离figure1中的各个权值表示,这里一共有5个权值,但是每个权值 X 1 , X 2 , X 3 , X 4 , X 5 是按照某些均值 u 1 , u 2 , u 3 , u 4 , u 5 的指数分布随机产生的,每个权值的产生相互独立。

我们的目标是去估计出一套指数分布的参数,让其产生的权值满足最短路径大于一个固定值这一条件,由于采样的随机性不可能让所有样本都满足这个条件,因此我们考虑满足这个条件的样本占比,占比越大,说明我们能更容易产生让最短路较大的权值。

这里写图片描述

我们定义权值 X = ( X 1 , . . . , X 5 ) 和权值参数 u = ( u 1 , . . . , u 5 ) ,那么权值 X 的概率分布函数(pdf) f ( ; u ) 可以写成:

f ( x ; u ) = exp ( j = 1 5 x j u j ) j = 1 5 1 u j

我们令 S ( X ) 为从A到B的最短长度,那么我们可以写出 S ( X ) 大于固定值 γ 的概率为:

= P ( S ( X ) > γ ) = E ( I { S ( X ) > γ } )

一个直接估计 的方法是用简单蒙特卡洛采样:从 X 的分布中生成一系列随机样本 X 1 , . . . , X N ,然后用下面的均值估计作为 无偏估计:

1 N i = 1 N I { S ( X i ) > γ }

然而,从常识我们知道,对于较大的 γ 概率值会很小,因此简单蒙特卡洛需要更多的样本去准确估计 ,也就是说我们需要付出较大的代价,如增大采样个数 N 才能获得一个比较小的相对误差。一个更好的办法是引入重要性采样importance sampling(IS),用另外一个采样概率密度函数 g 来获得样本 X ,那么 可以被重写为:

= I { S ( x ) > γ } f ( x ) d x = I { S ( x ) > γ } f ( x ) g ( x ) g ( x ) d x = E x g ( x ) I { S ( X ) > γ } f ( X ) g ( X )

由于期望的采样是根据 g ( x ) 来的,此时,一个 的无偏估计 ^ 就叫做重要性采样或者比例似然估计(IS/LR estimator):

^ = 1 N i = 1 N I { S ( X i ) > γ } W ( X i )

其中 W ( x ) = f ( x ) / g ( x ) ,注意此时的样本 X 1 , . . . , X N 是从 g 中随机采样而来。而且,当 W = 1 时,这个问题便又退化为了简单的蒙特卡洛采样了。那么 g ( x ) 到底该怎么选呢?其实,我们可以把 g ( x ) 同样限制为相互独立的指数分布,类似 f ( ; u ) ,因此我们用 v 1 , . . . , v 5 表示 g ( x ) 的参数,那么 W 可以被写成:

W ( x ; u , v ) = f ( x ; u ) f ( x ; v ) = exp ( j = 1 5 x j ( 1 u j 1 v j ) ) j = 1 5 v j u j

在这种情况下,我们样本采样的改变全部由参数 v 1 , . . . , v 5 决定,现在的主要问题是,我们如何去选择参数 v 来在特定的代价下更准确地估计 。幸运地是,CEM算法就提供了一种快速的方法去估计出这个最优参数,我们给出针对此问题的CE算法过程:

  1. 初始化 v 0 = u ,令 t = 1
  2. 根据概率密度函数 f ( ; v t 1 ) 产生一些系列随机样本 X 1 , . . . , X N ,计算每个样本下的最短路径 S ( X i ) ,然后按照从小到大排序, S ( 1 ) S ( N ) 。我们计算位置排在 1 ρ 分位的样本表现: γ ^ t = S ( ( 1 ρ ) N ) 如果 γ t ^ 小于 γ ,否则, γ ^ t = γ ^
  3. 我们用这些采样出来的样本去更新参数 v t , j , j = 1 , , n ( = 5 ) :

    v ^ t , j = i = 1 n i = 1 N I { S ( X i ) > γ ^ } W ( X i ; u , v ^ t 1 ) X i j i = 1 n i = 1 N I { S ( X i ) > γ ^ } W ( X i ; u , v ^ t 1 )

  4. 判断 γ ^ t γ ^ 是否成立,若不成立,则循环执行步骤2并设置 t = t + 1 ,若成立则进行步骤5

  5. 假设 T 为最终迭代次数,于是我们根据 f ( ; v ^ T ) 最后采样一轮样本 X 1 , , X N 1 作为我们 ^ 的最终的估计值:

^ = 1 N 1 i = 1 N 1 I { S ( X i ) > γ } W ( X i ; u , v ^ T )

注意,我们在步骤2到步骤3其实是在估计重要性采样函数 g ( x ) 的参数,进化策略其实是作用于 g ( x ) 上的,我们在原有的 g ( x ) 上采样出一批样本,然后找出比较表现较好的样本,用这些样本去更新 g ( x ) ,那么下一次 g ( x ) 可能会采样出更好的样本,这些样本又可以更好地更新 g ( x ) ,因此最终的估计值 ^ 会越来越准确。在我们更新 v 过程中,由于概率密度函数 f ( x ) = e x 是基于指数形式的,因此求log后我们可以看到分子最后一项为 X i j

在进行迭代前,我们需要设置好一些超参数如分位值 ρ (一般处于0.01到0.1),这个值越小,我们算法收敛越慢,因为每次更新的幅度变小了;反之,若这个值较大,虽然我们算法收敛更快,但是有可能会导致达不到全局最优解。我们还必须确定 N N 1 的值,这两个值决定着采样的样本数量,你可以理解为遗传算法中子代的个数,当子代越多,我们对子代进化的方向把握得越全面,但是计算量会提升。

那么效果如何呢?假设我们的初始参数向量 u 为(0.25, 0.4, 0.1, 0.3, 0.2),我们要找到一组参数 v ^ ,并用 f ( ; v ^ ) 采样出的 X 权值让最小路径大于2,即 γ = 2 普通的蒙特卡洛方法需要采样 10 7 个样本才能估计出一套参数,用这套参数采样出的权值的最短路径仅有 1.65 × 10 5 概率大于2(相对误差在0.165之间);而CEM算法只需要6次迭代,每次迭代产生 N = 1000 个样本,就可以达到相同的效果,估计概率为 1.65 × 10 5 (相对误差在0.03之内)的效果,整个计算过程3秒之内

2.2 组合优化例子

假设我们有个黑箱子,里面有一些0/1变量 y = ( y 1 , , y n ) ,我们不能直接观察到这些值,但我们可以通过一些尝试获得一些反馈来估计这些变量:通过输入一串同样长度的0/1变量 x = ( x 1 , , x n ) ,然后黑箱子会返回我们的输入值有多个是猜对的。我们的目标就是不断的尝试,最终估计出这些0/1变量的真实值

这里写图片描述

其中,箱子返回值 S ( x ) 为:

S ( x ) = n j n | x j y j | ,

一种非常简单的方法就是进行n次独立的伯努利试验,每次采样按照 p = p 1 , , p n 概率进行采样,当我们获得最优解的时候, p = y ,此时,采样出来的值必有 x = y ,那么我们如何估计这些 p 参数呢?CEM算法还是会把问题转化为类似2.1中求解大于固定值概率的问题,具体来说,我们会去估计 S ( ( x ) ) n 的概率,最终的目标就是让这个概率为1,首先我们会定义一个初始 p ^ 0 = ( 0.5 , , 0.5 ) , 然后进行伯努利试验产生一批样本,选出样本中 S ( x ) 较大的,然后用这些样本更新 p ^ ,直到 p ^ 中所有的元素全为0或1,且S(x)=1,算法达到最优解,此时 y 的最终估计结果就为 p ^

3. CEM与强化学习

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

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

Reference1: https://people.smp.uq.edu.au/DirkKroese/ps/aortut.pdf
Reference2: https://en.wikipedia.org/wiki/Cross-entropy_method

猜你喜欢

转载自blog.csdn.net/ppp8300885/article/details/80567682