學習情況:
先后聽了兩門課程,分別是David Silver的RL和Sergey Levin的DRL,各耗時一周左右,后者更難一些,對RL基本概念、常用演算法原理及其偽代碼有了大致了解,但是因為時間有點趕,沒有敲完整的演算法代碼,
由于已經有寫得比較好的課程筆記 (RL 和 DRL),就不重復造輪子了,兩位博主對課程內容理解得都相對透徹,尤其是前者,解答了我很多看視頻沒太聽懂的疑惑,
這份筆記是我在聽完兩門課程后想梳理的一些東西,并不描述演算法、公式的推導細節,大概只是對這些天學的RL基礎知識的一份簡單梳理,可以說只是一個目錄,大致思路跟著Silver的課整理,對部分演算法補充cs285講的內容,cs285的課程要難很多,講的很多內容都涉及到復雜的數學公式推導,感覺很多part都能單獨出長筆記,在這篇基礎筆記中就不提及了,挖坑以后寫,
由于初學,了解得比較淺薄,可能有理解錯誤的地方,也歡迎幫我指出錯誤,閱讀這篇筆記時最好有一定RL基礎,因為有些名詞出現時可能不做解釋,全文共1.2w字,純手敲,
目錄
RL基礎概念
動態規劃DP
Policy Iteration
Value Iteration
蒙特卡洛MC
時序差分TD
n-step TD
TD(λ)
SARSA
Q-learning
DQN
Nature DQN
DDQN
Prioritized Repay DQN
Dueling DQN
Policy Gradient
REINFORCE
Actor-Critic
DPG
DDPG
A3C
Model-based method
Dyna
Dyna-Q
MCTS
RL基礎概念
RL (Reinforcement Learning) 是一門決策學科,而且解決的是Sequential Decision,關于RL的意義,Sergey在cs285中講到,它提供了一種build intelligent model的新方式,不是模擬大腦結構(神經網路),而是模擬人的成長程序,圖靈說,"與其通程序式模擬成人,不如通程序式模擬兒童,并給予適當的教育",
Sequential Decision的意思是,做的上一個決策會影響到下一個決策,agent做出的action會對environment造成影響,互動使得該agent的下個state受影響,進而影響下個action決策,
model-free RL:資料驅動,通過大量采樣,使用sampling模擬,估計agent的value function,從而優化策略
model-based RL:最優控制,首先建立具體問題的模型,通過高斯程序(GP)或貝葉斯網路(BN)等方法,然后對問題求解,使用模型預測控制(MPC)、線性二次調節器(LQR)、線性二次高斯(LQG)、迭代學習控制(ICL)等方法求解,
最開始想把所有演算法分到model-free和model-based中,但是理思路時候感覺RL演算法分類并不是非黑即白的,有些RL演算法間的邊界是模糊的,并不像傳統的ML可以直接分為監督學習和非監督學習(它們之間的界限很明確),
分類方式很多,但是應該每種分類方式都有相交的部分,model-free/model-based,policy-based/value-based/actor-critic,引入DL否,on-policy/off-policy,同步/異步,
RL情景大概為,在某個state下,agent依據policy,采取action,與environment互動,agent獲得反饋reward,agent獲得的reward會指導policy改進,在state'下選擇action',回圈往復,policy不斷被優化,

比如學生 (agent) 上英語課 (state) 選擇睡覺 (action),考了59分被家長一頓打 (reward<0);他上課選擇學習 (action),考100分且被一頓夸 (reward>0),下次就知道在上幼ò肝(state)該選擇干什么了(action),
在RL中Reward很顯然是一種延時價值,比如考了59分(action)后才挨了打(reward),動作后才知道這個動作的價值,所以Reward這個反饋出現在動作執行之后
在什么state下該采取怎樣的action,這就是策略policy,策略分為deterministic policy和stochastic policy兩種,
deterministic policy指每個state都有確定的action,即,經典的deterministic policy,如Q-learning,SARSA,TD.
stochastic policy指state下可以采取不同action,它用條件概率表示,,輸出的是在該state下采取不同action的概率,經典的stochastic policy,如Vanilla/Nature PG,REINFORCE,Natural Actor-Critic.
為什么要輸出概率呢?舉一個例子,比如我 (agent) 站在宿舍門口(state),Π判斷我往前走的概率是0.7,向后/左/右走的概率各是0.1,那么policy會隨機選擇我接下來的action(概率大的被選到的可能性大),這樣agent就能自主移動啦,
RL演算法目的為,優化策略policy,以更好地決策,agent根據policy自主與環境互動,而policy的好壞由reward評估,
RL有兩個基本問題,其一是預測問題,或者叫策略評估(Policy Evaluation),例如對model-free模型中,是給定狀態集S,動作集A,即時獎勵R,衰減因子γ,策略Π,求解該策略的狀態價值函式v(Π),其二是控制問題,或者叫策略提升(Policy Improvment),給定狀態集S,動作集A,即時獎勵R,衰減因子γ,探索率ε,求解最優價值函式和最優策略
,在model-based中還給定了概率轉移矩陣P,
實際環境是復雜的,建模很麻煩,于是引入馬爾可夫性質定義問題,它指,"The future is independent of the past given the present",即未來只與現在有關,
則將RL情景定義為MDP (Markov Decision Process):

上圖中,引數,如S,P,R的定義都用是Markovian的
策略Π也由MDP定義為: ,即在狀態s時采取動作a的概率只與擋墻狀態s有關,與過去狀態無關
狀態的價值v(利用Bellman Equation):
其中,G(t)是從當前狀態開始的一條trajectory上的reward,用了discount factor是為了削弱較遠狀態的影響
在狀態s下采取動作a的價值q(利用Bellman Equation):
v和q關系:
通常使用v或q評估policy的好壞、以及指導policy優化()
動態規劃DP
動態規劃(Dynamic Programming ,DP)用于解決model-based RL problem,它需要提前知道模型的狀態轉移矩陣P(即知道某個state采取某個action后next state的分布情況),
DP用于求value,它將problem劃分成更小的sub-problem,在回溯更新某個狀態的價值時,需要回溯該狀態所有的后續價值,
講一講使用動態規劃的Policy Iteration 和 Value Iteration,
Policy Iteration
就是這個圖:

好好看懂這個圖Π是怎么收斂的就懂這個演算法的意思了,這里是deterministic policy
具體步驟silver的ppt講得特別明白,一遍沒看懂,第二遍就看懂個七八十了,寫得很清晰:


Value Iteration
從上面的演算法流程得知,Policy Iteration中value是不斷通過更新的策略得出的,但是,通過定義得出value 后,其實可以不用顯式地定義policy,直接每次貪婪地選擇value最大的action就可以了
蒙特卡洛MC
蒙特卡洛(Monte Carlo,MC)通過sampling近似求解,通過采樣若干經歷complete episode評估狀態的真實價值,真實價值是多條episode的G(t)的均值,即
由Incremental Mean推導公式,得出價值函式和狀態-價值函式:
根據是否計算序列中重復狀態的G(t),分為first-visit MC和every-visit MC,后者用得更多,
Policy Evaluation時,套上面的V或Q公式就行了,Policy Improment時,相對于動態規劃的優化,MC一般優化
,在使用deterministic policy選擇action時,不同于DP一般用貪婪,MC一般用ε-貪婪,增加Exploaration,ε會逐漸減小至0便于收斂
時序差分TD
時序差分(Temporal-Difference,TD)通過sampling近似求解,通過采樣若干incomplete sequence評估狀態的真實價值,由Bellman Equation,
這種用TD目標值()代替G(t)的程序稱為引導(bootstrapping),TD誤差為
對TD,同樣的,價值函式和狀態-價值函式定義為:
其中,α∈[0,1]
n-step TD
n-step TD就是不只往前看一步了,比如2-step往前多看兩步,此時某個狀態的價值變成
TD(λ)
TD(λ)為了避免n-step TD不知道怎么選n的問題,引入了引數λ以便于調超參,sampling時G(t)變成
Policy Evaluation時,套TD的Q公式就行了,Policy Improvment時,TD常見的on-policy是SARSA,常見的off-policy是Q-learning,TD思想是主流RL的基礎,
on-policy是指只使用1個policy 選擇動作實際與環境互動 和 更新價值函式,off-policy指使用2個policy,1個policy用于選擇動作與環境互動(為了保證Exploration;一般用ε-貪婪),1個policy用于優化價值函式(為了保證Exploitation;一般用貪婪)
SARSA
SARSA (state → action → reward → state → action),是TD思想的演算法,Policy Evaluation部分和TD的v(s)一樣,Policy Improvment時使用on-policy,價值迭代公式也與TD一樣,使用ε-貪婪選擇action,其實SARSA就是最簡單的TD思想的體現,
Q-learning
TD采樣模擬求q(s,a),off-policy,想想off-policy這個想法的提出還真是挺妙的,相較于ε-貪婪更能在E&E間取平衡

