0
雷鋒網(wǎng) AI 科技評(píng)論按:OpenAI 的 DOTA2 5v5 AI 「OpenAI Five」是人工智能界今年的一大亮點(diǎn)。作為「有挑戰(zhàn)性的多智能體連續(xù)控制任務(wù)」、DOTA2 玩家們的課外娛樂活動(dòng),以及 OpenAI 自己的重要技術(shù)展示和宣傳機(jī)會(huì),OpenAI 不僅有數(shù)人的團(tuán)隊(duì)專門負(fù)責(zé)這個(gè) AI 的研發(fā)調(diào)試,投入了 256 個(gè) V100 GPU、128000 個(gè) CPU、長達(dá)幾個(gè)月的訓(xùn)練時(shí)間(高昂的成本),也前前后后請(qǐng)了許多 DOTA 愛好者及(前)職業(yè)選手參與測(cè)試和調(diào)試。
成果自然是可圈可點(diǎn)的。從比賽結(jié)果來看,OpenAI Five 不僅多次戰(zhàn)勝了業(yè)余人類玩家和前職業(yè)選手團(tuán)隊(duì),即便對(duì)戰(zhàn)現(xiàn)役職業(yè)選手以及中國老職業(yè)選手們的比賽輸了,也仍有積極主動(dòng)、有一些還十分亮眼的表現(xiàn);技術(shù)方面,OpenAI 不僅發(fā)現(xiàn)用相對(duì)簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu)配合大規(guī)模分布式的先進(jìn)算法就已經(jīng)可以有不錯(cuò)的表現(xiàn),也在訓(xùn)練過程設(shè)計(jì)、超參數(shù)選擇、人類目標(biāo)如何量化等方面有了許多心得。(參見往期文章 DOTA 5v5 AI 的亮點(diǎn)不是如何「學(xué)」的,而是如何「教」的)甚至后來 OpenAI 的 CTO Greg Brockman 都發(fā)推表示,他們根據(jù)比賽中的表現(xiàn)對(duì)模型又做一些更新,AI 的表現(xiàn)也來到了新的高峰。
如果深入探究的話,雖然 OpenAI 自己沒有給出詳細(xì)的模型設(shè)計(jì)解釋,但是也有熱心研究人員在查找資料,試圖找到更多解釋這個(gè) AI 能有如此表現(xiàn)的原因。比如塔爾圖大學(xué)計(jì)算機(jī)學(xué)院計(jì)算神經(jīng)科學(xué)實(shí)驗(yàn)室的 Tambet Matiisen,他找到的其中一個(gè)重要原因,就是模型對(duì)嵌入的妙用。雷鋒網(wǎng) AI 科技評(píng)論把他的解析文章全文翻譯如下。
雖然關(guān)于 OpenAI 的 AI 的舉止以及關(guān)于這些比賽對(duì)于整個(gè) AI 界的意義的討論已經(jīng)不少了,但關(guān)于這些 AI 的訓(xùn)練方法和網(wǎng)絡(luò)架構(gòu)的技術(shù)分析異常地少。到目前為止,技術(shù)分析主要都源于最初 OpenAI Five 的博客文章。在某種程度上他們確實(shí)說得挺合理,他們使用標(biāo)準(zhǔn) PPO 算法(幾年前他們自己發(fā)明的)和經(jīng)過驗(yàn)證確實(shí)有效的自我訓(xùn)練方案(也在他們的一篇論文中記錄)是合理的。但博客文章中有一個(gè)容易錯(cuò)過的細(xì)節(jié),那就是指向他們的網(wǎng)絡(luò)架構(gòu)圖的一個(gè)超鏈接。
在這篇博文中,我想集中討論他們網(wǎng)絡(luò)架構(gòu)的一個(gè)方面,即他們創(chuàng)造性地使用嵌入來處理數(shù)量巨大并且可變的策略輸入和輸出。雖然嵌入以及注意力機(jī)制的點(diǎn)乘積的應(yīng)用是自然語言處理中的標(biāo)準(zhǔn)技術(shù),但它們并未廣泛用于強(qiáng)化學(xué)習(xí)中。
更新:在撰寫此博客文章后,我了解到后來的一篇 OpenAI 博客文章中有一個(gè)較新版本的網(wǎng)絡(luò)架構(gòu)圖。由于嵌入的使用沒有太多差異,我決定不重新更新這篇文章的圖像了,新網(wǎng)絡(luò)的分析可以作為大家的作業(yè)。
在數(shù)學(xué)中,嵌入指的是從空間 X 到 Y 的映射,同時(shí)保留對(duì)象的一些結(jié)構(gòu)(例如它們的距離)。然而,在神經(jīng)網(wǎng)絡(luò)的上下文中使用嵌入通常意味著將分類(離散)變量(例如,單詞索引)轉(zhuǎn)換為連續(xù)向量。直接將單詞索引作為輸入傳遞給網(wǎng)絡(luò)將使其工作變得非常困難,因?yàn)樗枰獮槊總€(gè)索引值都提供一個(gè)二進(jìn)制特征(假設(shè)它們是不相關(guān)的)。于是,我們通過一個(gè)網(wǎng)絡(luò)將分類值轉(zhuǎn)換為 one-hot (獨(dú)熱)矢量。如果將獨(dú)熱矢量與權(quán)重矩陣相乘,這就相當(dāng)于從權(quán)重矩陣中選擇一個(gè)給定的行。在各類神經(jīng)網(wǎng)絡(luò)開發(fā)庫中,通常會(huì)跳過轉(zhuǎn)換為獨(dú)熱矢量并乘以權(quán)重矩陣的步驟,而是直接使用索引從權(quán)重矩陣中選擇一行,并將其視為查找表。其中最重要的方面是,嵌入向量是通過學(xué)習(xí)得到的,就像使用獨(dú)熱向量學(xué)習(xí)權(quán)重矩陣一樣。
自然語言處理是嵌入應(yīng)用最有名的領(lǐng)域,其中單詞索引被轉(zhuǎn)換為詞向量(或嵌入)。已經(jīng)有充足的例子表明,當(dāng)訓(xùn)練網(wǎng)絡(luò)從字向量預(yù)測(cè)其周圍單詞的向量時(shí),詞向量就能學(xué)習(xí)到一些語義信息,并且它們之間可以進(jìn)行算術(shù)運(yùn)算。例如「woman - man + king」產(chǎn)生接近「queen」的矢量。你可以看作是「woman - man」產(chǎn)生性別轉(zhuǎn)移向量,添加「king」將其轉(zhuǎn)換為女性統(tǒng)治者。另一種理解方式是,你構(gòu)造了「king - man + woman」,那么「king - man」產(chǎn)生「ruler」(統(tǒng)治者)的矢量,并添加「woman」產(chǎn)生「queen」。
在我們深入研究具體細(xì)節(jié)之前,先簡(jiǎn)單介紹一下 OpenAI Five 的總體網(wǎng)絡(luò)架構(gòu)。
OpenAI Five 的五個(gè) AI 玩家每一個(gè)都有自己?jiǎn)为?dú)網(wǎng)絡(luò),有自己的輸入和動(dòng)作。(不確定五個(gè)網(wǎng)絡(luò)的參數(shù)是否共享。)五個(gè) AI 之間唯一的聯(lián)系是通過游戲,我個(gè)人開始想象他們會(huì)不會(huì)采用類似于「蜜蜂舞」的行為將敵人的位置傳達(dá)給彼此,但我不認(rèn)為他們真的會(huì)這樣做,甚至不需要這樣做。更新:在較新版本的網(wǎng)絡(luò)中,AI 之間有一個(gè)共享的最大池化層,可以將其視為單向廣播通信信道。
圖中網(wǎng)絡(luò)的上半部分處理觀察結(jié)果。它將來自各種來源的數(shù)據(jù)連接起來,并將所有內(nèi)容傳遞到一個(gè) LSTM單元格中。該 LSTM 單元的輸出由網(wǎng)絡(luò)的下半部分用于產(chǎn)生動(dòng)作。簡(jiǎn)而言之,就是觀察過程,將它們提供給 LSTM 并產(chǎn)生動(dòng)作的一個(gè)簡(jiǎn)單過程。當(dāng)然,細(xì)節(jié)決定一切,這將是我們?cè)谙乱还?jié)中討論的內(nèi)容。
OpenAI Five 的 AI 使用 Dota 2 的 API 來「看到」周圍的單位和建筑物。這會(huì)產(chǎn)生可變長度的單位列表(英雄,小兵,塔等)及其屬性。OpenAI 在他們的博客文章中對(duì)觀測(cè)空間和動(dòng)作空間可視化做的很好,我建議大家去原博客里感受一下 https://blog.openai.com/openai-five/#dota-diagram 。
下圖總結(jié)了對(duì)于列表中的某一個(gè)單位的處理過程。
在左上方我們可以看到每個(gè)單位被編碼成一個(gè)嵌入,這是完全可行的,因?yàn)?Dota2 中的 116 個(gè)英雄可以根據(jù)不同方式進(jìn)行分類:
主要屬性:力量,靈活性,智力。
攻擊類型:遠(yuǎn)程或近戰(zhàn)。
作用:核心,控制,對(duì)線輔助,先手,打野,輔助,耐久,爆發(fā),推進(jìn),逃生。
其中的每一個(gè)特性都可能在嵌入向量中形成一個(gè)維度,并且網(wǎng)絡(luò)可以自動(dòng)學(xué)習(xí)每個(gè)英雄中的核心、輔助或打野的成分是多少。 相同的嵌入也適用于小兵和建筑物,例如塔也有遠(yuǎn)程攻擊。這樣就形成了一種通用的方式,在網(wǎng)絡(luò)內(nèi)表示各種不同的單位。嵌入向量與其他單位屬性(如血量,英雄距離等)聯(lián)系在一起。
嵌入不僅僅可以用于單位的類型,它們也用于天賦、技能和物品。
同樣它也是有理可依的——雖然所有英雄的技能都不同,但它們肯定有一些共性,例如:他們的技能是主動(dòng)施放還是被動(dòng),如果他們需要目標(biāo),那么這個(gè)目標(biāo)是另一個(gè)單位還是一個(gè)區(qū)域等。對(duì)于物品的話,有用于治療的血瓶,有增加魔法值的,有立即消耗的,還有用于升級(jí)的物品。嵌入是一種自然的方式,用來表示具有許多不同特性但可能有交叉特性的東西,以及表示那些在不同程度上可能具有相似效果的東西。
請(qǐng)注意,雖然天賦、技能和物品的數(shù)量是可變的,但最大池化層會(huì)覆蓋到每個(gè)列表。這意味著只有所有這些維度中的最高值才能被輸出。乍一看這樣似乎不太合理,因?yàn)橐匀说乃悸穪砜紤]的話,你擁有的能力是所有現(xiàn)有能力的組合,例如:遠(yuǎn)程+被動(dòng)治療。但它似乎對(duì) AI 來說很有用。
以上處理是針對(duì)每個(gè)相鄰的單位獨(dú)立完成的,一般屬性、英雄天賦、技能和物品的結(jié)果都會(huì)連接在一起。然后應(yīng)用不同的后處理,根據(jù)它是敵方非英雄(如敵方塔)、友方非英雄(己方塔)、中立(野怪)、友方英雄或者敵方英雄。
最后,后處理的結(jié)果在該類型的所有單元上取最大值。同樣,乍一看這似乎是有問題的,因?yàn)猷徑鼏卧牟煌匦詴?huì)被組合,例如,如果其中一個(gè)維度代表一個(gè)單位的健康狀況(血量),那么網(wǎng)絡(luò)只會(huì)看到相同類型單位的最大健康狀況。 但是,再一次,從模型的表現(xiàn)看來并不是不行。
最大池化將每種單元類型的最大結(jié)果連接起來,然后輸入給 LSTM。輸出的前半部分也有分片,不過下面我們講到動(dòng)作目標(biāo)的時(shí)候再接著說這件事。
Dota 2 中大概有 170,000 個(gè)不同的動(dòng)作,包括正常的動(dòng)作,如移動(dòng)和攻擊,還包括技能施放、物品使用、狀態(tài)升級(jí)等。在每個(gè)時(shí)間點(diǎn)上并非所有操作都可以使用——比如可能還沒有學(xué)這個(gè)技能,或者背包里沒有這個(gè)裝備。但你仍然可以使用大約 1000 種不同的操作。此外,許多動(dòng)作都有參數(shù),例如你想要移動(dòng)到什么區(qū)域或你想要攻擊哪個(gè)敵人。OpenAI在博文中也展示了很好的動(dòng)作空間的可視化。
這其實(shí)給強(qiáng)化學(xué)習(xí)帶來了一個(gè)巨大的探索問題,因?yàn)橹悄荏w最初是通過嘗試隨機(jī)動(dòng)作開始學(xué)習(xí)的。最直白的方法是計(jì)算所有 170,000 個(gè)動(dòng)作的分?jǐn)?shù),并將 softmax 限制為 1000 個(gè)當(dāng)前可以進(jìn)行動(dòng)作。但 OpenAI 通過嵌入和可變長度的 softmax 層巧妙地解決了這個(gè)難題。
正如這張圖最上方顯示的,每個(gè)動(dòng)作都有一個(gè)嵌入,例如,無論是遠(yuǎn)程攻擊還是使用物品進(jìn)行治療或傳送到某個(gè)目的地。動(dòng)作嵌入和 LSTM 輸出結(jié)果的點(diǎn)乘積用于產(chǎn)生不同動(dòng)作的分?jǐn)?shù)。這些分?jǐn)?shù)會(huì)經(jīng)過 softmax層,結(jié)果的概率分布用于選擇一個(gè)可用的動(dòng)作。
旁注:兩個(gè)向量之間的點(diǎn)乘積會(huì)把向量中的元素分別相乘,并對(duì)相乘后的結(jié)果求和。有時(shí)它也被稱為標(biāo)量積,因?yàn)樗a(chǎn)生單個(gè)標(biāo)量值。它與余弦相似性有著密切的關(guān)系——當(dāng)向量指向相同方向時(shí),它傾向于產(chǎn)生高值,而當(dāng)指向相反方向時(shí),它往往產(chǎn)生低值。它通常用作兩個(gè)向量相似性的快速評(píng)分方法。實(shí)際上,這正是卷積運(yùn)算所做的——它產(chǎn)生了濾波器和輸入之間相似性的特征圖。
我猜測(cè),選擇一個(gè)行動(dòng)的過程實(shí)際上是讓 LSTM 產(chǎn)生的一個(gè)原則上可以被稱為「意圖向量」的東西。例如,如果你處于困境并且血量非常低,那么意圖就是「離開這里」。將此意圖與可用操作匹配,如果與其中一個(gè)操作相一致,則會(huì)產(chǎn)生高分。例如,「移動(dòng)」和「TP」兩個(gè)動(dòng)作可能與「離開這里」的意圖很好地對(duì)齊。TP 可能稍微對(duì)齊的更好些,因?yàn)槟悴粫?huì)被敵人追到,因此它在 softmax 之后產(chǎn)生更高的分?jǐn)?shù)和更高的概率。但是如果目前 TP 不可用,那么這種嵌入就不匹配了,「移動(dòng)」可能是得分和概率最高的。
某些操作具有參數(shù),如目的地或目標(biāo)。所有這些都使用 softmax 層以簡(jiǎn)單直接的方式建模。例如,X 和 Y 坐標(biāo)被離散化為范圍,而不是使用連續(xù)輸出和高斯分布。我猜測(cè) softmax 可以更好地處理多模態(tài)分布。這里我們發(fā)現(xiàn)了一個(gè)重要的點(diǎn)是,動(dòng)作輸出似乎并不能對(duì)動(dòng)作以及動(dòng)作目標(biāo)之間的聯(lián)合分布建模。我認(rèn)為這不是問題,因?yàn)樗袆?dòng)作輸出都以 LSTM 輸出為條件。因此,LSTM 輸出已經(jīng)編碼了「意圖」,而那些全連接層只是解碼了這個(gè)「意圖」的不同方面——?jiǎng)幼骷捌淠繕?biāo)。
我最喜歡的部分是 OpenAI Five 如何處理目標(biāo)。還記得那些來自單位觀測(cè)輸出的奇怪切片嗎?這些在圖上用藍(lán)色表示,這意味著它們是對(duì)每個(gè)單位都有一個(gè)單獨(dú)的切片。這些向量稱為「單元注意鍵」,并與 LSTM「意圖」匹配,以產(chǎn)生對(duì)于每個(gè)單位的分?jǐn)?shù)。這些分?jǐn)?shù)通過 softmax 并確定攻擊單位。選取被觀察到的單位時(shí)再次使用了 softmax,從可用的動(dòng)作的中選取動(dòng)作的時(shí)候也是一樣。
我猜測(cè)模型是這樣工作的:根據(jù)觀察的結(jié)果,網(wǎng)絡(luò)確定某個(gè)單位的血量確實(shí)很低,AI 有機(jī)會(huì)去搶這個(gè)人頭。LSTM 產(chǎn)生意圖「嘗試最后一擊」,與「攻擊」行動(dòng)很好地對(duì)齊。此次「嘗試最后一擊」意圖與觀察處理的每單位輸出相匹配,并與血量低的單位很好地對(duì)齊。Bang——你完成最后一擊并獲得額外的賞金。
更新:在更新版本的網(wǎng)絡(luò)中,他們先用動(dòng)作嵌入來調(diào)制 LSTM 輸出,再使用單位注意鍵產(chǎn)生點(diǎn)乘積前,我猜如果不做這個(gè)更改的話,不同的動(dòng)作(例如攻擊和治療)就會(huì)鎖定到一個(gè)單位上去。
在分析 OpenAI Five 網(wǎng)絡(luò)之后,很明顯網(wǎng)絡(luò)的大多數(shù)部分都在處理感知(觀察預(yù)處理)和運(yùn)動(dòng)控制(解碼動(dòng)作)任務(wù)。而所有戰(zhàn)略和策略必須由同一個(gè)地方產(chǎn)生——即1024個(gè)單位的LSTM。
我認(rèn)為這樣一個(gè)相對(duì)簡(jiǎn)單的數(shù)學(xué)結(jié)構(gòu)就可以產(chǎn)生如此復(fù)雜的行為是令人驚奇的?;蛘?,我不是很確定,但是其實(shí)這表明 Dota 2游戲的復(fù)雜性也不過如此?短期策略與快速反應(yīng)時(shí)間的結(jié)合已經(jīng)可以擊敗長期策略了嗎?這還有待我們繼續(xù)研究和討論。
感謝 Jaan Aru,TanelP?rnamaa,Roman Ring 和 Daniel Majoral 的提出的精彩見解和討論。
via neuro.cs.ut.ee,雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。