[Reinforcement Learning] Cross-entropy Method

Cross-entropy Method(簡稱CEM)雖然是一種基於交叉熵的算法,但並非咱們熟知的監督學習中的交叉熵方法,與其說它是一種基於交叉熵的算法,倒不如說是一種基於蒙特卡洛和進化策略的算法。CEM算法不只能夠用做評估,也能夠做爲一種有效的優化算法,與進化算法(EAs)相似CEM是一種徹底免梯度(gradients free)的算法。算法

這裏引用維基百科上對Cross-entropy Method的解釋[1]:app

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^{'}$,而後經過求均值估計指望,即:lua

$$\mathbb{E}_{u}[H(x)]=\frac{1}{N}\sum_{i=1}^{N}x_{i}^{'}$$spa

但若是事件$H(x)$是一種小几率事件,那麼樸素蒙特卡洛模擬須要採樣很是多的樣本才能準確估計指望。針對這個問題,CEM算法引入了重要性採樣(importance sampling)。.net

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

首先經過一個相似於目標機率分佈的採樣機率分佈$f(x;v)$(其中$v$被稱爲reference parameter)來進行採樣,則指望變爲:blog

$$\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

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

[2] 維基百科:Importance sampling

[3] 進化策略優化算法CEM(Cross Entropy Method)

相關文章
相關標籤/搜索