跟我的AI比試比試:究竟誰學得更快?


全文共2664字,預計學習時長9分鐘

 圖源:unsplash

你可以在玩“Nim”遊戲時打敗我的AI嗎?來吧試一試,比賽開始之前你想練習幾次都可以。點擊鏈接開始比賽:https://nimai.herokuapp.com/

 

本文就來爲你解釋AI是如何學習的?AI是怎樣變得如此聰明的?我還將在不使用數學公式的前提下從高水平的角度解釋Q-learning的概念。

nimAI Web應用程序的用戶界面

 

我相信,掌握之後,“easy peasy”模式對你來說是小菜一碟。但要想達到更高的水平可不是那麼容易的。這些等級之間有什麼區別呢?我能將更高級的代理設計編程做得更聰明嗎?我是否應該告訴他們怎樣在Nim上玩一局完美遊戲的數學公式?

 

答案當然是不!我要做的是讓代理自己找出如何贏得Nim遊戲的方法。這就是Q-learning的魔力:你將問題形式化之後,將其交給代理,代理完成大部分工作的同時你只管坐下來放鬆。

來吧,讓我們看看這背後到底發生了什麼。

 

人工智能需要知道什麼

爲了成爲一名真正的Nim大師,需要向代理告知遊戲的基本設置和規則:

初始界面的外觀是什麼樣的?

nimAI網絡應用程序的初始界面

 

這就是我nimAI網絡應用程序的初始界面。從理論上講,你可以從任何數量的行和硬幣開始,而我們的學習算法也能處理所有這些替代方案。在Python中,上述的頁面可以形式化爲列表:

initial_board = [1, 3, 5, 7]


在界面的指定狀態下哪種操作是可行的?

在遊戲的結尾思考一下這個界面狀態:

遊戲結尾的界面狀態

 

這裏有三種不同的選擇:從第一行拿一個硬幣,或者從第二行拿一個硬幣,或者從第二行拿兩個硬幣。我們需要做的就是編寫一個函數,該函數可以運行界面狀態並返回一些可能的操作。在Python中,這種表示形式可以是一組元組,其中每個元組由行和要刪除的硬幣數組成:

 

legal_actions = {(1, 1), (2, 1),(2, 2)}

動作是如何更改當前狀態的?

如果我從第二行拿走一枚硬幣,那麼界面將會變成什麼樣?

移動(2,1)之後的界面狀態

這很簡單,但我們需要形式化這種狀態轉換函數。到目前爲止,代理還不如你聰明。

遊戲何時會判定輸贏?

我們需要提供一個功能,在給定的遊戲狀態下告知代理誰是獲勝者(“ AI”,“人類”,“沒有人”)。更準確地說,我們需要考慮界面是否已經空了([0,0,0,0]),如果是,誰輸了遊戲。

 

圖源:unsplash

現在AI知道了遊戲如何開始(初始狀態),在每種可能的界面狀態下選擇如何移動,此類動作如何改變界面(狀態轉換功能)以及是否已經有贏家。

 

AI是如何變聰明的

 

開發Q-learning的想法實際上很簡單,我們太懶了,沒有明確地告訴代理如何掌握遊戲,而是讓AI多次與自己對戰。我們希望它會遇到各種不同的情況,並且通過反覆試驗發現這是在界面特定狀態下的所執行的最佳行動。

 

在對代理進行訓練之後,人類可以向其發起Nim遊戲挑戰。

 

玩家自信滿滿地開始,殊不知這種情況AI已經見過好多次。在前期訓練經驗的積累下,AI將會對可憐的玩家發起致命一擊。接着,它將會繼續牽着玩家的鼻子走。

 

獎勵與懲罰

 

Q-learning是一種強化學習領域的技術,其靈感來自行爲心理學,它認爲人類和很多其他動物都通過獎勵和懲罰來學習。

 

如果一個孩子觸摸了火爐,那麼它就會受到懲罰(疼痛),並且在下次會更加小心;一個孩子打掃廚房之後媽媽獎勵了他巧克力曲奇餅,那麼下週她將會再次積極地打掃廚房。這就是經驗教訓。

 

圖源:unsplash

