前幾天聽到一聲廣告語:只要你愿意赋荆,從現(xiàn)在開始努力,最壞的結(jié)果不過是大器晚成懊昨。好了窄潭,既然我們決定要努力,要怎么做呢酵颁?我們要有自己的一套方法論嫉你,如何得到自己的方法論呢?最簡單的方法就是從成功者的身上去學(xué)習(xí)躏惋,在學(xué)習(xí)的基礎(chǔ)上幽污,結(jié)合自身的情況和經(jīng)驗(yàn),不斷完善形成自己的一套方法論簿姨,進(jìn)而取得成功距误。這其實(shí)就是我們今天要介紹的反向強(qiáng)化學(xué)習(xí)方法(Inverse Reinforcement Learning)的基本思想。同時(shí)扁位,也作為辭舊迎新的話語准潭,激勵(lì)自己和大家在新的一年里,不斷努力域仇,砥礪前行刑然。
本文首先將介紹反向強(qiáng)化學(xué)習(xí)的基本概念和實(shí)現(xiàn)思路;隨后將介紹其中一種結(jié)合GAN思想的反向強(qiáng)化學(xué)習(xí)方法:GAIL暇务;最后泼掠,將介紹一下GAIL的代碼實(shí)現(xiàn)思路。
1垦细、反向強(qiáng)化學(xué)習(xí)基礎(chǔ)
反向強(qiáng)化學(xué)習(xí)也稱為模仿學(xué)習(xí)(Imitation Learning)或學(xué)徒學(xué)習(xí)(Apprentice Learning)择镇。
在強(qiáng)化學(xué)習(xí)中,我們的基本思路是通過agent與環(huán)境的交互蝠检,根據(jù)環(huán)境對(duì)于agent在某一狀態(tài)下所采取動(dòng)作的回報(bào)沐鼠,對(duì)agent的策略進(jìn)行更新,從而獲得最大化的長期期望收益叹谁。也就是說,強(qiáng)化學(xué)習(xí)通常是在回報(bào)已知的情況下求出值函數(shù)和策略乘盖。但是如果回報(bào)我們無法獲得呢焰檩?反向強(qiáng)化學(xué)習(xí)使用了逆向思維,我們不通過回報(bào)求策略订框,而是反過來析苫,根據(jù)策略求回報(bào)。
這聽上去有點(diǎn)荒謬,我們想通過交互獲得回報(bào)衩侥,就是為了求解更好的策略国旷,現(xiàn)在有了策略,我們?yōu)槭裁催€要去求回報(bào)呢茫死?因?yàn)楹芏鄷r(shí)候跪但,我們擁有的不是最優(yōu)的策略,而是基于這些策略的一些樣本峦萎。
想象我們想要學(xué)習(xí)打羽毛球屡久,雖然我們無法像專業(yè)運(yùn)動(dòng)員那樣擁有超強(qiáng)的戰(zhàn)術(shù)策略,但是我們可以通過觀察他們的比賽錄像爱榔,通過觀察他們?cè)诓煌闆r下的不同擊球策略被环,來不斷提高我們自身的球技。實(shí)際上详幽,我們?cè)趯?shí)際情況下也是這么做的:在家不斷學(xué)習(xí)高手的動(dòng)作要領(lǐng)筛欢,并銘記于心,然后回到球場上一試身手唇聘。實(shí)際上版姑,這就是一個(gè)從反向強(qiáng)化學(xué)習(xí)到強(qiáng)化學(xué)習(xí)的過程。首先通過最優(yōu)策略的交互樣本學(xué)習(xí)到回報(bào)函數(shù)雳灾,即不同的情境下的不同擊球方式(扣殺球漠酿,放小球,球速谎亩,擊球高度等等)炒嘲,能夠獲得的回報(bào)是怎樣的。接下來就可以通過得到回報(bào)函數(shù)進(jìn)行嘗試匈庭,使用強(qiáng)化學(xué)習(xí)的方法得到最終的策略夫凸。
好了,我們給出反向強(qiáng)化學(xué)習(xí)的一般思路:
- 隨機(jī)生成一個(gè)策略作為agent的初始策略阱持。
- 通過比較高手的交互樣本和自身的交互樣本夭拌,學(xué)習(xí)得到回報(bào)函數(shù)
- 利用回報(bào)函數(shù)進(jìn)行強(qiáng)化學(xué)習(xí),提升自己的策略水平
- 如果自身的策略所能得到的獎(jiǎng)勵(lì)和高手的策略差不多衷咽,就可以停止學(xué)習(xí)鸽扁,否則返回第二步繼續(xù)學(xué)習(xí)。
2镶骗、GAIL的基本思路
本節(jié)我們簡單介紹一種反向強(qiáng)化學(xué)習(xí)的實(shí)現(xiàn)思路桶现,這種思路結(jié)合了GAN的思想,稱為:GAIL(Generative Adversarial Imitation Learning)鼎姊。
簡單回顧下GAN骡和,在GAN中相赁,我們有Generator和Discriminator。其最初主要應(yīng)用于圖像生成慰于,因此我們以圖像生成這一應(yīng)用來介紹下它的主要流程:在圖像生成中钮科,Generator要用來學(xué)習(xí)真實(shí)圖像分布從而讓自身生成的圖像更加真實(shí),以騙過Discriminator婆赠。Discriminator則需要對(duì)接收的圖片進(jìn)行真假判別绵脯。在整個(gè)過程中,Generator努力地讓生成的圖像更加真實(shí)页藻,而Discriminator則努力地去識(shí)別出圖像的真假桨嫁,這個(gè)過程相當(dāng)于一個(gè)二人博弈,隨著時(shí)間的推移份帐,Generator和Discriminator在不斷地進(jìn)行對(duì)抗璃吧,最終兩個(gè)網(wǎng)絡(luò)達(dá)到了一個(gè)動(dòng)態(tài)均衡:Generator生成的圖像接近于真實(shí)圖像分布,而Discriminator識(shí)別不出真假圖像废境,對(duì)于給定圖像的預(yù)測(cè)為真的概率基本接近 0.5(相當(dāng)于隨機(jī)猜測(cè)類別)畜挨。
回到GAIL中,我們?cè)撊绾螒?yīng)用GAN的思想呢噩凹。在這之前巴元,我們首先要做出假設(shè),即我們已有的高手的策略就是最優(yōu)策略驮宴,在不同的狀態(tài)s下所采取的動(dòng)作a就是最優(yōu)的動(dòng)作逮刨。
在GAIL中,Generator其實(shí)就是我們的Agent堵泽,它會(huì)根據(jù)不同的state修己,采取不同的動(dòng)作。而Discriminator將要努力區(qū)分高手的行動(dòng)和agent的行動(dòng)迎罗。對(duì)Discriminator來說睬愤,我們可以轉(zhuǎn)化成一個(gè)簡單的二分類問題,即將當(dāng)前的狀態(tài)和動(dòng)作作為輸入纹安,得到這個(gè)動(dòng)作是最優(yōu)動(dòng)作的概率尤辱。如果這個(gè)狀態(tài)-動(dòng)作對(duì)來自高手的交互樣本,那么Discriminator希望得到的概率越接近于1越好厢岂,而如果這個(gè)狀態(tài)-動(dòng)作對(duì)來自Generator的交互樣本光督,那么Discriminator希望得到的概率越接近于0越好。對(duì)Generator來說塔粒,我們希望自己的策略越接近于高手的策略可帽,那么就可以使用Discriminator輸出的概率作為獎(jiǎng)勵(lì),來更新自身的策略窗怒,如果Discriminator給出的概率越高映跟,說明我們?cè)谶@一狀態(tài)下采取的動(dòng)作是一個(gè)較優(yōu)的動(dòng)作,我們就提高該動(dòng)作出現(xiàn)的概率扬虚,反之則是一個(gè)較差的動(dòng)作努隙,降低其出現(xiàn)的概率。
以上就是GAIL的基本思路辜昵,是不是跟GAN如出一轍荸镊?
3、GAIL的代碼實(shí)現(xiàn)
結(jié)下來堪置,我們來看一下如何實(shí)現(xiàn)GAIL躬存,這里我們不給出具體的代碼,只給出具體的實(shí)現(xiàn)思路舀锨。
代碼地址為:https://github.com/princewen/tensorflow_practice/tree/master/RL/Basic-GAIL-Demo
代碼結(jié)構(gòu)如下:
我們按照以下幾步來實(shí)現(xiàn)GAIL岭洲。
訓(xùn)練一個(gè)高手
首先運(yùn)行run_ppo.py文件,該文件會(huì)通過PPO算法來訓(xùn)練一個(gè)agent坎匿,如果訓(xùn)練的agent能夠滿足我們的高手定義盾剩,則終止學(xué)習(xí),此時(shí)學(xué)習(xí)到的agent我們就認(rèn)為是一個(gè)高手替蔬。
得到高手的交互序列
接下來告私,我們運(yùn)行sample_trajectory.py文件,得到高手的狀態(tài)-動(dòng)作對(duì)承桥,保存在trajectory文件夾下驻粟。
訓(xùn)練GAIL模型
接下來運(yùn)行run_gail.py文件,基于上述介紹的GAIL的基本思路凶异,來進(jìn)行學(xué)習(xí)蜀撑。
檢驗(yàn)學(xué)習(xí)成果
最后,運(yùn)行test_policy.py文件唠帝,我們可以檢驗(yàn)一下我們通過GAIL學(xué)習(xí)到的agent的學(xué)習(xí)成果屯掖。
本文GAIL模型就介紹到這里啦。最后襟衰,祝大家新年快樂啦贴铜!