關于Q-learning受資料影響較大的問題:
Q-learing直接學習最優策略,而最優策略對訓練資料的依賴性較大(后面的演算法使用buffer降低資料的相關性和策略的資料依賴性),所以受資料影響較大,如果訓練資料的方差很大,這可能會影響Q函式的收斂,可能陷入一些特殊的最優"陷阱",比如"Cliff Walk",
因此在實際生產中,如果在模擬環境中訓練強化學習模型,推薦使用Q-learning,如果是在線生產環境中訓練模型,則推薦使用SARSA
Q-learning演算法的tips:


DQN
DQN (Deep Q-learning) 和Q-learning的不同之處就在于使用神經網路來模擬q 其中,w是神經網路的權重,DQN向神經網路中輸入state,神經網路會自動映射出q(其實還有一種是向其輸入s和a,自動映射出q),神經網路用CNN、RNN等都可以,

很顯然的Q-learning和DQN都是value-based method
為了適應大規模復雜問題,向RL中引入DL,傳統的RL演算法,如SARSA、Q-learning需要保存一張很大的Q(state,action),當問題規模增大,記憶體溢位,所以不想保存Q表,需要一種從(s,a)到s直接映射到Q的方法,線性近似、決策樹、最近鄰、傅里葉變換、神經網路等都能用,目前最主流的是神經網路,所以向RL中引入了DL,DRL演算法比如DQN,通過神經網路構建從state到action的映射,即向神經網路輸入state,直接就能輸出action,不需要保存Q表,保存網路引數就行,所需存盤空間小了很多,
Nature DQN
DQN中目標Q的計算和訓練Q都是用一個模型計算的,相關性太強了,不利于收斂,于是Nature DQN想到了用兩個Q網路,一個current Q網路用來選擇動作,更新模型引數,另一個target Q'網路用于計算目標Q值,target Q'網路的引數不需要一直更新,過段時間從current Q網路復制過來就行了,兩個網路結構是完全一樣的,才可以復制
DDQN
它也用了像Nature DQN一樣的兩個網路,但是它改動了一點,就是對target Q的計算,Q-learning和DQN在計算target Q的時候都是通過貪婪直接得到的,即取Qmax的那個,但是這容易陷入Over Estimate,使模型有很大bias,
DDQN將target Q的選擇解耦合為兩步,第一步是選擇Qmax的action,第二步將這個action代入計算target Q
對比下
DQN的target Q:
DDQN的target Q:
Prioritized Repay DQN
它也像Nature DQN一樣有兩個網路,它對buffer中取樣改進了一點,不再是隨機取樣了,而是給樣本賦予了權重,TD誤差大的賦予的權重高(因為對神經網路誤差反向傳播有利)

如何根據樣本權重選擇樣本:SumTree,其葉子節點是樣本權重,往上加和,
比如想在[0-42]間抽樣一個優先級,肯定是[13-25]這個區間長的被抽到啊,比如抽到了20,順著樹往下找,就找到12了,而優先級高的區間長,真挺巧妙的,

Dueling DQN
Dueling DQN在Nature DQN上就改進了一點,將神經網路的結構稍微改了一下,將最終Q值輸出變成兩部分,一部分是只與狀態s有關的Value Fuction V,另一部分是同時與狀態s和動作a有關的Advantage Function A,

Policy Gradient
比較主流的是Nature DQN,Prioritized DQN和Dueling DQN,三種演算法思路不相互排斥,可以混著用,當然還有很多對DQN的改進,比如改網路什么的,但是DQN有一個缺陷是只能處理離散的動作,對于連續動作的處理能力不行,policy-based method可以解決這個問題,因為是一個連續函式,不同于value-based method的
,value-based method還有一個問題是一般都是取max value的動作,直接貪婪,但是有時候現實問題是隨機的,不是每次都要做最好的選擇,這時也可以考慮用policy-based method
就像在value-based method中對q做近似:,在policy-based method中可以對策略Π做近似:
,然后對引數θ(模型權重)求解優化就好了,以下還是用DL神經網路做近似,其它傳統ML的近似方法應該也可以,
定義一個優化目標,可以用狀態s的價值的期望,,然后基于這個目標函式梯度上升就行了,對θ求導得梯度,
,
cs285這節課推導比前幾節課多太多了,就手推了一下幾個公式,有時候看看不懂,但是動筆推一遍就差不多懂了


在實踐中,對PG的一些訓練tips:
- 調非常大batch size(由于MC從trajectory積累reward求期望,PG的variance很大,gradient噪聲也較大)
- PG學習率比較難調(因為gradient噪聲大),勉強能用ADAM,一般使用PG專用的自動確定學習步長的方式,如PPO/TRPO
REINFORCE
一個最簡單policy gradient:REINFORCE

可見在policy-based method,確實可以講沒有value function V,但是確實有每個狀態的value v啊,value指導policy的引數的優化,
Actor-Critic
結合了一下value-based method和policy-based method
其中,Actor(演員)是策略函式,負責生成action,與環境互動,Critic(批判者)是價值函式,負責評估、優化Actor的表現,即優化策略,
在PG,用MC計算每個狀態的價值,其實也相當于一種Critic,但是場景比較受限(需要多條完整episode路徑),在Actor-Critic中將Critic的功能進一步加重,這里使用了類似DQN中的價值函式
在Critic-Actor中需要對q和Π都做近似,即
具體程序為,Critic通過神經網路計算評估點(可以是state value function / state-action value funciton / advantage function / TD誤差 ),Actor使用神經網路梯度反向傳播(目標函式是Critic的評估點)不斷更新策略函式的引數θ, Critic和Actor的神經網路可以是相同的,也可以是不同的,

DPG
DPG (Deterministic policy gradient),deterministic就是策略不隨機了,在某個state下就采取這個action:
DDPG
DDPG (Deep Deterministic policy gradient) 是使用了雙Actor(這倆結構相同)和雙Critic結構(這倆結構相同),就是DQN到Nature DQN的思想
這個博主就對這四個網路的功能總結得挺好:

DDPG還有兩個挺有意思的點,其一,當前網路從目標網路復制引數w、θ的時候,不是一下全部復制過來的,而是加了一個更新系數(一般取0.1/0.01),即每次改變一點點,其二是在Actor當前網路中選擇動作的時候,為了增加隨機性,會給動作加點噪聲,即
其實DDPG中的Critic當前網路、Critic目標網路和DDQN中的當前Q網路、目標Q網路的功能差不多,但是DDQN中沒有單獨的policy function Π(因為是value-based method),每次選擇動作就用ε-貪婪這樣的方法,在Actor-Critic的DDPG中,Actor網路來選動作,就不用ε-貪婪了,
A3C
A3C中用了多執行緒,一個主執行緒負責更新Actor網路和Critic網路的引數,多個輔執行緒負責與環境互動,得到梯度更新值,匯總更新主執行緒的引數(異步并發),所有輔執行緒定期從主執行緒更新網路引數,這些輔執行緒起到了類似DQN中經驗回放的作用,
A3C中的多個輔執行緒還改進累類似repay experience的問題,就是buffer中的資料相關性比較強,比如一直跟一個人下棋,那水平很難得到提高,應該跟有不同思考方式的多個人對弈,
A3C中的Critic用了Advantage Function作為評估點,,這里的V(s)其實就相當于baseline的作用,因為V(s)代表該狀態價值,是Q關于所有action的期望,代表了所有state-action的平均好壞,如果A>0,則在該狀態下采取該動作會更好,反之則更差,而advantage function中的Q可以用V表示出來,即
,則優勢函式表示為,
,A3C中用了n-step sampling,則優勢函式進一步表示為,
Model-based method
model-based method要知道環境轉換的模型,即用狀態轉移概率(s采取動作a到s'的概率), 和Reward
描述
表示環境模型,即表示這兩個問題: 和
,很顯然,前者是分類問題,后者是回歸問題,用傳統的監督學習演算法求解就可以了,
有模型時,就知道state下采取action后會到什么狀態,能得到什么動作獎勵,就不必和環境互動了,model-based method是從模型中學習,而不是從與環境互動的程序中學習,所以環境模型的表示十分重要
model-based method整體流程:

model-based method一般不單獨用,而是與model-free method結合起來,比如Dyna、MCTS,
Dyna
Dyna不是具體的演算法,而是一類演算法框架的統稱,它結合了model-based method 和 model-free method,即既從模型中學習,也從實際與環境互動中學習,從而更新策略函式或價值函式,Dyna和不同model-free強化學習演算法結合起來,就能得到不同演算法,
Dyna-Q

MCTS
它也是一種比較流行的model-based和model-free method結合的RL演算法,是基于模擬的搜索(stimulate based search),適合海量資料,兩個關鍵點,其一是stimulate,即資料不是真實地與環境互動得來的,而是"模擬"的,其二是search,是利用stimulated data找策略(到底該采取什么樣的action才能使value最大化)
基本MCTS就是根據模擬的輸出結果,按照節點構造搜索樹,于MCTS的樹結構,如果是最簡單的方法,只需要在節點上保存狀態對應的歷史勝負記錄,在每條邊上保存采樣的動作,這樣MCTS的搜索需要走4步

第一步是選擇(Selection):這一步會從根節點開始,每次都選一個“最值得搜索的子節點”,一般使用UCT(Upper Confidence Bound Applied to Trees, 上限置信區間演算法,為達E&E平衡)選擇分數最高的節點,直到來到一個“存在未擴展的子節點”的節點(沒有后續走法),如圖中的 3/3 節點,
第二步是擴展(Expansion),在這個搜索到的存在未擴展的子節點,加上一個0/0的子節點,表示沒有歷史記錄參考,
第三步是仿真(simulation),從上面這個沒有試過的著法開始,用一個簡單策略比如快速走子策略(Rollout policy)走到底,得到一個勝負結果,快速走子策略一般適合選擇走子很快可能不是很精確的策略,因為如果這個策略走得慢,結果雖然會更準確,但由于耗時多了,在單位時間內的模擬次數就少了,所以不一定會棋力更強,有可能會更弱,這也是為什么一般只模擬一次,因為如果模擬多次,雖然更準確,但更慢,
第四步是回溯(backpropagation), 將最后得到的勝負結果回溯加到MCTS樹結構上,
還有一些其它有意思的點:
上述這些演算法的Reward都是基于人工設計的,這就引入了人工知識,也在一定程度上引入了偏差,也有一些在尋求避免人工設計Reward的方法(cs285第一課),第一種是learning from demonstrations,要么是從以往案例中學習,imitation learning,要么是agent基于人類樣例學習reward如何表示,即IRL (Inverse RL),第二種是learning from observing the world,這個每太聽懂,好像就是model-based對環境建模,第三種是learning from other tasks,包括transfer learning(從其它任務中學會知識以遷移)和meta-learning(從其它任務中學會學習的方法)
參考資料
上確界(sup)和下確界(inf)
共軛函式通俗解釋1:線性函式yTx和原始函式f(x)的最大gap
共軛函式數學定義2
Daul Ascent對偶上升法
對偶函式也稱為拉格朗日對偶函式(Lagrange daul function)
Daul Ascent將優化目標的約束條件轉化為優化目標的一部分,
從而將對目標函式在約束下進行優化的程序等價為直接優化對偶目標函式的行為,
s.t.指約束條件
Jocab矩陣(一階導)和Hessian矩陣(二階導)
矩陣求導
LQR和iLQR
貝葉斯
聯合概率、邊際概率、條件概率
特征向量表示了向量的"變換"特征
在機器學習里面,張量通常意味著陣列,沒有實際物理意義,如TensorFlow的意思是:N維陣列從資料流圖的一端流動到另一端的計算程序,
極大似然估計,通俗理解來說,就是利用已知的樣本結果資訊,反推最具有可能(最大概率)導致這些樣本結果出現的模型引數值,換句話說,極大似然估計提供了一種給定觀察資料來評估模型引數的方法,即:“模型已定,引數未知”
KL divergence指當某分布q(x)被用于近似p(x)時的資訊損失,即q(x)能在多大程度上表達p(x)所包含的資訊,KL divergence越大,表達效果越差
on-policy和off-policy區別
二者區別在于采樣的policy和improve的policy是否相同
①on-policy只有行為策略,就是跟實際資料產生、實際與環境互動相關的,是訓練中的策略
②off-policy同時有行為策略和目標策略,目標策略根據行為策略優化、調整
Sarsa和Q-learning區別
①都屬于TD演算法(temporal difference RL)(時序差分演算法)
②Sarsa是on-policy,Q-learning是off-policy
③Q-learning的行為策略和Sarsa相同,都是利用該狀態S的即時獎勵和下個狀態S’的Q值來更新S的Q值,但是其選擇的下個狀態價值對(s’,a’)中的a’是根據ε-greedy策略選取的,具備一定的Exploration;其目標策略和行為策略唯一的不同是選取下個狀態價值對(s’,a’)是選的最大Q值的,更加貪婪
全連接FC到卷積CNN
卷積神經網路基礎概念
卷積神經網路channel
池化:減少冗余資訊,看一下這個回答中的卷積、池化的兩個動圖就發現區別了,池化一般選滑動視窗中最值/均值,不是像卷積核一樣帶權重地滑動
DQN
Policy Gradient
貝葉斯神經網路(BNN)
BNN(Bayesian Neural Network)將權重看作服從μ,δ的高斯分布,普通CNN優化的是權重,BNN優化的是權重的均值和方差,所以其優化引數是普通CNN的兩倍,
在預測時,BNN會從每個高斯分布中采樣,得到權重值,反向傳播,
BNN(二值化神經網路)
跟上面那個不一樣,還查資料查串了最后發現,BNN (Binary Neural Network) 的結構和CNN一樣,只是在梯度下降、權值更新、卷積運算熵做了一些改進,其權值、激活值只能為1或-1,
FCN:解決影像分割問題
熵、資訊量、相對熵(KL convergence)、交叉熵
熵是不確定性的度量,是對所有可能發生的事件產生的資訊量的期望,資訊量和確定性成反比,相對熵(KL convergence)一般衡量兩個分布p(x)和q(x)的差異,如樣本的真實分布和預測分布,交叉熵其實就是把相對熵中的常數部分去掉了,作為優化的目標,其實用KL convergence也一樣,
softmax
將輸入映射為(0,1),可視為多分類的概率
書籍PRML(Pattern Recognition And Machine Learning)第十章:Approximate Inference
近似計算有隨機和確定兩種方法,變分是后者,
mean field是統計物理學中常用思想,將無法處理得復雜多體問題分解成可以處理得單體問題來近似,例如在計算某個分布的積分時,可以變成多個較低維度的積分,這是一種可分解的變分近似思想,
變分推斷,實際就是用形式簡單、做積分比較容易的分布,去近似形式復雜、不易求積分的分布,衡量分布差異大小用到了KLD,最小化KLD為優化目標,使用coordinate ascent收斂至區域最優
Online learning:其實就是跑一個樣本更新一次引數
Online learning和batch learning這兩者存在于對機器學習演算法的訓練中,是訓練方法,以訓練神經網路為例,訓練神經網路時需要計算損失函式,根據損失函式計算引數的梯度,從而去更新引數,這就涉及到神經網路學習多少樣本后去計算損失函式,更新引數了,如果每學習一個樣本,就去更新引數的話,這就是online learning,如果學習所有樣本后,再去更新引數,這就是batch learning,顯然,batch learning的優點是容易找到全域最優解,但樣本較大時訓練程序很慢,而online learning則相反,為了折中,出現了小批量學習,即學習小批量樣本后更新引數,這個小批量的樣本數量自己制定,
Boostrap是一種抽樣方法,在ensemble learning中很常見,是指對樣本每次有放回的抽樣,抽樣K個,一共抽N次
反向傳播
回歸問題用于建模和分析變數間的關系,多用于預測問題,如根據某地多年房價預測今年的
LQR
PID控制
sum tree
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/436385.html
標籤:AI
下一篇:李宏毅2021&2022機器學習
