有時候我們很難透過蒐集到的資料訓練模型。例如我們想要訓練一個模型懂玩世紀帝國,依照監督式學習(Supervised Learning) 的方法,我需要聘請世紀帝國高手示範各種操作給模型看。這個做法的成本很高,因為聘請專家很貴。更何況已經有現成的專家了,只會模仿專家的模型變得沒有必要。因此,尋找一個能夠不需要專家又能訓練模型的方法就格外重要,強化學習正是著名的方法之一。
監督式學習的缺點
在介紹強化學習(Reinforcement Learning)之前,了解監督式學習(Supervised Learning) 會面臨的問題有助於我們了解強化學習的好處與限制。監督式學習本質上就是在做方程式擬合,教模型看到x 的時候吐出y 。並且使用預測與真實的分布差作為損失函數(loss function)。我們只要對loss function進行微分,就可以得知當前模型的參數該如何更新。例如Maximum Likelihood Estimation。
監督式學習不分好壞行為都學、而且成效比不上老師
剛才的做法有時候是很傻的,假設蒐集到的資料的品質並不好,因為這個模型並沒有能力分辨資料的好壞,它會什麼都學起來。如果我在訓練自駕車,模型不只會學到如何開車,連駕駛的壞習慣也會一起學起來,包括在塞車的時候咒罵政府、四下無人的時候紅燈右轉、還有對蛇行的用路人比中指等等。因為模型無法得知行為與結果的直接關係,所以模型總是什麼都學。另一方面,由於模型永遠不可能做得跟提供資料的專家一模一樣,所以這個模型的行為能力總是比不上專家,進一步削弱了使用這個模型的動機。
強化學習的優勢
我現在不要求模型模仿專家的動作了。我讓模型自己行動,然後我再告訴模型它剛剛做得好不好,這就是強化學習。當模型做出好行為時,我就提高這個行為的發生機率,反之亦然。如此一來,模型就懂得哪些行為是好行為,哪些行為是壞行為。
強化學習的缺點
理想總是很美好,但是這個作法的結果是比較難以收斂的。比起直接指導,用相對模糊的「好」與「壞」提示模型應該做哪些行為,使得訓練模型的難度大增,也因此需要在訓練的過程中不斷搜集新資料;模型的每一個行為總是根據前一個行為,其偏差會在一連串行為中累積,使得小小的參數更新有可能會導致模型做出完全不同的行為;另一方面、模型在強化學習中所追求的是策略的最佳解,但最佳解很有可能不只一個。使模型同時精通多種策略並不是簡單的過程。
如何使用強化學習訓練模型?
首先、我們使模型與環境互動一陣子。其行為可能有好有壞,但這無所謂。我稱呼這些行為是「採樣行為」,並且稱呼模型的輸出為「行為機率分布」,也就是採樣前的機率分佈。根據環境給與的回饋,我們調整「採樣行為」以及「行為機率分布」之間的差異。如果採樣行為很差,我就調整模型的參數,使得模型產生和採樣行為一樣的行為的機率變小,反之亦然。經過一番操作後,理論上模型就能做出好行為了。
那…如何評價行為?
舉個例子吧!如果我希望模型懂得走路,我們可以幫正面移動加分、跌倒的話扣分。為了催促模型不要偷懶,我們還可以每秒扣一點點分數。每次使用力量的時候也要扣一點點分數以避免過度操作,否則模型可能會用極度費力的方式走路。
有人認為不應該一口氣給模型太困難的任務,應該要額外設計一些小獎勵,像是抬腿加分、往前跨一步也加分等等,但是這樣做的效果並不一定有用。我們並不清楚原因是什麼,我個人的猜測是小獎勵不一定符合模型當下想要學的事情,甚至有可能扼殺掉其他策略的可能性。另外、設計小獎勵並不容易,因為我們必須對環境有很深入的理解才能設計出合理的小獎勵。如果我們對環境很理解,其實也就不一定需要再訓練一個服從我們的理解的模型了吧?那樣的模型只能做到人類已經做到的事情,而且還達不到人類的水準,只能用來替代低階人力。
總得來說,強化學習模型可以協助人類在未知的環境中尋找最有勝出可能的策略。因此,強化學習被廣泛應用在自駕車以及機器人互動上,讓工程師只要專注於設計合理的互動介面,不需要探索互動策略。但強化學習也有其不擅長的地方,例如自然語言處理。
強化學習能做什麼有趣的事?
OpenAI 是一間AI公司,他們製作了gym 套件,裡頭包含了很多種遊戲環境。gym有好用的API,讓使用者可以透過程式控制與操作環境,是非常有名的強化學習應用套件之一。我們可以透過這些環境更具體的暸解強化學習的使用方法。
初探 CartPole
下面我實作一段如何使用強化學習教模型怎麼玩「CartPole」,這也是gym提供的環境之一。CartPole的目的是生存越久越好,當棒子倒下時遊戲結束,我們必須靠著左右移動避免中間的棒子傾斜。以下是我的原始碼以及用訓練過程拍成的影片。一如往常,我沒有仔細調整參數,所以效果並沒有很好,但作為示範已經足夠了。我們也可以參考Tensorflow團隊示範如何使用強化學習練Cartpole。
安裝gym的過程
我簡單說明怎麼安裝gym。gym是可以從pip獲得的module之一,所以直接透過pip獲得就可以了。gym環境使用範例請參考gym的說明。gym所有的環境根據用途或是資料庫分做數個大類。一部分是裝好gym之後就可以使用。有部分遊戲並沒有公開授權,例如Atari 系列的遊戲。使用者必須自備遊戲檔案(ROMs)。也有一些環境需要額外的資料庫(library),例如mujoco系列以及robotics系列。
# 安裝基礎的gym環境
python -m pip install gym
# 安裝完整的gym環境
python -m pip install gym[all]
我使用Tensorflow設計模型,Tensorflow的安裝方式在Windows、Linux以及Mac上略有不同。是因為這些平台提供給Tensorflow的GPU支援不同。以上連結均有安裝說明,這裡就不多做贅述。
小結
強化學習可以協助我們探索最佳策略,也已經在各類遊戲、自動控制中證明了自己的能力。也許不久的將來,人類只需要專心尋找問題的核心,尋找解決方案的工作就交給強化學習模型。
所有文章分類