項目介紹
這是優達學院機器學習課程的第4個實習項目,需要訓練智能出租車學習交通規則,然后安全可靠地到達目的地。項目通過循序漸進的方式展開,從熟悉基本的領域知識開始,再以隨機動作來直觀感受智能車的狀態,也是在這一步,讓初學者有了心潮澎湃的感覺,“車終於動了!”,是的,從0開始一路走來,以游戲闖關的方式,終於來到了4級,第一次體驗了傳說中的“智能”了,也許是“眼見為實”吧,小車在自己算法的控制之下行動,是一種很美好的感受。然后項目通過引導,讓大家開始實現基於Q-Learning算法的智能車控制。這是本項目核心算法的實現部分,對於初學者來說也是一個挑戰。接着,項目要求在上一個Q-Learning算法的基礎上通過調節參數,讓智能車達到更優的效果。最后,項目延續以往的風格,分析討論環節,引導大家思考並論證為什么這個實現是優化的,為什么這個項目中不需要使用gamma參數。
我喜歡優達學院的項目設計。從我的感受,項目設計對我們工作、學習也很有啟發:
- 難度合理,屏蔽輔助細節:難度不要過高,通過代碼框架屏蔽了項目總體的復雜度,只留下和當前課程緊密相關的核心部分讓學生實現,同時也可以讓學生體會到,一個完整項目的實現是需要很多細節工作的。
- 循序漸進,“拆解”實現:每個項目總能分步驟拆解,由易到難,由表及里,最終實現項目的需求。
- 科學完備,科研范本。我從一開始P1項目就感受項目的設計很到位,除了上面說的循序漸進,是科學研究的重要手段之外,我還從項目設計中看到以下方面:
- 合理拆解: 這就是第二點提到的,可以說,面對復雜問題,拆解成功很可能就完成了一半。有人說領導的職責就是一個“翻譯”,把“目標”翻譯成具體“任務”,我很同意這個觀點。而對於機器學習的初學者,顯然是需要依賴這樣的拆解來完成項目。就如同職場新人,只能接受任務,而不是目標。這同時也告訴我們了一條進階之路。上面的說明中已經展示了這個項目是如果分解的。
- 對比實驗: “沒有對比就沒有傷害”,同樣,沒有對比也沒有說服力。比如本項目,用隨機算法和Q-Learning算法做比較,從而說明強化算法之Q-Learning算法的優勢所在。
- 可視化展示: 人們都相信“眼見為實”,無論是在PPT,還是科研論文,還是這樣的機器學習成果演示場景,一張內容豐富的圖標遠勝長篇累牘的文字解說。機器學習項目使用Jupyter Notebook做項目演示和代碼實現。Jupyter Notebook是個讓我尖叫的好產品,可以邊寫代碼,邊演示結果,真是機器學習的神器。而我們自己也需要在自己平常的工作學習中找到有利的工具去達成展示的效果。
- 具體實例論證: “細節”的力量有時候容易被忽視,愛用描述性的語言一直是我的一個毛病,而具體實例解析更具有說服力,也會讓人印象更深刻。比如這個項目就要求拿出幾個具體的步驟,列出當前的Q-value,展示哪個是最優,而智能車在這個時候又是怎么選擇動作的,並因此得到了多少獎勵,因此這個策略是合理的。就這么一兩個例子,就會像釘子一樣扎進了別人的記憶里,這就是“榜樣”的力量吧。
- 辯證分析:好的方面前面一定已經總結了很多,但是世界那么大,你看到的總是那么多。就連牛頓定律都有局限性,何況我們的研究/方案。所以完整的分析還應該包括局限性分析,是為批判性思維。P1的房價預測項目最后,就要求做出應用性分析。基於某個地區,某個時間段的數據的分析結果對其他地區,現今是否有可用性呢?
回到本項目,是強化學習在自動駕駛領域的迷你實驗項目,我相信和工業級的自動駕駛還是有較大距離,但背后的算法思想應該有共同之處:從環境中學習,不斷優化行為的質量。這就是強化學習要研究的方向。
強化學習簡介
Reinforcement Learning,與監督學習的和非監督學習不同的是,強化學習研究的是:具有行為能力的智能體,在環境中如何行動,從而取得預期的結果。我的理解,根據環境的不同,強化既可以應用於機器人、無人機等實體操控,又可以用於(復雜的)純數據分析。當然應用於自動駕駛等與現實環境交互的領域是強化學習的強項。
那么強化學習的模型中,都有哪些元素呢?這里就完全可以類比一下人類的行為模式,想象一下,一個人初次看到“火”會是怎么樣的過程,比如小孩子對火的認識過程:
首先你進入一個環境中,通過眼睛觀察,發現了一團紅彤彤的東西在火把頂部,你從大腦中搜索,沒有找到對應的認識,但是又好奇這到底是什么,於是好奇心驅使着你,於是你決定用手去感受一下,你慢慢用手靠近火焰,感受到溫度慢慢上升,你知道了這個東西是“熱”的,膽大的人也許還會靠近,直到被燙傷一次,你又知道了這個東西可以燙傷皮膚,還有些人,或許會繼續其他動作,拿一張紙靠近火焰,結果紙也染上了這東西,於是又知道了這個東西可以從一個地方傳遞到另外一個地方,知道哪天有人告訴你,這個東西叫“火”。人類的整個生活,就是這樣一系列觀察-思考-動作-反饋-【觀察-思考-動作-反饋】的過程。而強化學習,就是應用這樣的過程不斷“自主學習”,從而學會一項技能,如駕駛。
如圖,強化學習的要素就是:狀態State,動作Action,獎勵Reward。強化學習的過程就是:不斷通過當前的樣本{s1,a1,r1},學習改進得到更優的策略Policy,使得Reward越來越好。
Q-Learning
原理雖然明確了,但是算法的實現確是經歷了前人不斷的探索,從MDP馬可夫決策過程,到Bellman方程,以及Q-Learning算法理論,正是在這些大量的理論研究基礎上,強化學習才得以落地。(這些算法及其過程將在其他篇幅中討論)
回到本次智能出租車項目,用的就是Q-Learning,為什么選擇Q-Learning?這實際上也是個問題,也不是初學者就能知道的。這次重點工作包括: Q-Learning算法的實現,參數調節優化。
既然是項目總結,還是要貼一下Q-Learning算法,其實實現過程還是走了一些彎路。
其中是學習率learning rate (取值(0,1])),表示智能車的Q值更新過程中有多少來自經驗,多少來自新的探索發現。gamma折扣因子,表示未來狀態回溯到當前狀態時的反向正面獎勵,由於本項目的特點(起點終點不固定,當前位置與終點距離未知,過大的回溯操作容易造成路徑依賴),並沒有使用,相當於取值為0。
另外,項目中還使用了epsilon參數,表示開始階段智能車隨機選擇動作的概率較大,以便有更多的路徑探索機會,隨着經驗的積累,隨機動作越來越少,而是更多的根據經驗選擇。
項目結果
經過多輪測試,項目達到的效果如下:
但是如果多次測試,測試結果穩定性依然不太理想。另外,可靠性在訓練200次以后,依然有一定的起伏現象,不知是否有更優的參數選擇。但不論如何,通過這個項目,已經能夠切實感受到算法的魅力,通過訓練,代理程序確實獲得了較好的經驗用於駕駛。