犧牲睡眠、耽誤論文,三周開發出「鬥地主」AI,他們拿下了今年 DeeCamp 最佳團隊獎
8 月 16 日,由創新工場主辦的 2019 DeeCamp 人工智慧訓練營正式結營。
今年,來自海內外的 600 多名學生參加了訓練營,學員們完成了由 22 家企業發起的 50 個 AI 相關課題。其中,「挑戰快手小遊戲」項目獲得了最佳團隊獎,隊長是北京大學在讀博士生張天昊。
如此短的時間之內,團隊是如何從 0 到 1,打造出一款成熟度較高的鬥地主 AI 產品?近日,雷鋒網 AI 開發者與張天昊同學進行了一次交流,討論了關於本次訓練營的經歷和心得。
隨機組隊,三周完成項目
問:你參加訓練營的初衷是什麼?
其一,去年我舍友參加了 DeeCamp,當時是在北大舉辦的,近水樓台,我就蹭了不少專業的課程,尤其是開復老師的課程讓我印象特別深刻,讓我從產業的角度思考人工智慧的發展。後來全程關注舍友的課題項目,是關於機械臂抓取,讓我感覺到學員確實可以從項目中學習到很多東西,於是我關注了今年的報名情況,發現有關於遊戲 AI 的項目,這與我群體機器人智能控制的科研方向比較貼近,都是關於智能體在環境中做決策的,於是想來學習一下。
其二,目前關於遊戲 AI 的研究特別火熱,比如王者榮耀的「絕悟」以及 Dota 的「OpenAI Five」, 越來越多的 AI 都開始去解決不完美信息下的多人博弈問題,這與機器人大部分情況下面對的情況是相似的,也是將來機器人走進人類生活必須要去解決的問題。DeeCamp 提供了與產業導師交流的平台,我抱著一種很大的學習心態,想要多了解產業端遊戲 AI 到底是如何工作的,希望能為今後的科研換一種思路,找一些交叉點。
問:項目中你們是如何組隊和分工的?
我們是隨機組隊的,組隊之前我們彼此都不認識。隊長是後面自己去推選的。
我們組很幸運,大家都有自己擅長的技術領域,並且都是抱著學習的心態來的,都想要在這個夏令營中有所收穫。我們通過對論文的研讀與討論,找到了每個同學在三周內比較適合去突破的研究方向,並從一開始就高效地進行討論與嘗試,我特別感謝組員對於我項目規劃的信任。
宿舍討論交流
舉幾個比較有趣的例子,有的同學從沒打過鬥地主,但是其中一個演算法模型 (規則模型) 比較考驗編程人員的鬥地主能力,於是我們購置了一本《鬥地主高手必勝攻略》,傳閱著看,同時在快手鬥地主上對局,積累自己的經驗,提高判別演算法好壞的能力。
我們只有三周的時間,要從零開始做出一個大家還比較滿意的項目,在時間上來說是非常緊張的。因為這個項目除去演算法方面外,還有很多工程上的東西要去解決,比如遊戲的引擎,遊戲的伺服器、資料庫,遊戲前端,遊戲界面、音樂等等。
在那段時間裡,我們大概平均每天的睡眠時間就五個小時。甚至還有可能存在一些輪崗,一個同學幹完一個通宵之後,他去休息五個小時,另外一個同學起來之後接著他的進度去做一些調整,然後兩個人再做一些討論。除了創新工場提供的開放日之外,大家基本上都沒有出去玩。
從產品上來講,這個過程是很花時間的,要不停的去做對接。所有東西都是並行的,不同演算法之間有各種各樣的介面,最後再把它們整合起來。為此,我們制定了四個「五天」計劃,在第一個五天要完成演算法的初步模型,第二個五天完成遊戲開發,第三個五天完成演算法與遊戲對接,第四個五天完成整體融合。
問:項目面臨的問題有哪些?
面臨的問題主要有兩類,一類是演算法,這類問題比較燒腦,相當於是在做研究;另外一類是遊戲開發,這一類由於工程量比較大,又涉及到用戶體驗,細節比較多,比較累人。
首先是第一類問題,和其他大部分的項目不同,我們的項目不是簡單地拿深度學習做一些應用,並且關於鬥地主 AI 的研究難度比較大,所以相關論文特別少,基本上沒有什麼開源代碼。除此之外,公司端由於要依靠其自主開發的演算法獲取利潤,故而關於鬥地主 AI 的研究也都是保密的。
由於這個問題確實比較棘手,我們也不確定三周是否能做出來,於是就和產業導師們進行交流,在最初開始時,老師們對我們的期望也只是能做出來一兩個簡單的模型,並且模型有一定的勝率即可。
我們設計了很多模型,在每個模型中都遇到了問題,其中有一個問題基本上是每個模型都會遇到的,就是在設計最初的時候,我們也不知道他們到底能不能行,這個問題在我們嘗試使用監督學習模仿人類打牌行為時體現的比較明顯。我們在前期搜索關於鬥地主 AI 的解決方案時,有一篇使用深度學習解決這一問題的論文比較熱門,這兩年很多博主也關注過它,於是我們對這篇論文做了復現,但是效果並不好,我們做出的模型瘋狂做出「不要」這一動作。
由於這篇論文沒有更多地細節,我們也不知道到底是不是我們的方法出了問題,還是說因為整個鬥地主遊戲的遊戲樹大小大概是 10 的 85 次方,我們的 35W 條遊戲數據太少導致的問題。不過幸好 DeeCamp 有產業導師制度,我們和我們項目的快手公司的劉霽老師做了溝通,他給我們提供了幾個思路,我們根據這些思路去做了檢驗,發現在真實的玩家樣本中,最多的樣本就是「不要」。於是我們根據老師提供的論文嘗試使用新的思路解決了這個問題。所以說產業導師真的特別重要,我們導師在整個項目中給了我們很多方向上的指導,由我們去做嘗試、思考與探索。
與產業導師討論問題
而我們整個演算法當中最難的一個部分在於,它融合了多人不完美信息下的博弈。大家也都有關注今年 7 月份德州撲克 AI 在多人遊戲中取得了重大突破,單純使用其核心的 CFR 演算法思想來解決鬥地主問題的研究,我們沒有找到一篇相應的論文。我們從最簡單的庫恩撲克開始理解,看了大概有百多業的論文,才將相應的演算法移植到鬥地主問題中,效果非常顯著。
問:能否向我們詳細解讀你們的模型實踐?
我們創新性地提出了一個多模型融合的鬥地主 AI 框架,首先設計了多個鬥地主 AI 模型,並通過離線學習的形式使它們各自都有一定的鬥地主能力,最後再通過強化學習來做多模型融合,最終選擇其中一種模型的決策結果。
演算法框架如下:
具體來說,使用了 5 類模型。
首先是規則模型。規則模型是通過人類經驗的方式,人為設計每一種打牌方式的好壞,並選擇一種使剩下手牌評分最大的打牌策略。我們通過經驗性地加入基於局面的懲罰與獎勵,使 AI 之間存在配合。該類模型的優點在於可以利用人類經驗,難度低,缺點是缺少靈活性。
其次,我們還設計了蒙特卡洛樹搜索模型,該模型是 AlphaGo 演算法的核心。通過模擬模擬的方式來獲得最佳出牌動作。我們在王詠剛老師的建議下,使用規則模型對蒙特卡洛樹進行擴展時的寬度剪枝,以及模擬時的深度剪枝。
我們如何在暗牌的信息下去做這件事情呢?我們花費了將近兩周的時間去研究德州撲克論文,並成功地基於其核心思想構建出鬥地主 CFR 模型。CFR 的演算法的結構與蒙特卡洛相似,但其核心思想是通過加入信息集的概念解決暗牌問題。在暗牌的情況下,通過輸入當前手牌信息以及記牌器信息和每位玩家的手牌數量,即可輸出理論上獲得勝率時的動作概率。我們通過將「信息集」採用靜態存儲的方式實現了計算量減少,存儲量減少以及可擴展性強。
除了 CFR,我們嘗試使用監督學習,通過模仿人類玩家的打牌行為來實現鬥地主。
除此之外,我們還對 Value-based 的強化演算法進行嘗試。選用 Double DQN 作為框架,創新性地通過將狀態與動作配對,生成 batch 個合法的輸入,batch 的每個樣本代表了當前情況下的一種合法動作,從而使網路輸出 batch 個 Q 值,通過選擇最大 Q 值的方式解決了輸出動作不確定的問題。
問:你們的模型效果如何?
我們的每個模型都取得了一定的鬥地主能力,其中我們提出的強化學習模型在於相同 baseline 對抗的情況下,取得了比現有論文還要高的勝率。其次是監督學習模仿人類玩家出牌行為的模型,在測試集上也達到了 76.5% 的預測準確率,這還只是通過黃金分段的 35W 條數據訓練的模型,如果拿到的數據更多,效果是否會更好,我們不得而知。但是可以明顯地感覺到這個 AI 確實存在一定模仿行為。
其實我們只是提供了一種解決不完美信息博弈問題的方式。可能我們的方案未必就是最理想的方案,但是可以告訴大家,這種方式是可解的,我覺得這是我們的嘗試比較重要的意義之一,這與單純使用深度學習去做回歸或分類是不同的。
不僅僅是演算法,團隊配合很重要
問:這一次你最大的收穫和感受是什麼?
我的收穫超出了預期。
最開始,我的預期是演算法,怎麼去解決決策問題。
但是,DeeCamp 不僅僅只是涉及到演算法,它讓我們知道大家應該如何一起分工去完成一個項目,完成一個真正的產品。
我很慶幸我們團隊中有各種各樣的人才。我們需要每天進行討論交流,巧合的是,我們的隊員正好都在一個寢室。於是,每兩天晚上我們會開一次小會,五天一次總結,看進度,找結合,然後安排隊員做一些交叉和技術上的對接。這個可能更像是在團隊在做一些事情。項目開始之後,我們需要明白其他人在做什麼。我覺得這些東西對於將來進入企業工作非常重要,你要知道怎麼去和人配合,他們想要什麼,你能提供什麼,你想要什麼,你需要他們提供什麼,這也是很重要的。
除此之外,我認為還有一個比較好的點是,前期的課程確實準備得很不錯。雖然北大是一個比較高水準的平台,我可以接觸各種各樣的知識。但是這些知識不集中,導致我們有時候會偷懶。打個比方,我不了解 NLP,我就不去聽 NLP 的東西。但是在 DeeCamp 裡面你會轟炸式的接觸到各種各樣的東西,包括圖像處理,包括 NLP,包括模型與壓縮,包括無人駕駛等等等等,這種情況下可能會產生很多交叉式的靈感。
產業合作的方式也是 DeeCamp 一大亮點,老師們給我們提供了很多幫助,不管有什麼問題去找老師,都能得到很好的解答。我在答辯前,老師幫我反覆校對和修改 PPT,這些指導也特別重要,它確實是一種全方面的能力提升,不僅僅是演算法演算法部分。同時,我認識了很多志同道合的朋友,我們整個組還開玩笑說之後要不要一起打 kaggle。
小組團建
問:你是怎麼平衡學業和參賽時間的,導師支持嗎?
這件事情挺難的,因為博士生的科研任務是比較重的,老師也會擔心我去參加 DeeCamp 的收穫不如在實驗室科研。
這一個月時間耽誤了實驗室一個項目和兩篇論文的進度,除此之外,由於北大本科生暑期的時候會在實驗室科研,我只能遠程和跟著我做科研的本科生進行項目討論。
我們現在的研究算是一個交叉的方向,數學、物理學、自動化、機械和計算機我們都會一些,老師希望我不要走到純粹的計算機方向去,他認為這會喪失我的優勢,我也比較認可老師的觀點。所以說,我特別感謝我導師謝廣明教授對我的支持,並且感謝實驗室同門來幫助我分擔原來實驗室的工作。
最後,我參加了 DeeCamp,並學到了很多。結果方面比較意外,我們也沒有想到會拿到冠軍。在此,特別特別感謝我的隊友們,王澎,於俊,任震,劉永強,張博林,孫致波,劉文景,余冠一和孫海耀,希望大家前程似錦!
答辯後小組合影
問:接下來你的研究計劃是什麼?
我做的是多水下機器人群體控制,這裡面涉及到水面和水底的感知與控制,與 AI 結合的有水面物體識別,水下圖像增強,機器人感測器數據處理,機器人魯棒性控制等。現在陸域資源開發得差不多了,海洋還沒有大開發,除此之外,國家還提出了「海洋強國」的口號,所以說水下機器人的研究關乎到了生活與國家多個方面。我們實驗室研發了很多水下機器人,這些機器人也協助過國家科考人員去南北極做一些勘探,還可以在漁業、水質監測、救援等方面有特別多應用。
抱著學習的心態,準備充分才能收穫更多
問:對於未來想參賽的同學,你推薦他們參加嗎?
我覺得挺好的,但是在參賽之前一定要想清楚自己的目的。有的人是真的是僅僅是為了一個結業證,證明自己是從 1 萬個 AI 人才裡面選出來 600 人,幫助將來找工作。這反而浪費了另外一個真正想去學系統學習的同學的機會。在 DeeCamp 能學到很多東西,入營的前期一定要做好準備。
DeeCamp 是一個大寶藏,它包含很多西。你不僅是在做自己項目,你也可以去了解其他項目。它裡面還有很多沙龍,可以聽到很多人的科研和工作經驗,能學很多東西,對本科生來說尤其如此。
我認為在結營之前,你要形成自己的體系,這樣才會獲得最大的收益。我推薦同學們參加 DeeCamp,但是在參加前一定要想好怎樣儘可能地在這裡多學一點知識。
問:你認為在參加之前應該如何準備,才能收穫更多?
我覺得在去之前的時候要做好兩件事情。
第一件事情是你要對 AI 有一個基本的了解。我們不一定要很深入的了解,但是要大概知道圖像是什麼,自然語言處理是什麼。入營之後,老師會從基礎的知識點一直講到最新的研究。如果沒有準備好,很可能就會在課堂上睡覺了。
第二件事是,你要對自己的項目負責。在去之前的時候,要看一些文章,為項目做準備。我比較擅長強化學習,在去之前,我把強化學習相關的一些教程和資料都共享在群里了,大家一起學習和討論。
每個同學都要知道自己的特點和特色是什麼。比如我們組有個同學前端很強,前端這個事情就交給他了。另外一個同學數據方面比較厲害,他負責做引擎。遊戲引擎是一個很複雜的東西,它包含了特別多的可能性,脫離遊戲引擎去研究想法是完全沒有意義的。如果大家都去做演算法,這個項目不可能成功。
抱著學習的心態,在去之前好好想清楚自己的目的。如果是單純的就為了一個結業證,我覺得意義不大。


※機器學習 101:一文帶你讀懂梯度下降
※這些老照片如何用演算法修復?
TAG:AI研習社 |