進化策略優化算法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是一種進化策略算法,它雖然也是基於交叉熵,但並不是我們熟知的監督學習中的交叉熵方法。這個算法的核心是一個參數優化的過程,舉個一般的例子,我們考慮估計一個期望Eu(H(x))=H(x)f(x;u)dx ,最簡單的方法就是用樸素蒙特卡羅採樣從真實概率密度函數f(x;u) 中採樣一些樣本xi ,然後計算1/nnH(xi) ,若事件H(x) 發生的概率很小,那麼樸素蒙特卡羅需要非常多的樣本代價才能估計準這個期望;CEM算法則引入重要性採樣(importance sampling),從另一個類似的概率密度函數f(x;v) 中進行採樣,則期望計算變成:1/nnH(xi)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)=argmaxu1Ni=1NH(Xi)f(Xi;u)f(Xi;v(t1))logf(Xi;v(t1))

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個權值,但是每個權值X1,X2,X3,X4,X5 是按照某些均值u1,u2,u3,u4,u5 的指數分佈隨機產生的,每個權值的產生相互獨立。

我們的目標是去估計出一套指數分佈的參數,讓其產生的權值滿足最短路徑大於一個固定值這一條件,由於採樣的隨機性不可能讓所有樣本都滿足這個條件,因此我們考慮滿足這個條件的樣本佔比,佔比越大,說明我們能更容易產生讓最短路較大的權值。

這裏寫圖片描述

我們定義權值X=(X1,...,X5) 和權值參數u=(u1,...,u5) ,那麼權值X 的概率分佈函數(pdf) f(;u) 可以寫成:

f(x;u)=exp(j=15xjuj)j=151uj

我們令S(X) 爲從A到B的最短長度,那麼我們可以寫出S(X) 大於固定值γ 的概率爲:

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

一個直接估計 的方法是用簡單蒙特卡洛採樣:從X 的分佈中生成一系列隨機樣本X1,...,XN ,然後用下面的均值估計作爲 無偏估計:

1Ni=1NI{S(Xi)>γ}

然而,從常識我們知道,對於較大的γ 概率值會很小,因此簡單蒙特卡洛需要更多的樣本去準確估計 ,也就是說我們需要付出較大的代價,如增大采樣個數N 才能獲得一個比較小的相對誤差。一個更好的辦法是引入重要性採樣importance sampling(IS),用另外一個採樣概率密度函數g 來獲得樣本X ,那麼 可以被重寫爲:

=I{S(x)>γ}f(x)dx=I{S(x)>γ}f(x)g(x)g(x)dx=Exg(x)I{S(X)>γ}f(X)g(X)

由於期望的採樣是根據g(x) 來的,此時,一個 的無偏估計^ 就叫做重要性採樣或者比例似然估計(IS/LR estimator):

^=1Ni=1NI{S(Xi)>γ}W(Xi)

其中W(x)=f(x)/g(x) ,注意此時的樣本X1,...,XN 是從g 中隨機採樣而來。而且,當W=1 時,這個問題便又退化爲了簡單的蒙特卡洛採樣了。那麼g(x) 到底該怎麼選呢?其實,我們可以把g(x) 同樣限制爲相互獨立的指數分佈,類似f(;u) ,因此我們用v1,...,v5 表示g(x) 的參數,那麼W 可以被寫成:

W(x;u,v)=f(x;u)f(x;v)=exp(j=15xj(1uj1vj))j=15vjuj

在這種情況下,我們樣本採樣的改變全部由參數v1,...,v5 決定,現在的主要問題是,我們如何去選擇參數v 來在特定的代價下更準確地估計 。幸運地是,CEM算法就提供了一種快速的方法去估計出這個最優參數,我們給出針對此問題的CE算法過程:

  1. 初始化v0=u ,令t=1
  2. 根據概率密度函數f(;vt1) 產生一些系列隨機樣本X1,...,XN ,計算每個樣本下的最短路徑S(Xi) ,然後按照從小到大排序,S(1)S(N) 。我們計算位置排在1ρ 分位的樣本表現:γ^t=S((1ρ)N) 如果γt^ 小於γ ,否則,γ^t=γ^
  3. 我們用這些採樣出來的樣本去更新參數vt,j,j=1,,n(=5) :

    v^t,j=i=1ni=1NI{S(Xi)>γ^}W(Xi;u,v^t1)Xiji=1ni=1NI{S(Xi)>γ^}W(Xi;u,v^t1)
  4. 判斷γ^tγ^ 是否成立,若不成立,則循環執行步驟2並設置t=t+1 ,若成立則進行步驟5

  5. 假設T 爲最終迭代次數,於是我們根據f(;v^T) 最後採樣一輪樣本X1,,XN1 作爲我們^ 的最終的估計值:

^=1N1i=1N1I{S(Xi)>γ}W(Xi;u,v^T)

注意,我們在步驟2到步驟3其實是在估計重要性採樣函數g(x) 的參數,進化策略其實是作用於g(x) 上的,我們在原有的g(x) 上採樣出一批樣本,然後找出比較表現較好的樣本,用這些樣本去更新g(x) ,那麼下一次g(x) 可能會採樣出更好的樣本,這些樣本又可以更好地更新g(x) ,因此最終的估計值^ 會越來越準確。在我們更新v 過程中,由於概率密度函數f(x)=ex 是基於指數形式的,因此求log後我們可以看到分子最後一項爲Xij

在進行迭代前,我們需要設置好一些超參數如分位值ρ (一般處於0.01到0.1),這個值越小,我們算法收斂越慢,因爲每次更新的幅度變小了;反之,若這個值較大,雖然我們算法收斂更快,但是有可能會導致達不到全局最優解。我們還必須確定NN1 的值,這兩個值決定着採樣的樣本數量,你可以理解爲遺傳算法中子代的個數,當子代越多,我們對子代進化的方向把握得越全面,但是計算量會提升。

那麼效果如何呢?假設我們的初始參數向量u 爲(0.25, 0.4, 0.1, 0.3, 0.2),我們要找到一組參數v^ ,並用f(;v^) 採樣出的X 權值讓最小路徑大於2,即γ=2普通的蒙特卡洛方法需要採樣107 個樣本才能估計出一套參數,用這套參數採樣出的權值的最短路徑僅有1.65×105 概率大於2(相對誤差在0.165之間);而CEM算法只需要6次迭代,每次迭代產生N=1000 個樣本,就可以達到相同的效果,估計概率爲1.65×105 (相對誤差在0.03之內)的效果,整個計算過程3秒之內

2.2 組合優化例子

假設我們有個黑箱子,裏面有一些0/1變量y=(y1,,yn) ,我們不能直接觀察到這些值,但我們可以通過一些嘗試獲得一些反饋來估計這些變量:通過輸入一串同樣長度的0/1變量x=(x1,,xn) ,然後黑箱子會返回我們的輸入值有多個是猜對的。我們的目標就是不斷的嘗試,最終估計出這些0/1變量的真實值

這裏寫圖片描述

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

S(x)=njn|xjyj|,

一種非常簡單的方法就是進行n次獨立的伯努利試驗,每次採樣按照p=p1,,pn 概率進行採樣,當我們獲得最優解的時候,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=(s0,a0,s1,a1,,sn,an) ,我們讓路徑中獲得的總收益成爲S(x)=inr(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 矩陣表示的是概率值,通過交叉墒來更新。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章