【逆强化学习-2】最大熵学习(Maximum Entropy Learning)
文章目錄
- 0.引言
- 1.算法原理
- 2.仿真
0.引言
\qquad本文是逆強化學習系列的第2篇,其余博客傳送門如下:
逆強化學習0-Introduction
 逆強化學習1-學徒學習
\qquad最大熵學習是2008年出現的方法,原論文(鏈接見【逆強化學習0】的博客)使用的Reward的函數仍然是線性模型,但是優化的思想和之前談到的學徒學習有本質差別,由于需要一些概率論和隨機過程分析課程的知識,原paper的理論也十分晦澀難懂。本人憑借粗淺的理解給大家一個淺顯易懂的解釋。
原會議的presentation(PPT)永久免費
 原paper見部分0- Introduction部分
 GitHub源代碼
 本文點贊破百,解鎖額外代碼(DQN+maxEnt)
\qquad學徒學習(APP)是最大化間隙策略(MMP)的一種擴展,通過求解滿足最大化間隙的Reward來計算Reward,從而使得Lean的行為越來越趨向于Expert(但又不好于Expert),這種方法往往叫做Feature Matching。其缺點在于對于存在多種合理的Reward的函數或者Expert存在多種次優軌跡時,該方法就無能為力了。APP本質是有約束優化問題,而優化變量是feature的discount-expectation基向量的坐標θ\thetaθ。然而對于每一個策略π\piπ而言,都可能存在多個Reward函數使其最優。當演示了次優行為時,需要多個策略混合來匹配特征計數,這就讓Feature Matching這件事在Expert軌跡存在多個Feature期望值時變得非常模糊。在APP中,這是通過求平均的方式解決的,然而這明顯不是一個合理的解決方案。
 \qquad最大熵學習(MaxEnt)同樣是Feature Matching的方法,與APP不同的是,其采用了一種有原則的方式消除了這種匹配歧義。而這種原則就是最大熵原則,該原則基于一種假設——即專家系統軌跡生成自己的專家特征期望的策略是最優軌跡(即下文的約束條件1).
 \qquad可以簡單的理解為,在APP中作為損失函數的特征匹配,在MaxEnt中被放入了約束條件中,而MaxEnt正是在滿足這個約束條件的情況下,要求以θ\thetaθ為Reward函數參數時,軌跡概率分布P(ζ∣θ)P(\zeta|\theta)P(ζ∣θ)的信息熵最大。
 \qquad至于為什么要求信息熵最大,原paper中并無詳細說明,只是指出這已經在reference里面有了相關研究,本人查閱相關資料,給出以下幾個理由供大家參考:
1.算法原理
下面就簡單介紹一下這個熵,對于連續變量而言,信息熵通常表示為
 Ent=∫x∽π?p(x)logp(x)Ent=\int_{x\backsim \pi}-p(x)logp(x)Ent=∫x∽π??p(x)logp(x)
 對于強化學習任務而言,最大化信息熵寫為:
 max?∑ζ∈D?P(ζ∣θ)logP(ζ∣θ)s.t.{∑ζ∈DP(ζ∣θ)fζ=f~∑ζ∈DP(ζ∣θ)=1\begin{aligned} & \max\sum_{\zeta \in D}-P(\zeta| \theta)logP(\zeta| \theta) \\ s.t. &\begin{cases} \sum_{\zeta\in D}P(\zeta| \theta)f_\zeta = \widetilde{f} \\[2ex] \sum_{\zeta \in D}P(\zeta | \theta)=1 \\ \end{cases} \end{aligned}s.t.?maxζ∈D∑??P(ζ∣θ)logP(ζ∣θ)????∑ζ∈D?P(ζ∣θ)fζ?=f?∑ζ∈D?P(ζ∣θ)=1??
構造拉格朗日函數
 L(P,λ,μ)=∑ζ∈D[P(ζ∣θ)logP(ζ∣θ)+λ(P(ζ∣θ)fζ?f~)+μ(P(ζ∣θ)?1)]L(P,\lambda,\mu)= \sum_{\zeta \in D}[P(\zeta|\theta)logP(\zeta|\theta)+\lambda (P(\zeta|\theta)f_{\zeta}-\widetilde{f})+\mu(P(\zeta|\theta)-1)]L(P,λ,μ)=ζ∈D∑?[P(ζ∣θ)logP(ζ∣θ)+λ(P(ζ∣θ)fζ??f?)+μ(P(ζ∣θ)?1)]
應用拉格朗日函數的KKT條件
 ?LP=∑ζ∈DlogP(ζ∣θ)+1+λfζ+μ=0①?Lλ=∑ζ∈DP(ζ∣θ)fζ?f~=0②?Lμ=∑ζ∈DP(ζ∣θ)?1=0③\begin{array} {cl} \nabla L_P =& \sum_{\zeta \in D}logP(\zeta|\theta)+1+\lambda f_{\zeta}+\mu=0 &①\\ \nabla L_{\lambda}=&\sum_{\zeta\in D}P(\zeta| \theta)f_\zeta - \widetilde{f} = 0 &②\\ \nabla L_{\mu} =& \sum_{\zeta \in D}P(\zeta | \theta)-1=0 &③ \end{array} ?LP?=?Lλ?=?Lμ?=?∑ζ∈D?logP(ζ∣θ)+1+λfζ?+μ=0∑ζ∈D?P(ζ∣θ)fζ??f?=0∑ζ∈D?P(ζ∣θ)?1=0?①②③?
 由①③式得
 P(ζ∣θ)=exp(?1?μ?λfζ)∑ζ∈Dexp(?1?μ?λfζ)P(\zeta|\theta)=\frac{exp(-1-\mu-\lambda f_{\zeta})}{\sum_{\zeta \in D}exp(-1-\mu-\lambda f_{\zeta})}P(ζ∣θ)=∑ζ∈D?exp(?1?μ?λfζ?)exp(?1?μ?λfζ?)?
 \qquad光靠這個式子肯定是解不出最優的θ\thetaθ的,這就要提到原paper的另一個假設——使用θ\thetaθ參數的Reward函數Rθ(τ)R_\theta(\tau)Rθ?(τ)時,ζ\zetaζ軌跡的概率P(ζ∣θ)P(\zeta|\theta)P(ζ∣θ)正比于Rθ(ζ)R_{\theta}(\zeta)Rθ?(ζ)的自然指數,再加上概率歸一性約束,可得專家系統策略的軌跡概率為:
 P(ζ∣θ)=exp(Rθ(ζ))∫τ∈D[exp(Rθ(τ))dτ]P(\zeta|\theta)=\frac{exp(R_\theta(\zeta))}{\int_{\tau\in D}\left[{exp(R_{\theta}(\tau))}{\rm d}\tau \right]} P(ζ∣θ)=∫τ∈D?[exp(Rθ?(τ))dτ]exp(Rθ?(ζ))?
 需要注意的是,這里的R(θ)R(\theta)R(θ)指的是累積獎賞而非單步獎賞。
 
 上式中的ZZZ在paper中又被稱為partial function,原文是已知原系統的dynamic model的,即已知系統的狀態轉移概率。在不知道狀態轉移概率時ZZZ無法直接求得,通常也有三種方法:
有讀者肯定會疑問,原paper中給出的損失函數不是最大信息熵而是最大似然,這又是為什么。原paper中給出了一個讓人難以理解的解釋:
Maximizing the entropy of the distribution over paths subject to the feature constraints from observed data implies that we maximize the likelihood of the observed data under the maximum entropy (exponential family) distribution derived above (Jaynes 1957).
——即從觀測數據上滿足feature matching的約束(約束1)的條件下最大化軌跡分布的信息熵等價于在最大信息熵分布的條件下從觀測數據最大化似然。本文不對此深究,感興趣的朋友可以研究一下下面這篇論文
Jaynes, E. T. 1957. Information theory and statistical mechanics. Physical Review 106:620–630.
\qquad而假設是專家系統是最大熵分布的,因此對專家軌跡概率使用最大似然,得到
 L(θ)=∑ζ∈Elogp(ζ∣θ)L(\theta)=\sum_{\zeta\in E}logp(\zeta|\theta)L(θ)=ζ∈E∑?logp(ζ∣θ)
 即軌跡概率的最大似然。代入最大熵分布下的軌跡概率公式(其中E代表Expert的軌跡空間,而D代表Agent的軌跡空間(可以認為是全部軌跡空間),E的采樣空間是與損失函數直接掛鉤的,而D的采樣空間則用來對ZZZ估計的):
 L(θ)=∑τ∈Elogp(τ∣θ)=∑τ∈Elog1Zexp(Rθ(τ))=∑τ∈ERθ(τ)?MlogZ=∑τ∈ERθ(τ)?Mlog∑τ∈Dexp(Rθ(τ))?θL=∑τ∈EdRθ(τ)dθ?M1∑τ∈Dexp(Rθ(τ))∑τ∈D[exp(Rθ(τ))dRθ(τ)dθ]=∑τ∈EdRθ(τ)dθ?M∑τ∈D[exp(Rθ(τ))∑τ∈Dexp(Rθ(τ))dRθ(τ)dθ]=∑τ∈EdRθ(τ)dθ?M∑τ∈D[p(τ∣θ)dRθ(τ)dθ]=∑τ∈EdRθ(τ)dθ?M∑si∈S[p(s∣θ)drθ(s)dθ]\begin{aligned} L(\theta) &=\sum_{\tau\in E}logp(\tau|\theta)\\ &=\sum_{\tau\in E}log\frac{1}{Z}exp(R_{\theta}(\tau))\\ &=\sum_{\tau\in E}R_{\theta}(\tau)-MlogZ\\ &=\sum_{\tau\in E}R_{\theta}(\tau)-Mlog\sum_{\tau\in D}exp(R_{\theta}(\tau))\\ \nabla _{\theta}L&=\sum_{\tau \in E}\frac{dR_{\theta}(\tau)}{d\theta}-M\frac{1}{\sum_{\tau\in D}exp(R_{\theta}(\tau))}\sum_{\tau\in D}\left[exp(R_{\theta}(\tau))\frac{dR_{\theta}(\tau)}{d\theta}\right]\\ &=\sum_{\tau \in E}\frac{dR_{\theta}(\tau)}{d\theta}-M\sum_{\tau\in D}\left[\frac{exp(R_{\theta}(\tau))}{\sum_{\tau\in D}exp(R_{\theta}(\tau))}\frac{dR_{\theta}(\tau)}{d\theta}\right]\\ &=\sum_{\tau \in E}\frac{dR_{\theta}(\tau)}{d\theta}-M\sum_{\tau\in D}\left[p(\tau|\theta)\frac{dR_{\theta}(\tau)}{d\theta} \right]\\ &=\sum_{\tau \in E}\frac{dR_{\theta}(\tau)}{d\theta}-M\sum_{s_i\in S}\left[p(s|\theta)\frac{dr_{\theta}(s)}{d\theta} \right]\\ \end{aligned} L(θ)?θ?L?=τ∈E∑?logp(τ∣θ)=τ∈E∑?logZ1?exp(Rθ?(τ))=τ∈E∑?Rθ?(τ)?MlogZ=τ∈E∑?Rθ?(τ)?Mlogτ∈D∑?exp(Rθ?(τ))=τ∈E∑?dθdRθ?(τ)??M∑τ∈D?exp(Rθ?(τ))1?τ∈D∑?[exp(Rθ?(τ))dθdRθ?(τ)?]=τ∈E∑?dθdRθ?(τ)??Mτ∈D∑?[∑τ∈D?exp(Rθ?(τ))exp(Rθ?(τ))?dθdRθ?(τ)?]=τ∈E∑?dθdRθ?(τ)??Mτ∈D∑?[p(τ∣θ)dθdRθ?(τ)?]=τ∈E∑?dθdRθ?(τ)??Msi?∈S∑?[p(s∣θ)dθdrθ?(s)?]?
 歸一化的損失函數為:
 ?θL ̄=1M∑τ∈EdRθ(τ)dθ?∑si∈S[p(s∣θ)drθ(s)dθ]\nabla _{\theta}\overline{L}=\frac{1}{M}\sum_{\tau \in E}\frac{dR_{\theta}(\tau)}{d\theta}-\sum_{s_i\in S}\left[p(s|\theta)\frac{dr_{\theta}(s)}{d\theta} \right]?θ?L=M1?τ∈E∑?dθdRθ?(τ)??si?∈S∑?[p(s∣θ)dθdrθ?(s)?]
 其中M是專家軌跡的條數,如果狀態空間是無限的,則不能直接套用此公式(但不代表無法解決)。
 對于線性Reward,軌跡的累積Reward為
 Rθ(ζ)=θTfζ=∑sj∈ζθTfsjR_{\theta}(\zeta)=\theta ^T f_{\zeta}=\sum_{s_j\in \zeta}\theta ^T f_{s_j}Rθ?(ζ)=θTfζ?=sj?∈ζ∑?θTfsj??
 Expert產生的Feature Expectation為
 f~=1m∑ifζ~i\widetilde{f}=\frac{1}{m}\sum_{i}f_{\widetilde{\zeta}_i}f?=m1?i∑?fζ?i??
 損失函數梯度可表示為:
 ?θL=f~?∑si∈SDsifsi\nabla_{\theta}L=\widetilde{f}-\sum_{s_i\in S}D_{s_i}f_{si}?θ?L=f??si?∈S∑?Dsi??fsi?
 其中D為狀態訪問頻次(State Visitiation Frequency),可以通過不斷與環境互動近似出。
 總結一下這個公式的推導需要注意一下幾點:
2.仿真
\qquad本文的仿真平臺參照了github上的資源,并進行了略微修改(仿真環境在學徒學習那篇有了詳細介紹,在此就不再贅述了):
GitHub源代碼
 本文點贊破百,解鎖額外代碼(DQN+maxEnt)
使用方法仍然是直接運行train.py即可(注意需要在mountaincar/maxent/的目錄下運行)。和學徒學習的代碼一樣,也是基于Q-Table的。
 \qquad源代碼中對Feature沒有做任何的提取,直接將每個狀態(20個位置采樣×20個速度采樣總共400個離散狀態)作為Feature。假設不同特征之間是解耦的,Feature Matrix就是對角矩陣,即因此狀態訪問頻次×特征即特征訪問頻次。
 \qquad在源代碼中learner_feature_expectations即特征訪問頻次,而歸一化之后即為梯度的第二項
 源代碼的其中一部分如下:
看完原github的程序,本人還有一個疑點,即是maxent.py文件中的一段
def maxent_irl(expert, learner, theta, learning_rate):gradient = expert - learnertheta += learning_rate * gradient# Clip thetafor i in range(len(theta)):if theta[i]>0:theta[i]=0\qquad原文中的clip theta實際上是防止theta超過0,類似于深度學習中的梯度截斷操作,然而這個操作在我嘗試多次之后并無用處,而且也沒有任何意義(因為在theta>0后,也會在下一次迭代時通過學習使得theta重新<0)。本人的建議是增加一個學習率遞減的schedule,并且將clip的范圍從[-inf,0]修改到[-0.5,0.5],可以獲得相對穩定的學習率曲線,下面分別是clip(-0.5,0.5)和clip(-0.5,0)的對比:
\qquad可以發現增加一部分梯度的正向范圍反而更有利于學習,這是由于expert-learn的極小值是在0處取得的,然而在學習率固定時,改函數會在離散迭代時在0附近震蕩,梯度若在0處截斷會導致學習率銳減為0(可能正是原作者用意?)。
下面是test.py保存的幾組gif的圖
希望本文對您有幫助,謝謝閱讀!
總結
以上是生活随笔為你收集整理的【逆强化学习-2】最大熵学习(Maximum Entropy Learning)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Oracle 的 char number
- 下一篇: C#单例模式的简单使用
