0
本文作者: AI研習(xí)社-譯站 | 2019-01-15 10:24 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
An intro to Advantage Actor Critic methods: let’s play Sonic the Hedgehog!
作者 | Thomas Simonini
翻譯、校對 | 斯蒂芬?二狗子
審核 | 鄧普斯?杰弗
整理 | 菠蘿妹
原文鏈接:
https://medium.freecodecamp.org/an-intro-to-advantage-actor-critic-methods-lets-play-sonic-the-hedgehog-86d6240171d
深度強(qiáng)化學(xué)習(xí)從入門到大師:簡單介紹A3C (第五部分)
從本系列課程開始,我們研究了兩種不同的強(qiáng)化學(xué)習(xí)方法:
基于數(shù)值的方法(Q-learning,Deep Q-learning):該方法是學(xué)習(xí)一個值函數(shù),該值函數(shù)將每組狀態(tài)、動作映射到一個數(shù)值。多虧了這個方法, 可以找到了每個狀態(tài)的最佳行動 - 具有最大Q值的行動。當(dāng)行動個數(shù)有限時,該方法很有效。
基于策略函數(shù)的方法(策略梯度方法之REINFORCE 算法):我們不使用值函數(shù),而直接優(yōu)化策略。當(dāng)動作空間是連續(xù)的或隨機(jī)時,這很有效。該方法的主要問題是找到一個好的評分函數(shù)來計算策略的好壞程度。我們使用episode的總獎賞作為評分函數(shù)(每個Episode中獲得的獎勵之和)。
但這兩種方法都有很大的缺點(diǎn)。這就是為什么今天我們將研究一種新型的強(qiáng)化學(xué)習(xí)方法,我們稱之為“混合方法”: Actor Critic(AC)。我們將用到兩個神經(jīng)網(wǎng)絡(luò):
衡量所采取的行動的好壞的評價器(critic)(基于值函數(shù))
控制智能體行為方式的行動者(actor)(基于策略)
掌握這種架構(gòu)對于理解最先進(jìn)的算法(如近端策略優(yōu)化Proximal Policy Optimization,又名PPO)至關(guān)重要。PPO是基于Advantage Actor Critic(優(yōu)勢行動者評論家算法)。
本文中,你將通過Advantage Actor Critic(A2C)來實(shí)現(xiàn)一個可以學(xué)習(xí)如何玩刺猬索尼克的智能體!
策略梯度法有一個很大的問題是,當(dāng)使用蒙特卡洛策略梯度方法時,會等到整個情景episode結(jié)束后計算獎勵。據(jù)此可以得出結(jié)論,若結(jié)果回報值很高R(t),整個情景中所做的行動都被是指定為是有利的(行動),即使有些行動非常糟糕。
正如我們在這個例子中所看到的,盡管A3 是一個不好的行動(會造成負(fù)獎勵),總回報(total reward)的重要評分使得所有被執(zhí)行過的行動的策略參數(shù)被平均。
因此,學(xué)習(xí)模型要獲得最優(yōu)策略,就需要大量樣本。因此導(dǎo)致訓(xùn)練過程耗時,因?yàn)檫@需要花費(fèi)大量的時間來收斂loss函數(shù)。
那么,如果我們可以在每個時間步對參數(shù)進(jìn)行更新,結(jié)果會有什么不同?
表演者-評論家模型是一個更好的得分函數(shù)。我們不會像在蒙特卡洛這種傳統(tǒng)強(qiáng)化學(xué)習(xí)方法那樣,等到情景episode結(jié)束才更新參數(shù),而是在每個步驟進(jìn)行更新(即時序差分學(xué)習(xí),TD學(xué)習(xí))。
因?yàn)槊總€時間步都進(jìn)行參數(shù)更新,所以不再使用總回報R(t)。我們還需要訓(xùn)練一個與值函數(shù)近似的評論家模型(記得,值函數(shù)是通過給定狀態(tài)和動作計算的最大未來回報的期望值)。這個值函數(shù)被用來代替使用策略梯度時的獎勵函數(shù)。
ctor Critic 是如何運(yùn)行的
想一下,你和你的朋友一起玩視頻游戲,你朋友一直回應(yīng)你。你就是表演者,你朋友是評論家。
剛開始,你不會玩,所以你隨機(jī)嘗試一些行動。評論家(你朋友)將對你的行為的評價反饋給你。
通過在反饋中學(xué)習(xí),你不斷更新玩游戲的策略,并玩的越來越好了。
另一方面,你的朋友(評論家)也會更新他們提供反饋的方式,以便下次更好。
在我們看來,這個表演者-評論家的思想需要兩個神經(jīng)網(wǎng)絡(luò)。我們給出兩者表達(dá)式:
ACTOR:一個控制智能體行為的策略函數(shù)
CRITIC:一個衡量這些行為好壞程度的值函數(shù)
兩個模型同時運(yùn)行。
因?yàn)槲覀冇袃蓚€模型(Actor和Critic)需要被訓(xùn)練,所以需要分別優(yōu)化兩組權(quán)重(用于行動的?和用于評論的w)
Actor Critic表演-評論過程
在每個時間步,我們從環(huán)境中獲取當(dāng)前狀態(tài)(St),并將其作為輸入傳到Actor表演者和Critic評論家兩模型中。
我們的策略獲得狀態(tài),輸出一行動(At),并再接收一個新狀態(tài)(St+1)和獎勵(Rt+1)。
多虧那樣:
評論家模型計算當(dāng)前狀態(tài)下采用某行動的得分q
表演者模型使用這個q值更新自身的策略權(quán)重
因?yàn)檫@一步的參數(shù)更新,使得在新狀態(tài)St+1到來時,Actor可以獲取到對應(yīng)的行動At+1,隨后,Critic更新他的參數(shù)值。
在 深度Q學(xué)習(xí)的改進(jìn) 這篇文章中我們了解,基于值函數(shù)的方法具有大的訓(xùn)練波動。
這里我們討論了優(yōu)勢函數(shù)的使用,就是為了緩解這個問題。
優(yōu)勢函數(shù)定義如下:
該函數(shù)給出相比在當(dāng)前狀態(tài)下采用平均行動(動作值函數(shù))的優(yōu)勢值。換句話說,如果我采取這個行動,該函數(shù)計算我這個行動得到的獎勵。
(注:優(yōu)勢函數(shù)的目的是,使用動作值函數(shù)減去了對應(yīng)狀態(tài)擁有的基準(zhǔn)值,使之變?yōu)閯幼鲙淼脑鲆?,從而因而降低因狀態(tài)基準(zhǔn)值的變化引起的方差)
如果 A(s,a) > 0: 梯度將朝梯度的那個方向更進(jìn)一步。
如果 A(s,a) < 0:(我們的行為比該狀態(tài)的平均值更差),梯度將朝相反的方向進(jìn)一步。
實(shí)現(xiàn)這個優(yōu)勢函數(shù)的需要兩個值函數(shù)-- Q(s,a) 和 V(s) 。幸運(yùn)的是,我們可以使用 差分時間序列誤差TD Error 作為該優(yōu)勢函數(shù)的(無偏)估計。
(Q(s,a)是動作值函數(shù),V(s)也就是在狀態(tài)s下所有動作值函數(shù)動作概率的期望)
我們有兩種不同的策略來實(shí)現(xiàn)Actor Critic智能體:
A2C(又名優(yōu)勢演員評論家)
A3C(又名異步優(yōu)勢演員評論家)
因此,我們使用與A2C,而不是A3C。如果您想看到完整的A3C實(shí)現(xiàn),請查看 Arthur Juliani的優(yōu)秀文章 A3C 和 Doom 實(shí)現(xiàn)。
在A3C中,我們不使用經(jīng)驗(yàn)回放,因?yàn)檫@需要大量內(nèi)存。不同的是,我們可以并行的在多個環(huán)境實(shí)例上異步執(zhí)行不同的智能體。(可多核CPU跑)每個work(網(wǎng)絡(luò)模型的副本)將異步地更新全局網(wǎng)絡(luò)。
另一方面,A2C與A3C的唯一區(qū)別是A2C是同步更新全局網(wǎng)絡(luò)。我們等到所有works完成訓(xùn)練后,計算他們的梯度的均值,以更新全局網(wǎng)絡(luò)參數(shù)。
選擇A2C還是A3C?
這篇很棒的文章解釋了A3C存在的問題 。由于A3C的異步特性,一些works(智能體的副本)使用較舊版本的參數(shù)。因此,這樣幾個work聚合地更新參數(shù)不是最好的。
這就是為什么A2C在更新全局參數(shù)之前等待每個actor模型完成他們網(wǎng)絡(luò)的各自部分的經(jīng)驗(yàn)訓(xùn)練的原因。然后,我們重新開始一個使用各自部分經(jīng)驗(yàn)的新訓(xùn)練,并且所有并行模型具有相同的新參數(shù)。
此架構(gòu)思想受益于這篇文章
因此,訓(xùn)練過程將使得模型間更密切聯(lián)系,并且訓(xùn)練更快速度。
實(shí)現(xiàn)一個玩刺猬索尼克的A2C智能體
實(shí)際情況中的A2C
實(shí)際上,正如 Reddit帖子中 所解釋的那樣 , 因?yàn)锳2C的同步性,所有我們不需要 A2C 的不同版本(不同的work)。
A2C中的每個work都具有相同的權(quán)重集,與A3C不同的是,A2C同時更新所有work(的參數(shù))。
實(shí)際上,我們創(chuàng)建了多種版本的環(huán)境(比如八個),然后將它們并行地執(zhí)行。
該過程如下:
使用“multiprocessing”庫創(chuàng)建一個具有n個環(huán)境的向量
創(chuàng)建一個對象“runner”,用來并行處理不同的環(huán)境
使用兩種網(wǎng)絡(luò)模型:
step_model: 從環(huán)境中產(chǎn)生經(jīng)驗(yàn)樣本
train_model: 訓(xùn)練經(jīng)驗(yàn)樣本
當(dāng) runner 邁出一步時(單步模型),將分別從n個環(huán)境中的每個環(huán)境執(zhí)行一個步驟,并輸出了一批經(jīng)驗(yàn)樣本。
然后使用 train_model 和在這一批經(jīng)驗(yàn)樣本上計算(所有work)梯度。
最后,使用計算得出的新權(quán)重更新單步模型。
請記住,這樣一次計算所有梯度和每個 work 分別收集數(shù)據(jù),并計算每個工人的梯度,然后求全局平均值是一樣的。為什么?因?yàn)榍髮?dǎo)數(shù)的和(梯度的總和)與求和的導(dǎo)數(shù)相同。但求和的導(dǎo)數(shù)是使用GPU更好的方式(節(jié)省訓(xùn)練時間)。
刺猬索尼克的A2C
目前,我們了解了A2C一般的運(yùn)行方式,我們可以開發(fā)這個玩索尼克的A2C智能體了!這個視頻展示了我們的智能體訓(xùn)練10分鐘(左)和訓(xùn)練10小時(右)的行為對比。
A2C Agent playing Sonic the Hedgehog ? (Left 1 update // Right 260)
實(shí)現(xiàn)代碼在GitHub上能找到(here), 代碼的細(xì)節(jié)在notebook中給出了解釋。我還給你一個在GPU上訓(xùn)練了10+小時的模型。
這個代碼實(shí)現(xiàn)比以前的代碼要復(fù)雜好多。我們要開始復(fù)現(xiàn)最先進(jìn)的算法,因此需要代碼的更高的效率。這也是為什么,我們將整個code分為不同對對象和文件來實(shí)現(xiàn)代碼。
Understand A2C implementation playing Sonic the Hedgehog
就像這樣!你剛剛創(chuàng)建了一個學(xué)習(xí)玩刺猬索尼克的智能體。 好棒!我們可以看到,在10小時的訓(xùn)練中,智能體還是不理解“l(fā)ooping”,所以我們需要使用更穩(wěn)定的架構(gòu):PPO。
花點(diǎn)時間來想想我們從第一節(jié)課到現(xiàn)在取得的所有成就:從簡單的文本游戲(OpenAI taxi-v2)到像毀滅戰(zhàn)士、索尼克這些復(fù)雜的游戲,我們采用越來越復(fù)雜的模型結(jié)構(gòu)。這真是極好的!
下次,我們會來了解近端策略梯度,這個結(jié)構(gòu)贏得了 OpenAI 遷移學(xué)習(xí)競賽,我們將訓(xùn)練智能體玩索尼克2和索尼克3的全部關(guān)卡。
不要忘了,親自寫寫代碼實(shí)現(xiàn)每個部分。試著添加epochs,改模型架構(gòu),調(diào)整學(xué)習(xí)率等等。嘗試是最好的學(xué)習(xí)方式,玩的愉快~
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長按鏈接點(diǎn)擊打開或點(diǎn)擊底部【深度強(qiáng)化學(xué)習(xí)從入門到大師:簡單介紹A3C(第五部分)】:
https://ai.yanxishe.com/page/TextTranslation/1407
【點(diǎn)擊查看本系列文章】
深度強(qiáng)化學(xué)習(xí)從入門到大師:簡介篇(第一部分)
深度強(qiáng)化學(xué)習(xí)從入門到大師:通過Q學(xué)習(xí)進(jìn)行強(qiáng)化學(xué)習(xí)(第二部分)
深度強(qiáng)化學(xué)習(xí)從入門到大師:以Doom為例一文帶你讀懂深度Q學(xué)習(xí)(第三部分 - 上)
深度強(qiáng)化學(xué)習(xí)從入門到大師:進(jìn)一步了解深度Q學(xué)習(xí)(第三部分 - 下)
深度強(qiáng)化學(xué)習(xí)從入門到大師:以 Cartpole 和 Doom 為例介紹策略梯度 (第四部分)
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。