讀完 "深度學習的 16 堂課" 後, 接著想要來啃布留川英一寫的 "強化式學習-打造最強通用演算法 AlphaZero" 這本, 雖然很喜歡這本書, 有股衝動想上網路書店買下, 但剛學會自我心理操縱的我, 想想還是決定故技重施, 藉時間壓力來製造前進力量, 還是用借的吧! (除非發票或彩券中獎才會破功, 呵呵).
此書共 8 章, 其中 1~3 章是我已熟悉的部分 (簡介, 執行環境安裝設定, 深度學習), 第 4 章才是強化學習相關課題, 也就是此書的重點, 但在還書之前估計能啃到第四章, 其他篇章可能要等下一輪迴了. 以下是我讀完第一章 "Alpha Zero 與機器學習概要" 的摘要筆記 :
- 英國 DeepMind 公司的深度強化學習作品演進 :
- AlphaGo (針對圍棋) :
2015-10 : 以五戰五勝成績打敗歐洲圍棋冠軍樊麾 (二段, 法國)
2016-03 : 以四勝一敗成績打敗 18 次世界圍棋冠軍李世石 (九段, 韓國)
2017-05 : 以三戰三成績打敗人類最強圍棋棋士柯潔 (九段, 中國)
AlphaGo 論文 (發表於 Nature 期刊) :
# Mastering the Game of Go with Deep Neural Networks and Tree Search - AlphaGo Zero (針對圍棋, 無棋譜從零開始自我對弈學習) :
2017-10 : 以 100:0 完勝 AlphaGo - Alpha Zero (可用於各種棋類, 通用式 AI 演算法) :
2017-12 : 擊敗世界三大棋類冠軍 AlphaGo Zero (圍棋), StockFish (象棋), Elmo (將棋).
Alpha Zero 論文 :
# A General Reinforcement Learning Algorithm That Masters Chess, Shogi and Go Through Self-play - AlphaFold (以基因序列預測蛋白質 3D 結構) :
2018-12 : 贏得國際蛋白質 3D 結構預測競賽 (CASP) 冠軍
可用於阿滋海默症與帕金森氏症之新藥開發
# AlphaFold : Using AI for Scientific Discovery - AlphaStar (破解即時戰略遊戲 "星海爭霸 II" 的 AI) :
2019-01 : 以十勝一敗成績打敗 "星海爭霸 II" 職業電競選手
"星海爭霸2" 為透過資源採集等方法擴充勢力來擊敗敵軍之遊戲, 已有 20 多年歷史, 這是動作數高達 1026 的不完全資訊遊戲, 複雜度比動作數只有 361 的 19 路圍棋 (這是完全資訊遊戲) 高很多.
# AlphaStar : Mastering the Real-Time Strategy Game StarCraft II
註 : 書中所列的 AlphaGo Zero 與 Alpha Zero 論文 DeepMind 網址均已失效, 改用其他學術單位提供之網址代替. - 在機器學習問世之前, 電腦是利用 rule-based (以規則為基礎) 的明確程序來進行預測與判斷, 必須由特定領域專家將其知識轉換成明確之規則, 再由電腦專家將規則轉成程式碼. 但即使是專家有時也很難將自己的知識寫成明確之規則, 更何況有些問題本質上就缺乏明確之規則, 例如影像辨識與自然語言處理等.
- 機器學習是讓電腦透過分析大量資料, 自行從資料中找出潛在的規律與關聯, 進而導出答案所需的隱藏規則. 用機器學習進行預測與判斷靠的不是明確的規則與程式碼, 而是透過反覆的學習而從資料中找出不可見的模式或規則. 深度學習是機器學習中的一個方法, 它是透過模仿人類大腦神經元運作原理所建構的神經網路模型來從大量資料中學習規則.
- 神經網路由一個輸入層, 多個隱藏層, 以及一個輸出層組成, 通常總層數達四層以上時稱為深度神經網路. 在卷積神經網路結構中還有池化層, 丟棄層與展平層等, 這些層純粹只是一種運算, 本身並沒有權重參數, 不計入深度神經網路的層數中 (即有權重的才算一層).
- 訓練神經網路有四道程序 :
(1). 準備資料集 :
此階段最花時間, 但 PyTorch 與 tf.keras 內建了許多已準備好的資料集讓學習者馬上可用, 但這些資料並不能直接餵給神經網路, 須經過例如改變形狀與正規化等預處理 (preprocessing), 使其能與神經網路輸入層對接才可以.
(2). 建構與編譯模型 :
根據目的與問題的類型 (分類或迴歸) 來設計輸入層與輸出層神經元數量, 隱藏層的層數與種類 (卷積或密集), 設定超參數並初始化各層權重與偏值參數.
(3). 訓練模型
透過批次與週期餵資料 (訓練資料集) 給模型不斷優化 (調整) 模型參數的過程稱為訓練, 此過程先是訓練資料經前向傳播 (forward pass) 輸出預測值 (prediction), 其與目標值的誤差再經過反向傳播 (back propagation) 更新參數以縮小誤差值. 經過多輪的訓練後即可得到最小的誤差, 亦即得到較準確之預測值. 簡言之, 訓練模型之目的是要找出最佳的權重參數組合, 使模型能夠普適 (generalized).
(4). 評估與預測
此階段要用模型未見過的資料 (測試資料集) 來讓模型做預測, 以其結果來評估模型之良窊. - 深度學習的分類 :
(1). 監督式學習 (supervised learning) :
透過訓練資料集找出潛藏於資料與答案間的規則, 建立可以根據輸入資料進行預測的模型, 主要是解決分類 (classification, 預測類別, 有二元與多元兩種) 與迴歸 (regression, 預測數值) 問題.
(2). 非監督式學習 (unsupervised learning) :
不需要答案, 只用輸入資料來學習, 讓機器自行從資料中找出潛藏的模式或規則, 主要用來解決分群 (clustering) 問題.
(3). 強化式學習 (enforcement learning) :
不需要依靠大量資料, 而是讓 AI 根據環境變化採取一連串的動作或決策以獲取最大報酬, 機器是以試誤法來學習. - 強化式學習的應用場景是要在機器能在特定環境中採取是當動作, 例如 AlphaGo 的棋步選擇, 自駕車的行進控制, 以及機器人的動作控制等, 其運作方式是由代理人 (agent) 根據環境狀態 (state) 採取動作 (action) 以獲得更多回饋值 (reward). 常用術語如下 :
(1). 代理人 (agent) 與環境 (environment) :
強化式學習負責採取動作的主體稱為代理人, 其所處之世界稱為環境.
(2). 動作 (action) 與狀態 (state) :
代理人與環境的互動稱為動作, 因代理人的動作所產生的環境變化稱為狀態.
(3). 回饋值 (reward) :
代理人在某狀態下採取某動作所獲得的獎賞或懲罰稱為回饋值, 強化式學習以回饋值來衡量所採取之動作是好是壞. 注意, 相同的動作在不同狀態下的回饋值不會相同.
(4). 策略 (policy) :
代理人會根據目前狀態決定下一個要採取的動作, 該採取哪種動作的評判標準稱為策略, 具體而言, 策略就是各個候選動作的機率, 機率值愈大者即代理人下一個要採取之動作. 強化式的終極標是就是要找到一個可以獲得最大回饋值的策略.
(5). 回報值 (return) :
回饋值是特定狀態下採取特定動作之單一事件獎懲 (這是環境所給予的), 將連續的回饋值加總即為回報值, 它是由代理人自行計算以作為追求回饋值最大化的手段, 其評估包含尚未發生的未來事件, 故回報值具有不確定性, 且計算回報值的公式會隨代理人思考方式而不同, 例如折扣回報值的算法是將較遠的未來回饋值打折後再加總.
(6). 價值 (value) :
由於回報值包含預估未來事件之回饋值, 具有不確定性, 故代理人在衡量採取一個動作所得到之回饋值是好是壞時需要一個指標, 此指標稱為價值 (對此回饋值滿意或不滿意), 價值的高低會因採取不同動作後所進入的狀態而有所不同 (有點兵當久了母豬賽貂蟬的意味~~~, 哈哈), 價值越高表示可能得到的回報值會越大, 故價值有助於找到最佳策略. - 強化式學習的訓練循環 :
強化式學習的訓練程序稱為馬可夫決策過程 (Markov decision process), 它是由當前狀態與採取之動作來決定下一個狀態的系統, 流程如下 :
(1). 初始時代理人還沒有資訊可判斷該採取甚麼動作, 就先以隨機方式決定.
(2). 代理人將在何狀態下採取了何動作與獲得甚麼回饋值記錄下來, 稱為經驗.
(3). 根據價值衡量該經驗之好壞, 選擇好的經驗作為下次挑選動作之策略.
(4). 保留採取隨機動作以發掘更好的策略, 同時也使用現有策略來採取動作.
(5). 重複上述動作尋找可獲得更多回饋值的策略. - 尋找策略的方法 :
(1). 策略迭代法 (policy iteration) :
此為更新策略法, 它會在依據策略採取動作後強調成功時之動作, 並於更新下一次策略時進量採取此動作, 例如策略梯度.
(2). 價值迭代法 (value iteration) :
此為更新價值法, 即每次採取某個動作之前, 先計算動作前與動作後之價值, 將其誤差加到當前動作之價值, 以此新價值來決定下一個策略, 例如 Sarsa 與 Q-learning. - 賽局樹演算法 (Game tree algorithm) :
雙人零和賽局 (two-person zero-sum game, 例如圍棋, 西洋棋, 將棋) 的特色是賽局的所有資訊都會在盤面 (局勢) 中完整呈現, 棋士必須探索與推估目前局勢以找到勝率最高的棋步. 賽局樹就是電腦在雙人零和賽局中探索與推估局勢的方法. - 賽局樹是是一個二元樹, 由表示局勢的節點與表示棋步的弧線組成 :
(1). 方形節點 : 輪到我方下子時的局勢 (我方局勢)
(2). 圓形節點 : 輪到對方下子時的局勢 (對方局勢)
(3). 弧線 : 連接方形節點與圓型節點之棋步
(4). 根節點 : 表示當前狀態
(5). 葉節點 : 展開後的狀態, 節點內數字代表該局勢的價值
賽局樹分成完整賽局樹 (complete game tree) 與部分賽局樹 (partial game tree) 兩種, 前者是將賽局開始到結束全部展開; 而後者只從當前局勢開始, 在有限時間內能夠探索得到的賽局樹, 其中被視為有用的節點會被盡可能地深入探索, 反之被判定沒用的節點則會停止探索. 由於計算完整賽局樹需要天文數字級的時間而不可能達成, 故退而求其次改為使用部分賽局樹來制定策略. - 賽局樹的四種演算法 :
(1). Minmax 演算法
(2). Alpha-beta 剪枝演算法
(3). 蒙地卡羅法
(4). 蒙地卡羅樹搜尋法
1997 年擊敗西洋棋世界冠軍卡斯帕羅夫的 IBM 深藍便是使用 Alpha-beta 剪枝演算法與自定義評估函數. 而 AlphaGo 則是使用蒙地卡羅樹搜尋法搭配深度強化式學習, 蒙地卡羅樹搜尋法是先進行大量的隨機模擬, 再從中選擇一個較佳棋步的方法.
AlphaGo Zero 論文 (發表於 Nature 期刊) :
# Mastering the Game of Go without Human Knowledge
# Mastering the Game of Go without Human Knowledge
沒有留言:
張貼留言