cs231n---強化學習


介紹了基於價值函數和基於策略梯度的兩種強化學習框架,並介紹了四種強化學習算法:Q-learning,DQN,REINFORCE,Actot-Critic

1 強化學習問題建模

上圖中,智能體agent處於狀態st下,執行動作at后,會由於周圍環境的作用進入下一個狀態st+1,同時獲得獎勵rt。

馬爾可夫決策過程MDP建模了上圖過程:

我們定義策略Pi為一個從狀態s到動作a的函數,表示在狀態s下采取什么樣的動作a。

而我們的目標是,找到一個最好的策略pi,使得整個過程中累計的獎勵值最大:

比較正式的表達是:

 

2 Q-learning算法

(1)價值函數與Q-價值函數

對於一個給定的策略pi,只要我們給定初始狀態s0,就能產生序列

那么,只要給定一個策略pi,就能計算出在狀態s下所產生的累積獎勵的期望,也就是價值函數:

注意,價值函數評價了給定策略pi下狀態s的價值,由策略pi和當前狀態s所唯一確定。

類似的,Q-價值函數則評價了給定策略pi下,在狀態s下采取動作a后,所能帶來的累積獎勵期望:

Q-價值函數由策略pi和當前狀態s和當前動作a所唯一確定。

(2)貝爾曼方程

現在我們固定當前狀態s和當前動作a,那么目標就是要選擇最優策略pi,使得Q-value函數最大,這個最優的Q-value函數被記為Q*:

理解一下Q*,也就是在當前狀態s下采取動作a后,所能達到的最大累積獎勵期望。顯然Q*僅與s和a有關。

而強化學習方法Q-learning的核心公式——貝爾曼方程,則給出了Q*的另一種表達形式:

對公式的理解為:當我們在狀態s下采取動作a后,環境會反饋給我們一個獎勵r,以及下一時刻的狀態s'。記下一時刻的動作為a',這樣我們就能遞歸地使用Q*函數。

(3)Q-learning

現在讓我們來看一種經典的強化學習算法,Q-learning。

Q-learning中,我們需要一張稱為Q-table的查找表,該表第i行第j列的元素表示Q*(si, aj)的值。

然而我們並不知道Q*的具體形式以及值,我們只能一開始使用全0初始化Q-table,然后進行游戲,每執行一個動作后,使用貝爾曼方程去更新Q-table的值,理論研究表明當迭代次數足夠多后,Q-table的值將會收斂為真實的Q*值。這也被稱為值迭代算法:

Qi和Qi+1分別表示更新前和更新后的Q-table。

Q-learning的完整算法過程為:

 

 

3  深度強化學習----Deep Q-learning

傳統的Q-learning算法當遇到狀態空間很大時(例如狀態是一個游戲畫面的所有像素),我們不可能用表Q-table來枚舉出所有的狀態及其對應的動作a的所有q值。而Q*這個函數是我們最終要學習的,並且它很復雜。很自然地,我們想到用一個神經網絡來表示Q*,並且在游戲中去不斷的學習它!

前向傳播和反向傳播表示為:

直接這樣還不能有效的學習。原因有兩點:

因此我們使用一個叫做Experience Replay的機制,每次將生成的(st, at, rt, st+1)元組放入一個表中,然后每次訓練Q網絡時,從該表中隨機取一批mini batch進行訓練。

完整的Deep Q-learning算法為:

注意這里我們每次有一定概率去隨機的行動,這樣做的目的是探索更大的狀態空間。

 

4 策略梯度

(1)引入策略梯度

為什么要用策略梯度:基於價值函數的方法,當狀態空間很大時,價值函數會很復雜以至於難以學習。而策略函數(已知當前狀態下各個動作的條件概率分布)則會比較簡單。因此我們這里會去學習一個策略網絡,而不是價值網絡。

策略網絡的定義如下:

表示策略網絡的參數為θ,所有參數的可能取值構成了所有可能的策略。

對一個給定的策略,其價值定義為:

那么,我們要找到最優的參數θ,使得上面的J(θ)最大。即:。顯然要使用gradient ascent的方法,那么如何來計算策略參數的梯度呢?

(2)REINFORCE 計算策略梯度

這樣,我們就可以采樣出若干個軌跡τ,來估計策略梯度。注意這里的估計是一個無偏估計。

 

(3)直觀上理解策略梯度的表達式

注意看,這一項表示當前的梯度方向是使得各個時間步的動作出現似然增大的梯度方向,前面再加一個權重r(τ)。則當r(τ)高時,對應於該軌跡的各個動作似然要相對增大,當r(τ)低時,對應於該軌跡的各個動作似然要相對減小。很符合我們的直觀感受。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM