這裡是強化學習入門,的入門 | 絕對新手友好
原作:Thomas Simonini
牆化栗子 編譯自 FreeCodeCamp
量子位 出品 | 公眾號 QbitAI
強化學習是機器學習裡面非常重要的一個派別。智慧體 (agent) 會不斷執行一些操作,通過結果來學習,在不同的環境中分別應該採取怎樣的行動。
在一系列教學文章裡,我們可以瞭解不同的架構,來解決強化學習的問題。Q學習,深度Q網路 (DQN) ,策略梯度 (Policy Gradients) ,演員-評論家 (Actor-Critic) ,以及近端策略優化 (PPO) 都是將要涉及的演算法。
這是本系列的第一篇文章,你可以抓住的重點有:
· 什麼是強化學習,以及為什麼獎勵最重要
· 強化學習的三種方式
· 深度強化學習的“深度”是什麼意思
以上幾點,在進入強化學習的複雜世界之前,可能還是有必要了解一下。
這是個友好的引子
強化學習的中心思想,就是讓智慧體在環境裡學習。每個行動會對應各自的獎勵,智慧體通過分析資料來學習,怎樣的情況下應該做怎樣的事情。
其實,這樣的學習過程和我們自然的經歷非常相似。想象自己是個小孩子,第一次看到了火,然後走到了火邊。
你感受到了溫暖。火是個好東西 (+1) 。
然後就試著去摸。臥槽,這麼燙 (-1) 。
結論是,在稍遠的地方火是好的,靠得太近就不好。
這就是人類學習的方式,與環境互動。強化學習也是一樣的道理,只是主角換成了計算機。
比如,智慧體要學著玩超級馬里奧。強化學習過程可以用一個迴圈 (loop) 來表示:
· 智慧體在環境 (超級馬里奧) 裡獲得初始狀態S0 (遊戲的第一幀) ;
· 在state 0的基礎上,agent會做出第一個行動A0 (如向右走) ;
· 環境變化,獲得新的狀態S1 (A0發生後的某一幀) ;
· 環境給出了第一個獎勵R1 (沒死:+1) ;
於是,這個loop輸出的就是一個由狀態、獎勵和行動組成的序列。
而智慧體的目標就是讓預期累積獎勵最大化。
獎勵假說為根基
問題來了,目標為什麼是預期累積獎勵最大化?
因為,強化學習原本就是建立在獎勵假說的基礎之上。想表現好,就要多拿獎勵。
每一個時間步 (time step) 的累積獎勵都可以表示為:
或者
不過,我們沒有辦法把獎勵直接相加。因為遊戲裡,越接近遊戲開始處的獎勵,就越容易獲得;而隨著遊戲的進行,後面的獎勵就沒有那麼容易拿到了。
把智慧體想成一隻小老鼠,對手是隻貓。它的目標就是在被貓吃掉之前,吃到最多的乳酪。
就像圖中,離老鼠最近的乳酪很容易吃,而從貓眼皮底下順乳酪就難了。離貓越近,就越危險。
結果就是,從貓身旁獲取的獎勵會打折扣,吃到的可能性小,就算乳酪放得很密集也沒用。
那麼,這個折扣要怎麼算呢?
我們用γ表示折扣率,在0和1之間。
· γ越大,折扣越小。表示智慧體越在意長期的獎勵 (貓邊上的乳酪) 。
· γ越小,折扣越大。表示智慧體越在意短期的獎勵 (鼠邊上的乳酪) 。
這樣,累積獎勵表示出來就是:
簡單來說,離貓近一步,就乘上一個γ,表示獎勵越難獲得。
片段性任務還是連續性任務
強化學習裡的任務分兩種。
片段性任務 (Episodic Tasks)
這類任務,有個起點,有個終點。兩者之間有一堆狀態,一堆行動,一堆獎勵,和一堆新的狀態,它們共同構成了一“集”。
當一集結束,也就是到達終止狀態的時候,智慧體會看一下獎勵累積了多少,以此評估自己的表現。
然後,它就帶著之前的經驗開始一局新遊戲。這一次,智慧體做決定的依據會充分一些。
以貓鼠迷宮為例的一集:
· 永遠從同一個起點開始
· 如果被貓吃掉或者走了超過20步,則遊戲結束
· 結束時,得到一系列狀態、行動、獎勵和新狀態
· 算出獎勵的總和 (看看錶現如何)
· 更有經驗地開始新遊戲
集數越多,智慧體的表現會越好。
連續性任務 (Continuing Tasks)
永遠不會有遊戲結束的時候。智慧體要學習如何選擇最佳的行動,和環境進行實時互動。就像自動駕駛汽車,並沒有過關拔旗子的事。
這樣的任務是通過時間差分學習 (Temporal Difference Learning) 來訓練的。每一個時間步,都會有總結學習,等不到一集結束再分析結果。
探索和開發之間的權衡
在討論強化學習的幾種方法之前,必須講到這件事。
· 探索 (Exploration) 是找到關於環境的更多資訊。
· 開發 (Exploitation) 是利用已知資訊來得到最多的獎勵。
要記住,目標是將預期累積獎勵最大化。正因如此,它有時候會陷入一種困境。
小老鼠可以吃到無窮多塊分散的乳酪 (每塊+1) 。但在迷宮上方,有許多堆在起的乳酪(+1000) ,或者看成巨型乳酪。
如果我們只關心吃了多少,小老鼠就永遠不會去找那些大乳酪。它只會在安全的地方一塊一塊地吃,這樣獎勵累積比較慢,但它不在乎。
如果它跑去遠的地方,也許就會發現大獎的存在,但也有可能發生危險。
程式猿需要設定一種規則,讓智慧體能夠把握二者之間的平衡。
強化學習的三種方法
前菜吃完了,我們終於要開始講解決強化學習問題的方法了。三種方法分別是:基於價值(value-based)、基於策略(policy-based)以及基於模型(model-based)的方法。
基於價值 (Value-Based)
這種方法,目標是優化價值函式V(s)。
價值函式會告訴我們,智慧體在每個狀態裡得出的未來獎勵最大預期 (maximum expected future reward) 。
一個狀態下的函式值,是智慧體可以預期的未來獎勵積累總值,從當前狀態開始算。
智慧體要用這個價值函式來決定,每一步要選擇哪個行動。它會採取函式值 (就是Q值) 最大的那個行動。
在迷宮問題中,每一步我們都選取最大函式值:-7,-6,-5,以此類推,達到目標。
基於策略 (Policy-Based)
這種方式,會直接優化策略函式π(s),拋棄價值函式。
策略就是評判智慧體在特定時間點的表現。
把每一個狀態和它所對應的最佳行動建立聯絡。
策略分為兩種,
· 確定性策略:某一個特定狀態下的策略,永遠都會給出同樣的行動。
· 隨機性策略:策略給出的是多種行動的可能性分佈。
從圖中我們可以看到,策略直接指出了每一步的最佳行動。
基於模型 (Model-Based)
這種方法是對環境建模。這表示,我們要建立一個模型,來表示環境的行為。
問題是,每個環境都會需要一個不同的模型 (馬里奧每走一步,都會有一個新環境) 。這也是這個方法在強化學習中並不太常用的原因。
深度強化學習
所謂深度強化學習,就是在強化學習裡,加入深度神經網路。
如圖,拿Q學習和深度Q網路 (DQN) 來舉例。
· Q學習,是利用一個傳統演算法建立Q-table,來幫助智慧體找到下一步要採取的行動。
· DQN,是利用深度神經網路來近似Q值。
恭喜你讀到現在。這第一篇文章的資訊量還是不小的。
△ 根本停不下來
有興趣的同學,可以堅持服用一療程。
這裡是本系列大綱的傳送門:
https://simoninithomas.github.io/Deep_reinforcement_learning_Course/
— 完 —
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話介面,回覆“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
վ'ᴗ' ի 追蹤AI技術和產品新動態
相關文章
- 強化學習入門 -KDnuggets強化學習
- 新手入門深度學習?這裡有7本必看書籍深度學習
- JavaScript新手入門學習系列JavaScript
- TensorFlow入門簡介,新手請看這裡!
- 如何學習Python,新手如何入門Python
- 2019最全Python入門學習路線,不是我吹,絕對是最全Python
- Java新手入門學習路線圖Java
- 新手入門前端,需要學習的基礎內容。前端
- 新手入門,webpack入門詳細教程Web
- Linux新手入門怎麼學?如何學習好Linux?Linux
- typer 新手入門
- **Git新手入門**Git
- 新手學習Java,如何快速從入門到精通!Java
- 技術 | 強化學習入門以及程式碼實現強化學習
- python入門學習這篇夠了,強烈建議收藏!Python
- [MySQL光速入門]008 SQL強化練習MySql
- 大資料學習入門看什麼書?大資料新手怎麼入門?大資料
- Linux系統新手入門學習的四點建議Linux
- Jwt的新手入門教程JWT
- WordPress 是什麼?TechMoon 科技月球 - 新手入門教學
- Linux運維新手如何快速入門?Linux學習方法Linux運維
- Latex排版學習筆記(2)——Latex新手入門教程筆記
- 這可能是最簡單易懂的機器學習入門機器學習
- React新手入門 教程React
- MongoDB 新手入門 - CRUDMongoDB
- MongoDB 新手入門 - AggregationMongoDB
- Jmeter新手入門必看JMeter
- Windows Terminal 新手入門Windows
- Android新手入門1Android
- 新手如何入門linux,linux原來還可以這麼學Linux
- GORM學習入門GoORM
- Nginx入門學習Nginx
- mybatis入門學習MyBatis
- Linux入門學習Linux
- spring入門學習Spring
- MyBatisPlus入門學習MyBatis
- Vue入門學習Vue
- ROS入門學習ROS