天天看點

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

本文為 AI 研習社編譯的技術部落格,原标題 :

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

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

從本系列課程開始,我們研究了兩種不同的強化學習方法:

基于數值的方法(Q-learning,Deep Q-learning):該方法是學習一個值函數,該值函數将每組狀态、動作映射到一個數值。多虧了這個方法, 可以找到了每個狀态的最佳行動 - 具有最大Q值的行動。當行動個數有限時,該方法很有效。

基于政策函數的方法(政策梯度方法之REINFORCE 算法):我們不使用值函數,而直接優化政策。當動作空間是連續的或随機時,這很有效。該方法的主要問題是找到一個好的評分函數來計算政策的好壞程度。我們使用episode的總獎賞作為評分函數(每個Episode中獲得的獎勵之和)。

但這兩種方法都有很大的缺點。這就是為什麼今天我們将研究一種新型的強化學習方法,我們稱之為“混合方法”: Actor Critic(AC)。我們将用到兩個神經網絡:

衡量所采取的行動的好壞的評價器(critic)(基于值函數)

控制智能體行為方式的行動者(actor)(基于政策)

掌握這種架構對于了解最先進的算法(如近端政策優化Proximal Policy Optimization,又名PPO)至關重要。PPO是基于Advantage Actor Critic(優勢行動者評論家算法)。

本文中,你将通過Advantage Actor Critic(A2C)來實作一個可以學習如何玩刺猬索尼克的智能體!

  尋找更好的學習模型

政策梯度存在的問題

政策梯度法有一個很大的問題是,當使用蒙特卡洛政策梯度方法時,會等到整個情景episode結束後計算獎勵。據此可以得出結論,若結果回報值很高R(t),整個情景中所做的行動都被是指定為是有利的(行動),即使有些行動非常糟糕。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

正如我們在這個例子中所看到的,盡管A3 是一個不好的行動(會造成負獎勵),總回報(total reward)的重要評分使得所有被執行過的行動的政策參數被平均。

是以,學習模型要獲得最優政策,就需要大量樣本。是以導緻訓練過程耗時,因為這需要花費大量的時間來收斂loss函數。

那麼,如果我們可以在每個時間步對參數進行更新,結果會有什麼不同?

  介紹Actor Critic (表演者-評論家)

表演者-評論家模型是一個更好的得分函數。我們不會像在蒙特卡洛這種傳統強化學習方法那樣,等到情景episode結束才更新參數,而是在每個步驟進行更新(即時序差分學習,TD學習)。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

因為每個時間步都進行參數更新,是以不再使用總回報R(t)。我們還需要訓練一個與值函數近似的評論家模型(記得,值函數是通過給定狀态和動作計算的最大未來回報的期望值)。這個值函數被用來代替使用政策梯度時的獎勵函數。

ctor Critic 是如何運作的

想一下,你和你的朋友一起玩視訊遊戲,你朋友一直回應你。你就是表演者,你朋友是評論家。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

剛開始,你不會玩,是以你随機嘗試一些行動。評論家(你朋友)将對你的行為的評價回報給你。

通過在回報中學習,你不斷更新玩遊戲的政策,并玩的越來越好了。

另一方面,你的朋友(評論家)也會更新他們提供回報的方式,以便下次更好。

在我們看來,這個表演者-評論家的思想需要兩個神經網絡。我們給出兩者表達式:

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

ACTOR:一個控制智能體行為的政策函數

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

CRITIC:一個衡量這些行為好壞程度的值函數

兩個模型同時運作。

因為我們有兩個模型(Actor和Critic)需要被訓練,是以需要分别優化兩組權重(用于行動的 和用于評論的w)

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

Actor Critic表演-評論過程

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

在每個時間步,我們從環境中擷取目前狀态(St),并将其作為輸入傳到Actor表演者和Critic評論家兩模型中。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

我們的政策獲得狀态,輸出一行動(At),并再接收一個新狀态(St+1)和獎勵(Rt+1)。

多虧那樣:

評論家模型計算目前狀态下采用某行動的得分q

表演者模型使用這個q值更新自身的政策權重

深度強化學習從入門到大師:簡單介紹A3C (第五部分)
深度強化學習從入門到大師:簡單介紹A3C (第五部分)

因為這一步的參數更新,使得在新狀态St+1到來時,Actor可以擷取到對應的行動At+1,随後,Critic更新他的參數值。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

  A2C 和 A3C

介紹平穩地學習的優勢函數Advantage function

在 深度Q學習的改進 這篇文章中我們了解,基于值函數的方法具有大的訓練波動。

這裡我們讨論了優勢函數的使用,就是為了緩解這個問題。

優勢函數定義如下:

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

該函數給出相比在目前狀态下采用平均行動(動作值函數)的優勢值。換句話說,如果我采取這個行動,該函數計算我這個行動得到的獎勵。

(注:優勢函數的目的是,使用動作值函數減去了對應狀态擁有的基準值,使之變為動作帶來的增益,進而因而降低因狀态基準值的變化引起的方差)

如果 A(s,a) > 0: 梯度将朝梯度的那個方向更進一步。

如果 A(s,a) < 0:(我們的行為比該狀态的平均值更差),梯度将朝相反的方向進一步。

實作這個優勢函數的需要兩個值函數-- Q(s,a) 和 V(s) 。幸運的是,我們可以使用 差分時間序列誤差TD Error 作為該優勢函數的(無偏)估計。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

(Q(s,a)是動作值函數,V(s)也就是在狀态s下所有動作值函數動作機率的期望)

  兩種不同的政策:異步或同步

