強化學習(reinforcement learning, RL)是近年來你們提的很是多的一個概念,那麼,什麼叫強化學習?html
強化學習是機器學習的一個分支,和監督學習,非監督學習並列。web
參考文獻[1]中給出了定義:app
Reinforcement learning is learning what to do ----how to map situations to actions ---- so as to maximize a numerical reward signal.機器學習
即強化學習是經過學習將環境狀態轉化爲動做的策略,從而得到一個最大的回報。函數
舉個栗子[2],在flappy bird遊戲中,咱們想設計一個得到高分的策略,可是卻不清楚他的動力學模型等等。這是咱們能夠經過強化學習,讓智能體本身進行遊戲,若是撞到柱子,則給負回報,不然給0回報。(也能夠給不撞柱子持續給1點回報,撞柱子不給回報)。經過不斷的反饋,咱們能夠得到一隻飛行技術高超的小鳥。學習
經過上面例子,咱們能夠看到強化學習的幾個特性[3]:優化
上面的大腦表明咱們的智能體,智能體經過選擇合適的動做(Action)\(A_t\),地球表明咱們要研究的環境,它擁有本身的狀態模型,智能體選擇了合適的動做\(A_t\),環境的狀態\(S_t\)發生改變,變爲\(S_{t+1}\),同時得到咱們採起動做\(A_t\)的延遲獎勵\(R_t\),而後選擇下一個合適的動做,環境狀態繼續改變……這就是強化學習的思路。spa
在這個強化學習的思路中,整理出以下要素[4]:設計
(1)環境的狀態\(S\),\(t\)時刻環境的狀態\(S_t\)是它的環境狀態集中的某一個狀態;3d
(2)智能體的動做\(A\),\(t\)時刻智能體採起的動做\(A_t\)是它的動做集中的某一個動做;
(3)環境的獎勵\(R\),\(t\)時刻智能體在狀態\(S_t\)採起的動做\(A_t\)對應的獎勵\(R_{t+1}\)會在\(t+1\)時刻獲得;
除此以外,還有更多複雜的模型要素:
(4)智能體的策略\(\pi\),它表明了智能體採起動做的依據,即智能體會依據策略\(\pi\)選擇動做。最多見的策略表達方式是一個條件機率分佈\(\pi(a|s)\),即在狀態\(s\)時採起動做\(a\)的機率。即\(\pi(a|s)=P(A_t=a|S_t=s)\),機率越大,動做越可能被選擇;
(5)智能體在策略\(\pi\)和狀態\(s\)時,採起行動後的價值\(v_\pi(s)\)。價值通常是一個指望函數。雖然當前動做會對應一個延遲獎勵\(R_{t+1}\),可是光看這個延遲獎勵是不行的,由於當前的延遲獎勵高,不表明到\(t+1,t+2,\dots\)時刻的後續獎勵也高, 好比下象棋,咱們能夠某個動做能夠吃掉對方的車,這個延時獎勵是很高,可是接着後面咱們輸棋了。此時吃車的動做獎勵值高可是價值並不高。所以咱們的價值要綜合考慮當前的延時獎勵和後續的延時獎勵。 \(v_\pi(s)\)通常表達爲:
\[ v_\pi(s)=E(R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\dots|S_t=s) \]
(6)其中\(\gamma\)做爲獎勵衰減因子,在\([0,1]\)之間,若是爲0,則是貪婪法,即價值只有當前延遲獎勵決定。若是爲1,則全部的後續狀態獎勵和當前獎勵一視同仁。大多數時間選擇一個0到1之間的數字
(7) 環境的狀態轉化模型,能夠理解爲一個狀態機率機,它能夠表示爲一個機率模型,即在狀態\(s\)下采起動做\(a\),轉到下一個狀態\(s^{'}\)的機率,表示爲\(P_{ss{'}}^{a}\)
(8)探索率$\epsilon \(主要用在強化學習訓練迭代過程當中,因爲咱們通常會選擇使當前輪迭代價值最大的動做,可是這會致使一些較好的但咱們沒有執行過的動做被錯過。所以咱們在訓練選擇最優動做時,會有必定的機率\)\epsilon $不選擇使當前輪迭代價值最大的動做,而選擇其餘的動做。
環境的狀態轉化模型,表示爲一個機率模型\(P_{ss{'}}^{a}\),它能夠表示爲一個機率模型,即在狀態\(s\)下采起動做\(a\),轉到下一個狀態\(s^{'}\)的機率。在真實的環境轉化中,轉化到下一個狀態\(s{'}\)的機率既和上一個狀態\(s\)有關,還和上一個狀態,以及上上個狀態有關。這樣咱們的環境轉化模型很是很是很是複雜,複雜到難以建模。
所以,咱們須要對強化學習的環境轉化模型進行簡化。簡化的方法就是假設狀態轉化的馬爾科夫性:轉化到下一個狀態\(s{'}\)的機率僅和當前狀態\(s\)有關,與以前狀態無關,用公式表示就是:
\[ P_{ss'}^{a}=E(S_{t+1}=s'|S_t=s,A_t=a) \]
同時對於第四個要素策略\(\pi\),咱們也進行了馬爾科夫假設,即在狀態\(s\)下采起動做\(a\)的機率僅和當前狀態\(s\)有關,和其餘要素無關:
\[ \pi(a|s)=P(A_t=a|S_t=s) \]
價值函數\(v_\pi(s)\)的馬爾科夫假設:
\[ v_\pi(s)=E(G_t|S_t=s)=E_\pi(R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\dots|S_t=s) \]
\(G_t\)表示收穫(return), 是一個MDP中從某一個狀態\(S_t\)開始採樣直到終止狀態時全部獎勵的有衰減的之和。
推導價值函數的遞推關係,很容易獲得如下公式:
\[ v_\pi(s)=E_\pi(R_{t+1}+\gamma v_\pi(S_{t+1})|S_t=s) \]
上式通常稱之爲貝爾曼方程,它表示,一個狀態的價值由該狀態以及後續狀態價值按必定的衰減比例聯合組成。
對於馬爾科夫決策過程,咱們發現它的價值函數\(v_\pi(s)\)沒有考慮動做,僅僅表明了當前狀態採起某種策略到最終步驟的價值,如今考慮採起的動做帶來的影響:
\[ q_\pi{(s,a)}=E(G_t|S_t=s,A_t=a)=E_\pi(R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\dots|S_t=s,A_t=a) \]
動做價值函數\(q_\pi(s,a)\)的貝爾曼方程:
\[ q_\pi(s,a)=E_\pi(R_{t+1}+\gamma q_\pi(S_{t+1},A_{t+1})|S_t=s,A_t=a) \]
按照定義,很容易獲得動做價值函數\(q_\pi(s,a)\)和狀態價值函數\(v_\pi(s)\)的關係:
\[ v_\pi(s)=\sum_{a\in A}\pi(a|s)q_\pi(s,a) \]
也就是說,狀態價值函數是全部動做價值函數基於策略\(\pi\)的指望。
同時,利用貝爾曼方程,咱們利用狀態價值函數\(v_\pi(s)\)表示動做價值函數\(q_\pi(s,a)\),即:
\[ q_\pi(s,a)=E_\pi(R_{t+1}+\gamma q_\pi(S_{t+1},A_{t+1})|S_t=s,A_t=a) \]
\[ =E_\pi(R_{t+1}|S_t=s,A_t=a)+\gamma E_\pi(q_\pi(S_{t+1},A_{t+1})|S_t=s,A_t=a) \]
\[ =R_s^a+\gamma \sum_{s'}P_{ss'}^{a}\sum_{a'}\pi(a'|s')q_\pi(s',a') \]
\[ =R_s^a+\gamma \sum_{s'}P_{ss'}^av_\pi(s') \]
公式5和公式12總結起來,咱們能夠獲得下面兩式:
\[ v_\pi(s)=\sum_{a \in A}\pi(a|s)(R_s^a+\gamma \sum_{s'}P_{ss'}^av_\pi(s')) \]
\[ q_\pi(s,a)=R_s^a+\gamma \sum_{s'}P_{ss'}^av_\pi(s') \]
解決強化學習問題意味着要尋找一個最優的策略讓個體在與環境交互過程當中得到始終比其它策略都要多的收穫,這個最優策略咱們能夠用 \(\pi^*\)表示。一旦找到這個最優策略 \(\pi^*\),那麼咱們就解決了這個強化學習問題。通常來講,比較難去找到一個最優策略,可是能夠經過比較若干不一樣策略的優劣來肯定一個較好的策略,也就是局部最優解。
如何比較策略優劣?通常經過對應的價值函數進行比較:
\[ v_{*}(s)=\max _{\pi} v_{\pi}(s)=\max_\pi \sum_a\pi(a | s) q_{\pi}(s, a)=\max _{a} q_{*}(s, a) \]
或者最優化動做價值函數:
\[ q_{*}(s, a)=\max _{\pi} q_{\pi}(s, a) \]
\[ =R_s^a+\gamma \max_\pi v_\pi(s') \]
狀態價值函數\(v\)描述了一個狀態的長期最優化價值,即在這個狀態下考慮到全部可能發生的後續動做,而且都挑選最優動做執行的狀況下,這個狀態的價值。
動做價值函數\(q\)描述了處於一個狀態,而且執行了某個動做後,所帶來的長期最有價值。即在這個狀態下執行某一特定動做後,考慮再以後全部可能處於的狀態下老是選取最優動做來執行所帶來的長期價值。
對於最優的策略,基於動做價值函數咱們能夠定義爲:
\[ \pi_{*}(a | s)=\left\{\begin{array}{ll}{1} & {\text { if } a=\arg \max _{a \in A} q_{*}(s, a)} \\ {0} & {\text { else }}\end{array}\right. \]
只要咱們找到了最大的狀態價值函數或者動做價值函數,那麼對應的策略\(\pi^*\)就是咱們強化學習問題的解。
關於強化學習的實例,具體可參見[4]和[5],很強,很棒。
在不少人的文章中,將強化學習訓練的模型被稱之爲「智能體」,爲何呢?由於它和咱們人類學習的思路很類似:
模型在沒有樣本的狀況下,主動去探索,而後從環境中獲取一個(延遲)反饋,而後經過反饋進行反思,優化策略/動做,最終學習成爲一個強大的智能體。
固然,強化學習還擁有一些缺點[6]:
樣本利用率低,須要用大量樣本進行訓練。而且有時訓練速度還很慢(遠遠低於人類)。
獎勵函數難以設計。大部分的獎勵函數都是0,過於稀疏。
容易陷入局部最優。文獻[6]中例子指出,一個以速度爲獎勵函數的馬,能夠四角朝天的「奔跑」。
對環境的過擬合。每每沒辦法一個模型用於多個環境。
不穩定性。 不穩定對於一個模型是災難性的。一個超參數的變化可能引發模型的崩潰。
固然,咱們不能一味確定,也不能一味否認,強化學習在AUTOML,AlphaGO的成功應用也說明了強化學習儘管會有不少困難,可是也是具備一個具備探索性、啓發性的方向。
[1] R.Sutton et al. Reinforcement learning: An introduction , 1998
[2] https://www.cnblogs.com/jinxulin/p/3511298.html
[3] https://zhuanlan.zhihu.com/p/28084904
[4] https://www.cnblogs.com/pinard/p/9385570.html
[5] https://www.cnblogs.com/pinard/p/9426283.html
[6] https://www.alexirpan.com/2018/02/14/rl-hard.html
本文由飛劍客原創,如需轉載,請聯繫私信聯繫知乎:@AndyChanCD