Q-learning正是基於這一原理。我們讓代理嘗試採取行動,如果該行動促成“良好”狀態,我們將會獎勵它。如果該行動導致“不良”狀態,我們將對它進行處罰。我們用數字表示獎勵和懲罰(越高越好),計算機程序喜歡數字!

 

在Nim中,我們用“ -1”來懲罰失敗的操作(即刪除最後一個硬幣),而用“ 1”獎勵會立即導致對手失敗的操作。

 

預期獎勵

 

那麼其他不會終止遊戲的操作呢?我們不會直接懲罰或獎勵他們,而是採用Q-learning的核心思想:預期獎勵。

 

代理會逐步瞭解到某些操作(儘管不會立即贏得/或輸掉遊戲)會使她處於有利或危險的境地。這些知識將從遊戲結束階段逐漸“傳播”到較早的位置。可能你也經歷過,在新遊戲開始時,想出一個策略真的很難,但到了最後,你卻更容易看出那些操作是好是壞。

 

對於AI來說是一樣的:首先,她的大部分舉動都是完全隨機的,沒有任何策略。但是,之後她會學習到哪些最終操作會讓它立即贏得遊戲,接着學習了那些幫助它立即贏得遊戲的操作,繼續學習了那些幫助它立即贏得遊戲的操作,如此循環往復,繼續操作。

 

如果你允許代理反覆練習遊戲,那麼她將能學會在任何給定的界面狀態下的任何給定操作下獲得最終的期望獎勵。但如果你只允許她玩幾次,那麼她將沒有機會體驗遊戲的其他設定。這就是爲什麼某些AI以易用模式(尤其是在遊戲開始時)操作時看起來相當隨機的原因,而更高級的代理似乎立即有了計劃。

 

計劃?策略?AI不會按照某些出色的計劃行動,也沒有理由認定那是最好的操作。它只會記得過去在對局中,在某個界面狀態下最有效的方法,而這就是它比任何人類都做得更好的地方。

接下來,我想說一些有趣的細節,並以“Q&A”的形式爲你指出更爲嚴格的信息來源。

一些Q&A

Q:代理的知識如何體現出來?

A:在經典的Q-learning中,你可以想象一個簡單的表,這個表代表狀態和動作的所有可能組合,幷包含各自的Q值。在Python中,這樣的Q表可以用以狀態動作對作爲鍵的字典來表示。例如,假設代理在州中有兩個法律訴訟a1和a2。然後,她可以查找 Q_table[(s, a1)]和 Q_table[(s, a2)] ,然後簡單地選擇具有較高Q值的動作。

 

注意,還有更高級和高效的Q-learning版本,例如深度Q-learning。在這裏,你可以使用神經網絡來學習估計任何狀態動作對的Q值的函數,而不是將所有Q值顯式存儲在表中。

 

Q:Q值到底是如何計算的?

 

A:首先,所有可能的移動的Q值均爲0,除非它們立即終止遊戲。代理根本不知道如何分辨好壞操作。然後,在訓練過程中,將根據先前的積累和新的經驗更新Q值。這兩個因素需要權衡,以學習率爲模型。

 

Q:那麼關於探索與利用問題呢?

 

A:在許多AI問題中,你都會遇到一個基本的難題:鑑於資源(時間,計算能力等)有限,你是應該探索儘可能多的替代方案還是利用已經運行良好的替代方案?對於成功的Q-learning來說,至關重要的是要在探索和利用之間找到良性的平衡,這可以通過時不時探索沒有最高可用Q值的動作來實現。

 

圖源:unsplash

希望這篇能讓你對Q-learning有一個很好的直觀瞭解,激發自己深入探索下去的興趣。


推薦閱讀專題

留言點贊發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:高淳子、鍾惠

相關鏈接:

https://towardsdatascience.com/who-learns-faster-you-or-my-ai-681e442416b0

如轉載,請後臺留言,遵守轉載規範

推薦文章閱讀

ACL2018論文集50篇解讀

EMNLP2017論文集28篇論文解讀

2018年AI三大頂會中國學術成果全鏈接

ACL2017論文集:34篇解讀乾貨全在這裏

10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章