我們有兩種不同的政策來實作Actor Critic智能體:

A2C(又名優勢演員評論家)

A3C(又名異步優勢演員評論家)

是以,我們使用與A2C,而不是A3C。如果您想看到完整的A3C實作,請檢視 Arthur Juliani的優秀文章  A3C  和  Doom 實作。

在A3C中,我們不使用經驗回放,因為這需要大量記憶體。不同的是,我們可以并行的在多個環境執行個體上異步執行不同的智能體。(可多核CPU跑)每個work(網絡模型的副本)将異步地更新全局網絡。

另一方面,A2C與A3C的唯一差別是A2C是同步更新全局網絡。我們等到所有works完成訓練後,計算他們的梯度的均值,以更新全局網絡參數。

選擇A2C還是A3C?

這篇很棒的文章解釋了A3C存在的問題 。由于A3C的異步特性,一些works(智能體的副本)使用較舊版本的參數。是以,這樣幾個work聚合地更新參數不是最好的。

這就是為什麼A2C在更新全局參數之前等待每個actor模型完成他們網絡的各自部分的經驗訓練的原因。然後,我們重新開始一個使用各自部分經驗的新訓練,并且所有并行模型具有相同的新參數。

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

此架構思想受益于這篇文章

是以,訓練過程将使得模型間更密切聯系,并且訓練更快速度。

實作一個玩刺猬索尼克的A2C智能體

實際情況中的A2C

實際上,正如 Reddit文章中 所解釋的那樣 , 因為A2C的同步性,所有我們不需要 A2C 的不同版本(不同的work)。

A2C中的每個work都具有相同的權重集,與A3C不同的是,A2C同時更新所有work(的參數)。

實際上,我們建立了多種版本的環境(比如八個),然後将它們并行地執行。

該過程如下:

深度強化學習從入門到大師:簡單介紹A3C (第五部分)

使用“multiprocessing”庫建立一個具有n個環境的向量

建立一個對象“runner”,用來并行處理不同的環境

使用兩種網絡模型:

step_model:  從環境中産生經驗樣本

train_model:  訓練經驗樣本

當 runner 邁出一步時(單步模型),将分别從n個環境中的每個環境執行一個步驟,并輸出了一批經驗樣本。

然後使用 train_model 和在這一批經驗樣本上計算(所有work)梯度。

最後,使用計算得出的新權重更新單步模型。

請記住,這樣一次計算所有梯度和每個 work 分别收集資料,并計算每個勞工的梯度,然後求全局平均值是一樣的。為什麼?因為求導數的和(梯度的總和)與求和的導數相同。但求和的導數是使用GPU更好的方式(節省訓練時間)。

刺猬索尼克的A2C

目前,我們了解了A2C一般的運作方式,我們可以開發這個玩索尼克的A2C智能體了!這個視訊展示了我們的智能體訓練10分鐘(左)和訓練10小時(右)的行為對比。

A2C Agent playing Sonic the Hedgehog (Left 1 update // Right 260)

實作代碼在GitHub上能找到(here), 代碼的細節在notebook中給出了解釋。我還給你一個在GPU上訓練了10+小時的模型。

這個代碼實作比以前的代碼要複雜好多。我們要開始複現最先進的算法,是以需要代碼的更高的效率。這也是為什麼,我們将整個code分為不同對對象和檔案來實作代碼。

Understand A2C implementation playing Sonic the Hedgehog

就像這樣!你剛剛建立了一個學習玩刺猬索尼克的智能體。 好棒!我們可以看到,在10小時的訓練中,智能體還是不了解“looping”,是以我們需要使用更穩定的架構:PPO。

花點時間來想想我們從第一節課到現在取得的所有成就:從簡單的文本遊戲(OpenAI taxi-v2)到像毀滅戰士、索尼克這些複雜的遊戲,我們采用越來越複雜的模型結構。這真是極好的!

下次,我們會來了解近端政策梯度,這個結構赢得了 OpenAI 遷移學習競賽,我們将訓練智能體玩索尼克2和索尼克3的全部關卡。

不要忘了,親自寫寫代碼實作每個部分。試着添加epochs,改模型架構,調整學習率等等。嘗試是最好的學習方式,玩的愉快~

想要繼續檢視該篇文章相關連結和參考文獻?

長按連結點選打開或點選底部【深度強化學習從入門到大師:簡單介紹A3C(第五部分)】:

https://ai.yanxishe.com/page/TextTranslation/1407

【點選檢視本系列文章】

深度強化學習從入門到大師:簡介篇(第一部分)

深度強化學習從入門到大師:通過Q學習進行強化學習(第二部分)

深度強化學習從入門到大師:以Doom為例一文帶你讀懂深度Q學習(第三部分 - 上)

深度強化學習從入門到大師:進一步了解深度Q學習(第三部分 - 下)

深度強化學習從入門到大師:以 Cartpole 和 Doom 為例介紹政策梯度 (第四部分)

AI研習社每日更新精彩内容,觀看更多精彩内容:雷鋒網雷鋒網(公衆号:雷鋒網)雷鋒網

7分鐘了解Tensorflow.js

在Keras中了解和程式設計ResNet

初學者怎樣使用Keras進行遷移學習

如果你想學資料科學,這 7 類資源千萬不能錯過

等你來譯:

深度學習目标檢測算法綜述

一文教你如何用PyTorch建構 Faster RCNN

進階DQNs:利用深度強化學習玩吃豆人遊戲

用于深度強化學習的結構化控制網絡 (ICML 論文講解)

繼續閱讀