看完《迷霧探險2》的深度學習入門镣隶,又發(fā)現(xiàn)了一些不錯的文章:
通俗易懂的深度學習發(fā)展介紹:從最基本的神經(jīng)網(wǎng)絡算法(單個神經(jīng)元模型的提出,到兩層和三層的簡單神經(jīng)網(wǎng)絡吐限,到BP算法忽刽,到深度神經(jīng)網(wǎng)絡CNN)講到增強學習
增強學習系列之(一):增強學習介紹:從動態(tài)規(guī)劃算法和PageRank算法(和增強學習很像)講到增強學習算法天揖。
增強學習系列之(二):實現(xiàn)一個簡單的增強學習的例子:Q-Learning算法+epsilon_greedy策略+tensorflow訓練神經(jīng)網(wǎng)絡==>Deep Q Learning
增強學習系列之(三):實現(xiàn)一個打磚塊的游戲:在openai的gym里面,針對breakout這款游戲的v3版本跪帝,實現(xiàn)AI打游戲今膊。
強化學習的定義和通俗理解
1.定義
假定一個智能體(agent),在一個未知的環(huán)境中(當前狀態(tài)state),采取了一個行動(action),然后收獲了一個回報(return)伞剑,并進入了下一個狀態(tài)斑唬。最終目的是求解一個策略讓 agent的回報最大化。
增強學習當中經(jīng)常用到的術語:
- agent,是指訓練當中的個體赖钞,就是我們訓練的算法和參數(shù)的集合
- environment腰素,是指agent所處的環(huán)境
- episode,是指一個完整的訓練的階段雪营。從一次訓練開始弓千,到這次訓練成功或者失敗結(jié)束,是一個episode
- step献起,是指一個episode當中的操作洋访,每采取一次操作,就是一個step
- state谴餐,是指agent在每個時刻所面臨的狀態(tài)
- action姻政,是指采取的那個操作究竟是什么
- value,是指在這個時刻岂嗓,我所能采取的各個動作汁展,所具有的價值
2. 強化學習最基礎的解法:MPD(馬爾可夫決策過程)
一個馬爾可夫決策過程由五元組組成:M = (S, A, Psa, γ, R)
- S:表示狀態(tài)集(states)
- A:表示一系列動作(actions)
- Psa:表示狀態(tài)轉(zhuǎn)移概率。表示的是在當前s ∈ S狀態(tài)下厌殉,經(jīng)過a ∈ A作用后食绿,會轉(zhuǎn)移到的其他狀態(tài)的概率分布情況。比如公罕,在狀態(tài)s下執(zhí)行動作a器紧,轉(zhuǎn)移到s'的概率可以表示為p(s'|s,a)。
- γ:(dicount factor):表示阻尼系數(shù)[0,1)
- R:S x A → R楼眷,表示回報函數(shù)(reward function)
如果回報r是根據(jù)狀態(tài)s和動作a得到的,則MDP還可以表示成下圖:
3. 值函數(shù)
上面我們給出了MDP的定義查邢,作為一個智能體(agent)蔗崎,當它在決定下一步應該走什么時,最簡單的方式就是看下Reward函數(shù)的值是多少扰藕,即比較走不同動作的回報缓苛,從而做出決定。但是就像下棋的時候,我們每走一步都會向后考慮未桥,所謂“走一步看三步”笔刹,所以這里我們只看一步即一次Reward函數(shù)是不夠的,這就引出了值函數(shù)(Value Function)也叫折算累積回報(discounted cumulative reward)
3.1 狀態(tài)值函數(shù)(state value function)
當我們遵循某個策略π冬耿,我們將值函數(shù)定義如下舌菜,對于狀態(tài)序列中的每下一個狀態(tài),我們都設置一個衰減系數(shù)γ:通俗的講就是說串前,我需要判斷一下當前的這個狀態(tài)的價值是多少,從而讓我可以選擇最大化價值的那個狀態(tài)來進行操作实蔽。當前狀態(tài)的價值荡碾,就是之后的狀態(tài)的價值的疊加,只不過越往后局装,噪聲越大坛吁,就需要讓他們的權重減小。而后面的所有狀態(tài)的價值和铐尚,又可以寫成下一個狀態(tài)的價值拨脉。當前狀態(tài)的reward我們是可以直接獲得的,所以我們只需要計算下一個狀態(tài)的權值函數(shù)就可以了
3.2 動作值函數(shù)(action value function)
上面我們的值函數(shù)的只與狀態(tài)s有關宣增,如果與狀態(tài)s和動作a都有關玫膀,便稱為動作值函數(shù),即所謂的Q函數(shù)爹脾,如下:從上式我們可以看出帖旨,我們不僅僅依賴狀態(tài)s和策略π,并且還依賴于動作a灵妨。
關于MDP的求解主要分為值迭代和策略迭代解阅,分別站在不同的角度對MDP進行求解,這里我們不在贅述泌霍,網(wǎng)上有很多相關資料货抄。下面我們簡單闡述下動作值函數(shù)的值迭代求解方式,即所謂的Q-learning
4. Q-learning
Q學習的基本迭代公式如下:從公式中我們也可以看出它是一種值迭代方式,因為我們每次更新的是Q函數(shù)的值蟹地,而非策略积暖。簡單起見,整理一個簡單的例子加以說明怪与。
詳細的分析可以參考:Q-learning的一個極簡的例子
假設我們有這樣一個房間:我們的目的是訓練一個機器人夺刑,使得它在圖中的任意一個房間都能夠到達房間外。
可以看出,我們的機器人現(xiàn)在無論在哪個房間曲管,都可以利用我們的Q矩陣順利的走到屋外却邓。
總結(jié)一下上面這個例子:增強學習的特征,就是從現(xiàn)有的狀態(tài)出發(fā)院水,不斷的優(yōu)化自己的策略
5. 基于NEXT算法的馬里奧AI游戲機器人
- NEXT算法(增強拓撲的進化神經(jīng)網(wǎng)絡腊徙,Evolving Neural Networks through Augmenting Topologies)它不僅會訓練和修改網(wǎng)絡的權值,同時會修改網(wǎng)絡的拓撲結(jié)構檬某,包括新增節(jié)點和刪除節(jié)點等操作撬腾。
NEAT算法幾個核心的概念是:
- 基因:網(wǎng)絡中的連接
- 基因組:基因的集合
- 物種:一批具有相似性基因組的集合
- Fitness:有點類似于增強學習中的reward函數(shù)
- generation:進行一組訓練的基因組集合,每一代訓練結(jié)束后恢恼,會根據(jù)fitness淘汰基因組民傻,并且通過無性繁殖和有性繁殖來新增新的基因組
- 基因變異:發(fā)生在新生成基因組的過程中,可能會出現(xiàn)改變網(wǎng)絡的權重场斑,增加突出連接或者神經(jīng)元漓踢,也有可能禁用突觸或者啟用突觸
大多數(shù)該算法實現(xiàn)馬里奧的智能通關都依賴于模擬器浩村,運用lua語言編寫相應腳本做葵,獲取游戲數(shù)據(jù)并操作馬里奧,真實例子見NeuroEvolution with MarI/O心墅。
6. 基于Deep Reinforcement Learning的馬里奧AI實現(xiàn)
NEAT算法是相對提出較早的算法酿矢,在2013年大名鼎鼎的DeepMind提出了一種深度增強學習的算法,該算法主要結(jié)合了CNN和Q-Learning兩種算法怎燥,DeepMind的研究人員將該算法應用在Atari游戲機中的多種小游戲中進行AI通關瘫筐。
其基本算法核心便是我們之前介紹的CNN和增強學習的Q-Learning,游戲智能通關的基本流程如下圖:而同樣的方法棺禾,將DRL應用在馬里奧上,github上有一個開源的實現(xiàn)方式:aleju/mario-ai峭跳,其最終的實現(xiàn)效果圖如下:
在CNN識別過程中膘婶,每4幀圖像,才會進行一次CNN識別坦康,這是識別速率的問題竣付,圖中曲線反映了直接回報函數(shù)和簡介回報函數(shù)。
7. 增強學習常用策略:
蒙特卡洛方法:暴力遍歷所有episode
簡單而言滞欠,蒙特卡洛方法就是對這個策略所有可能的結(jié)果求平均古胆。我們向前走了以后,再做一個action筛璧,根據(jù)這個式子逸绎,直到episode結(jié)束,求出收益的和夭谤,就是向前走這個動作的一個采樣棺牧。我們再不斷地在這個狀態(tài)采樣,然后來求平均朗儒。等到采樣變得非常非常多的時候颊乘,我們的統(tǒng)計值就接近期望值了参淹。所以蒙特卡洛方法是一個非常暴力,非常直觀的方法乏悄。動態(tài)規(guī)劃方法:在有向無環(huán)圖結(jié)構的問題中可用
這個其實就類似于我們在開篇的那個例子里面提到的浙值。我們要確定向前走的這個動作的收益,那么就需要將它所有的子問題先全都計算完檩小,然后取最大值开呐,就是它的收益了。這個方法的好處就是效率高规求,遍歷一遍就可以了筐付;而缺點也很明顯,需要子結(jié)構問題是一個有向無環(huán)圖阻肿。Temporal Difference(時間差分)
(1)時間差分瓦戚,簡稱TD,是對蒙特卡洛方法的一種簡化冕茅,也是在實際中應用最多的一種算法伤极。
(2)同樣是要計算向前走的這個行為的價值的期望值,那么它就等于向前走了到達的那個狀態(tài)的reward姨伤,加上它再轉(zhuǎn)移到后繼狀態(tài)的期望值哨坪。有人會說這不就遞歸下去就是遍歷了嗎?不是乍楚,我們就觀測前面一個狀態(tài)当编,剩下的價值我們不去真的計算了,而是用神經(jīng)網(wǎng)絡來估算徒溪。這樣我們不需要計算就可以得到它的價值了忿偷。這就是TD算法里面最簡單的TD(0)算法。
8. 結(jié)合神經(jīng)網(wǎng)絡的增強學習——DQN
結(jié)合神經(jīng)網(wǎng)絡來對state和reward進行估算:很神奇的居然能收斂臊泌。
(1)可以把神經(jīng)網(wǎng)絡當成一個黑盒鲤桥,輸入是一個狀態(tài),輸出是這個狀態(tài)的價值渠概。
(2)整個系統(tǒng)在運作過程中茶凳,通過現(xiàn)有的策略,產(chǎn)生了一些數(shù)據(jù)播揪,獲得的這些數(shù)據(jù)贮喧,在計算Reward值的時候會有所修正。然后我們用修正的值和狀態(tài)猪狈,作為神經(jīng)網(wǎng)絡進行輸入箱沦,再進行訓練。最后的結(jié)果顯示雇庙,這樣做是可以收斂的谓形,牛逼霸钜痢!
- 一個有意思的問題:使用神經(jīng)網(wǎng)絡來預測value,怎么評估神經(jīng)網(wǎng)絡預測的對不對呢碾牌,換個問法康愤,如何決定下一個步驟的value,一個非常簡單的策略是epsilon-greedy舶吗。
- 簡單介紹一下epsilon-greedy征冷,我們設置一個閾值,epsilon-boundary,比如說初始值是0.8誓琼,意思就是我們現(xiàn)在選擇action的時候检激,80%的可能性是隨機地從動作集中選擇一個動作,20%的可能性是通過神經(jīng)網(wǎng)絡計算每個動作的收益腹侣,然后選最大的那一個叔收。但是隨著學習過程推進,我們的epsilon-boundary要越來越低傲隶,隨機選擇的次數(shù)要越來越少饺律,到最后幾乎不做隨機的選擇。
- 另外一個問題:如何跟神經(jīng)網(wǎng)絡相結(jié)合跺株,可以看這篇博文的DNQ :Q值神經(jīng)網(wǎng)絡化复濒,講述了如何用一個深度神經(jīng)網(wǎng)絡來表示一個近似輸出reward的function。神經(jīng)網(wǎng)絡的訓練是一個最優(yōu)化問題乒省,最優(yōu)化一個損失函數(shù)loss function巧颈,也就是標簽和網(wǎng)絡輸出的偏差,目標是讓損失函數(shù)最小化袖扛。利用Q-Learning算法為Q網(wǎng)絡提供標簽的樣本砸泛。然后通過反向傳播使用梯度下降的方法來更新神經(jīng)網(wǎng)絡的參數(shù)。整個算法的流程差不多就是:首先反復隨機action試驗攻锰,然后存儲數(shù)據(jù)晾嘶。接下來數(shù)據(jù)存到一定程度,就每次隨機采用數(shù)據(jù)娶吞,進行梯度下降垒迂!
9. 不同于DQN的Policy Gradient
概念:策略網(wǎng)絡Policy Network:就是一個神經(jīng)網(wǎng)絡,輸入是狀態(tài)妒蛇,輸出直接就是動作(不是Q值)机断。a = π(s, θ) 或者概率Pa = π(a|s, θ)
為什么:我們已經(jīng)知道DQN是一個基于價值value的方法楷拳。換句話說就是通過計算每一個狀態(tài)動作的價值,然后選擇價值最大的動作執(zhí)行吏奸。這是一種間接的做法欢揖。那么,更直接的做法是什么奋蔚?【能不能直接更新策略網(wǎng)絡Policy Network呢她混?】
概率輸出的問題。對于DQN來說泊碑,本質(zhì)上是一個接近于確定性輸出的算法坤按。至多就是采用ε-greedy(ε-貪心)進行探索。但是有很多時候馒过,在某一個特定狀態(tài)下臭脓,很多動作的選擇可能都是可以的。比如說我有20塊錢去買飯腹忽。那么不管我買的是蛋炒飯還是土豆肉片蓋碼飯来累,結(jié)果都是一樣的填飽肚子。因此窘奏,采用輸出概率會更通用一些嘹锁。而DQN并不能輸出動作的概率,所以采用Policy Network是一個更好的辦法蔼夜。
-
目標函數(shù)兼耀。對于策略網(wǎng)絡,目標函數(shù)其實是比較容易給定的求冷,就是所有帶衰減reward的累加期望
-
構造一個損失函數(shù)如下:
如何理解Policy Gradient的損失函數(shù):對于AlphaGo而言瘤运,f(s,a)就是最后的結(jié)果。也就是一盤棋中匠题,如果這盤棋贏了拯坟,那么這盤棋下的每一步都是認為是好的,如果輸了韭山,那么都認為是不好的郁季。好的f(s,a)就是1,不好的就-1钱磅。所以在這里梦裂,如果a被認為是好的,那么目標就是最大化這個好的動作的概率盖淡,反之亦然年柠。
10. 結(jié)合DQN和Policy Gradient的Actor Critic
- 一句話總結(jié)AC:結(jié)合了 Policy Gradient (Actor) 和 Function Approximation (Critic) 的方法. Actor 基于概率選行為, Critic 基于 Actor 的行為評判行為的得分, Actor 根據(jù) Critic 的評分修改選行為的概率.
- 優(yōu)勢: 可以進行單步更新, 比傳統(tǒng)的 Policy Gradient 要快(回合結(jié)束更新).
- 劣勢: 取決于 Critic 的價值判斷, 但是 Critic 難收斂, 再加上 Actor 的更新, 就更難收斂. 為了解決收斂問題, Google Deepmind 提出了 Actor Critic 升級版 Deep Deterministic Policy Gradient. 后者融合了 DQN 的優(yōu)勢, 解決了收斂難的問題.
-
簡單點說:Actor 在運用 Policy Gradient 的方法進行 Gradient ascent 的時候, 由 Critic 來告訴他, 這次的 Gradient ascent 是不是一次正確的 ascent, 如果這次的得分不好, 那么就不要 ascent 那么多.
11.DDPG(Deep Deterministic Policy Gradient)
-
一句話總結(jié):Google DeepMind 提出的一種使用 Actor Critic 結(jié)構, 但是輸出的不是行為的概率, 而是具體的行為, 用于連續(xù)動作 (continuous action) 的預測. DDPG 結(jié)合了之前獲得成功的 DQN 結(jié)構(讓計算機學會玩游戲), 提高了 Actor Critic (讓 Policy gradient 單步更新)的穩(wěn)定性和收斂性.
- 基于策略 Policy 的神經(jīng)網(wǎng)絡+基于價值 Value 的神經(jīng)網(wǎng)絡:
a. Policy Gradient
(1)估計網(wǎng)絡:輸出實時動作,供actor在顯示中實行褪迟,
(2)現(xiàn)實網(wǎng)絡:用來實時更新價值網(wǎng)絡系統(tǒng)的(action+state)
b. Value-Based
(1)現(xiàn)實網(wǎng)絡:拿著動作實現(xiàn)網(wǎng)絡的(action+state)加以分析
(2)估計網(wǎng)絡:拿著真實的actor動作作為輸入 - 在實際運用中, DDPG 的這種做法的確帶來了更有效的學習過程.
12. A3C(Asynchronous Advantage Actor-Critic)
- 背景:目前的計算機多半是有雙核, 4核, 甚至 6核, 8核. 一般的學習方法, 我們只能讓機器人在一個核上面玩耍. 但是如果使用 A3C 的方法, 我們可以給他們安排去不同的核, 并行運算. 實驗結(jié)果就是, 這樣的計算方式往往比傳統(tǒng)的方式快上好多倍.
- 一句話概括A3C:Google DeepMind 提出的一種解決 Actor-Critic 不收斂問題的算法. 它會創(chuàng)建多個并行的環(huán)境, 讓多個擁有副結(jié)構的 agent 同時在這些并行環(huán)境上更新主結(jié)構中的參數(shù). 并行中的 agent 們互不干擾, 而主結(jié)構的參數(shù)更新受到副結(jié)構提交更新的不連續(xù)性干擾, 所以更新的相關性被降低, 收斂性提高.
9-12節(jié)來源:強化學習入門簡單實例 DQN