【RL】前言和強化學習基本概念

博主的github鏈接,歡迎大家來訪問~:https://github.com/Sh-Zh-7

強化學習經典算法實現地址:https://github.com/Sh-Zh-7/reinforce-learning-impl

0. 前言

不得不說Github確實是一個社交網站,我在這個上面follow了其他人以後,就可以看到其他人最近的動向。這不,我在GitHub上follow了一個大三的學長,發現他正在搞這個,所以我也萌生了搞強化學習的主意。

經過一比對,我發現他的代碼都是借(chao)鑑(xi)Morvan Zhou的。然而現在,2020年爲止,Morvan Zhou的強化學習是使用tensorflow框架實現的,並沒有對應pytorch的實現(諷刺的是,Morvan Zhou Github上star最多的反而是他pytorch的教程)。筆者此時並不會tensorflow,所以決定找其它的教程。

最後我找到了一個star3600+(截止2020年2月初)的repo,雖然他也使用tensorflow實現的(那沒辦法,目前能找到的pytorch強化學習教程很少),但是他的思路非常清晰。我就跟着這個教程用pytorch重新寫了一遍這些算法。不過pytorch近年來越來越火熱,AI搞得最火熱的Stanford University近年來的深度學習框架也由tensorflow轉變到了pytorch,相信以後高質量的pytorch強化學習教程會越來越多。所以本專欄並不是一個面向新手的教程,只不過是一個關於強化學習知識點的總結。

想要強化學習入門,我個人的建議是:臺大李宏毅視頻教程(沒必要貼鏈接,這種東西每年都會有新的資源)-> Morvan Zhou強化學習tensorflow implementation(實在找不到好的pytorch教程了。。tensorflow湊合着看吧)-> 理論知識的學習,這裏推薦Sutton的經典書籍

 

1. 強化學習基本要素

  1. state:又被稱作是obersavation,我個人認爲叫obersavation更爲準確,因爲它是我們agent對於environment的觀測。舉幾個例子,比如在windy-world中它是agent所在位置的座標,在cart-pole中,它是cart-pole的速度,位置,角度等信息。
  2. action: 這個就是agent所作出的動作。注意對於同一個state, 你做出相同的action,並不一定會跳轉到下一個相同的state. RL中,我們有專門的數學概念來闡述這個問題,叫做狀態轉化模型P。他衡量了“給定狀態和動作,跳轉到某個狀態的概率”。這就可以證明我們之前的言論。
  3. reward:強化學習最關鍵的就是這個reward,我們強化學習的目的就是最大化我們trajactory中的accumulated reward。這個reward其實是你自己設定的。比如在space invader遊戲裏面,我們的action有左右移動和射擊三個。只有我們擊敗了敵人,才能獲得分數。因此我們可以給射擊設置reward爲1,左右移動設爲0。
  4. policy: policy就是所謂的策略,他與我們的問題也是息息相關的,一般而言,我們程序的目的是最大化accumlated reward, 輸出則是policy。同一個狀態採用不同的動作,得到的reward也不同。既然我們的目的是最大化accumulated reward,那麼我們就要有一個策略來指導我們:到了某一狀態時,應該採用什麼樣的動作,這個就是我們的policy。

 

2. 強化學習流程

在瞭解強化學習基本概念之後,我們再瞭解一下強化學習的流程:

  1.  先初始化observation。
  2.  根據policy選擇action, 即給定state, 輸出action。
  3.  用這個action與environment interact, 得到下一個state和reward(這一步主要基於你的狀態轉移模型)。
  4.  判斷是否結束,不然返回2.

這只不過是一個episode的流程,實際上,爲了得到正確的決策,上面的流程必須要做多次纔行,而且我也沒有往裏面添加更新策略的步驟。這個在後面的篇章裏將會提到。

 

3. 強化學習在機器學習中的地位

其實強化學習和監督和無監督學習完全是三碼不同的事情。如果你硬要說和那個像一點,我覺得他到更像是監督學習。

雖然強化學習沒有顯示地給出label,但是他是通過reward學習的,通過reward來改變它的決策。所以強化學習並非無監督學習

那強化學習和監督學習差別是什麼呢?以下棋爲例,監督學習是讓人教他怎麼下:比如遇到了某一個狀況,那就讓人告訴他下哪兒好。強化學習則是讓機器自己學習,通過下棋的勝負給定reward,在極大化reward的時候,增強自己的能力。

很顯然,我們用監督學習,只能訓練出會下棋的AI,然而我們用強化學習,卻能訓練出能痛扁人類的AI

一般而言,我們在實際工程的時候,都是先用監督學習訓練一個會下棋的AI,然後再讓他自己和自己打,以此提高能力

下圖是強化學習在機器學習中的地位,從這幅圖中我們也能看出強化學習和監督和無監督學習是兩碼事情。

 

4. 馬爾可夫決策過程MDP

讓我們稍微把目光從強化學習上移開,看看其它重要的東西。

馬爾可夫假設是屬於我們馬爾可夫決策過程的概念。它的出現主要是爲了簡化我們的建模

其基本思想是:當前狀態只由其上一個狀態所決定,而不是由所有出現過的歷史狀態決定的

這樣我們的一些概念就可以用更簡單的數學公式來表達了:

  1.  原來與歷史狀態相關的狀態轉移模型只與當前狀態有關了。P(s_{t+1}|s_t, s_{t-1}, .., s_1, a_t) \Rightarrow P(s_{t+1}|s_{t}, a_t)
  2.  在描述策略的時候,我們也不用考慮歷史的狀態了。\pi(a_t|s_t, s_{t-1}, .., s_1) \Rightarrow \pi(a_t|s_t)
  3.  在考慮狀態和動作價值的時候,也不用考慮歷史的狀態了。(後面的篇章會提到)

 

5. 強化學習怎麼做

(1) Accumulated reward表達式

之前我們已經講了,我們強化學習的目的就是最大化accumlated reward。那麼我們應該怎麼做呢?最簡單的想法就是把reward全部加起來, 然後想方設法把它最大化:G=r_1 + r_2 + r_3 +...

這個想法很簡單,但是並不靠譜,我們對其稍作休整,考慮一下觀點:

  1.  當前狀態,對越是遙遠未來的狀態,影響越小,因此,我們再考慮其導致未來狀態的reward的時候,就要加上一個discount factor。
  2.  考慮之前MDP的假設,我們當前狀態的G,不應該受之前狀態的影響。

所以我們的G就變成了:G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2}+...

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

(2) 狀態價值函數和動作價值函數和策略

好了,我們的表達式已經列出來了,注意我們的目的是調整狀態和動作來最大化這個G,因此我們要引入兩個新的概念,那就是狀態價值和動作價值

  1. 狀態價值用來衡量,當前狀態,後續執行策略\pi, 會得到多少價值。v_\pi(s_t) = E(G_t|s_t)

  2. 而動作價值則用來衡量,當前狀態,執行某個動作,後續再執行策略\pi, 會得到多少價值。Q_\pi(a_t, s_t) = E(G_t| a_t, s_t)

之前已經提到過,由於策略的隨機性和環境的隨機性。後續的狀態的價值其實是一個random variable。因此,不管是我們的狀態價值函數還是我們的動作價值函數,我們使用的都是期望

因爲我們要輸出的是策略,所以我們要把這策略和這兩個函數聯繫起來

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

(3) 尋找最優解

首先定義我們的最優解:

對於所有的狀態和動作,都有:

$$ \left\{ \begin{aligned}q_{*}(s,a) = \max_{\pi}q_{\pi}(s,a) \\v_{*}(s) = \max_{\pi}v_{\pi}(s) \end{aligned} \right. $$

這時候,策略爲

\pi_{*}(a|s)= \begin{cases} 1 & {if\;a=\arg\max_{a \in A}q_{*}(s,a)}\\ 0 & {else} \end{cases}

我們的目的就是找到或者逼近這個策略,具體怎麼做,看我接下來的博文。強化學習方法有很多種分類,下圖只是其中一種:


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章