Deep Reinforcement Learning (Not done yet)

Deep Reinforcement Learning強化學習是一種探索式的學習方法核畴,通過不斷 “試錯”來得到改進膝但。不同于監(jiān)督學習的地方是,強化學習本身沒有 Label谤草,每做出一個Action之后它無法得到明確的反饋跟束,而監(jiān)督學習每一步都能與真實Label進行對比莺奸。

它有四個要素:Agent,Environment泳炉,Actions憾筏,Rewards。

對象(Agent):也就是我們的智能主題花鹅,比如 AlphaGo。

環(huán)境(Environment):Agent 所處的場景枫浙。比如下圍棋的棋盤刨肃,以及其所對應的狀態(tài)(State)。Agent 需要從 Environment 感知來獲取反饋箩帚。

動作(Actions):在每個State下可以采取什么行動真友,針對每一個 Action 分析其影響。

獎勵(Rewards):執(zhí)行 Action 之后紧帕,得到的獎勵或懲罰盔然,Reward 是通過對環(huán)境的觀察得到。

通過強化學習是嗜,我們得到的輸出就是:Next Action愈案。其數(shù)學實質(zhì)是一個馬爾可夫決策過程。

image

要解決的問題是:讓agent學習在一個環(huán)境中的做出怎樣的行為(action)可獲得最大的獎勵值總和(reward)鹅搪。這個獎勵值一般與agent定義的任務目標關聯(lián)站绪。
agent需要的主要學習內(nèi)容:第一是行為策略(action policy), 第二是規(guī)劃(planning)丽柿。其中恢准,行為策略的學習目標是最優(yōu)策略, 也就是使用這樣的策略甫题,可以讓agent在特定環(huán)境中的行為獲得最大的獎勵值馁筐,從而實現(xiàn)其任務目標。

行為(action)可以簡單分為:

  • 連續(xù)值:如賽車游戲中的方向盤角度坠非、油門敏沉、剎車控制信號,機器人的關節(jié)伺服電機控制信號麻顶。
  • 離散值:如圍棋赦抖、貪吃蛇游戲。Alpha Go就是一個典型的離散行為agent辅肾。

On-policy & Off-policy:

On-Policy Temporal Difference methods learn the value of the policy that is used to make decisions. The value functions are updated using results from executing actions determined by some policy. These policies are usually "soft" and non-deterministic. The meaning of "soft" in this sense, is that it ensures there is always an element of exploration to the policy. The policy is not so strict that it always chooses the action that gives the most reward. Three common policies are used, \epsilon-soft, \epsilon-greedy and softmax. .

Off-Policy methods can learn different policies for behaviour and estimation. Again, the behaviour policy is usually "soft" so there is sufficient exploration going on. Off-policy algorithms can update the estimated value functions using hypothetical actions, those which have not actually been tried. This is in contrast to on-policy methods which update value functions based strictly on experience. What this means is off-policy algorithms can separate exploration from control, and on-policy algorithms cannot. In other words, an agent trained using an off-policy method may end up learning tactics that it did not necessarily exhibit during the learning phase.

Q Learning:

它屬于Off-policy队萤。
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q Learning選擇Q(S,A)用了greedy方法,而計算A(S',A')時用的是max方法矫钓,而真正選擇的時候又不一定會選擇max的行動要尔。

Sarsa:

名字根據(jù)Q(s, a, r, s', a')而來舍杜。它類似Q Learning但是它有兩次Action選擇,下一步的Action是基于確定original action的policy得到的赵辕。它屬于On-policy既绩。

image

Sarsa Lambda:

[圖片上傳失敗...(image-51f3bd-1555074641848)]

Deep - Q - Network (DQN):

DQN基于Q Learning。在普通的Q-learning中还惠,當狀態(tài)和動作空間是離散且維數(shù)不高時可使用Q-Table儲存每個狀態(tài)動作對的Q值饲握,而當狀態(tài)和動作空間是高維連續(xù)時,使用Q-Table不現(xiàn)實蚕键。

Experience Replay:

  1. store all game experiences during the episode inside a "replay memory"
    then during training we will take random mini-batches of this memory.

Double DQN:

DQN基于Q Learning救欧,其中Qmax會導致Q現(xiàn)實的overestimate。在實際問題中锣光,如果輸出你的 DQN 的 Q 值可能會發(fā)現(xiàn)Q 值都超級大笆怠,這就是出現(xiàn)了overestimate。DQN的神經(jīng)網(wǎng)絡可以看作一個最新的神經(jīng)網(wǎng)絡+老神經(jīng)網(wǎng)絡誊爹,它們有相同的結構但內(nèi)部的參數(shù)更新有時差蹬刷。

Q現(xiàn)實是這樣的:
Y_t^{DQN}\equiv R_{t+1}+\gamma \max_\alpha Q(S_{t+1},\alpha;\theta_t^-)
因為神經(jīng)網(wǎng)絡預測Qmax有誤差,每次都是向著最大誤差的Q現(xiàn)實改進神經(jīng)網(wǎng)絡频丘,就是因為合格Qmax導致overestimate办成,所以Double DQN的想法就是引入另一個神經(jīng)網(wǎng)絡來打消最大的誤差影響。

所以我們用Q估計的神經(jīng)網(wǎng)絡估計Q現(xiàn)實中的Qmax(s',a')的最大動作值椎镣,然后用這個被Q估計估計出來的動作來選擇Q現(xiàn)實中的Q(s')诈火。

兩個神經(jīng)網(wǎng)絡:Q_eval(Q估計),Q_next(Q現(xiàn)實)

把原來的Q_next=max(Q_next(s', a_all))更新到Double DQN中的Q_next = Q_next(s', argmax(Q_eval(s', a_all)))状答。

也就是
Y_t^{DoubleDQN}\equiv R_{t+1}+\gamma Q(S_{t+1},argmax_\alpha Q(S_{t+1},\alpha;\theta_t),\theta_t^-)

從TensorBoard看Double DQN和Natural DQN的圖可以看到冷守,它們的結構是一模一樣的,但在計算 q_target 時惊科,方法是不同的拍摇。

image

另外還需要記錄選擇動作時的Q值。

Prioritized Experience Replay:

按照memory樣本優(yōu)先級進行抽樣馆截,更有效找到需要學習的樣本充活。

優(yōu)先級的評定可以使用TD-error,也就是Q現(xiàn)實-Q估計蜡娶,如果TD-error越大混卵,代表預測精度還有很多上升空間,優(yōu)先級p越高窖张。

如果每次抽樣都要針對p對所有樣本排序這樣會非常消耗計算能力幕随,所以我們使用一種叫SumTree的方法。

SumTree時一種樹形結構宿接,每片樹葉存儲每個樣本的優(yōu)先級p赘淮,每個樹枝節(jié)點只有兩個分叉辕录,節(jié)點的值是兩個分叉的和,SumTree的根節(jié)點是所有p的和梢卸。

image

抽樣時走诞,我們將p的總和除以batch size,(n=sum(p)/batch_size)蛤高。

現(xiàn)在我們假設sum(p)=42蚣旱,我們抽6個樣本,這時區(qū)間擁有的 priority 可能是這樣:

[0-7], [7-14], [14-21], [21-28], [28-35], [35-42]

在每個區(qū)間里隨機選取一個數(shù)戴陡,比如在 [21-28] 里選到了24姻锁,就按照這個 24 從最頂上的42開始向下搜索。首先看到最頂上 42 下面有兩個 child nodes套菜,拿著手中的24對比左邊的 child 29典挑,如果左邊的 child 比自己手中的值大,那我們就走左邊這條路,接著再對比 29 下面的左邊那個點 13群嗤,這時手中的 24 比 13 大,那我們就走右邊的路壳坪,并且將手中的值根據(jù) 13 修改一下午磁,變成 24-13 = 11。接著拿著 11 和 13 左下角的 12 比懊昨,結果 12 比 11 大窄潭,那我們就選 12 當做這次選到的 priority,并且也選擇 12 對應的數(shù)據(jù)酵颁。

使用TensorBoard我們會發(fā)現(xiàn)DQN with Prioritized replay多了一個 ISWeights (Importance-Sampling Weights)嫉你,用來恢復被 Prioritized replay 打亂的抽樣概率分布。

image

Prioritized replay可以高效利用不常拿到的獎勵并好好學習它們躏惋,所以 Prioritized replay 會更快結束每個 episode幽污,很快到達目標。

Dueling DQN:

將每個動作的 Q 拆分成了 state 的 Value加上每個動作的Advantage簿姨。

DQN 直接輸出每個動作的 Q值距误,而 Dueling DQN每個動作的 Q值由下式確定:
Q(s,a;\theta,\alpha,\beta)=V(s;\theta,\beta)+A(s,a;\theta,\alpha)

Policy Gradient:

強化學習是一種通過獎懲來學習正確行為的機制。學習高價值行為的有Q Learning和DQN扁位,也有不通過分析獎勵值直接輸出的Policy Gradient准潭,這樣的好處是可以在連續(xù)區(qū)間挑選動作,而基于值的Q Learning如果在無窮多的動作中計算價值再選擇行為會消耗太大域仇。

Policy Gradient不輸出action的value刑然,而直接輸出具體的action,跳過了value這個階段殉簸。

輸出的action可以是連續(xù)的值闰集,之前那些value-based的方法輸出不連續(xù)的值沽讹,然后選值最大的action,而Policy Gradient可以在連續(xù)分布上選取action武鲁。

Policy Gradient是一種基于整條回合數(shù)據(jù)的更新爽雄,也叫Reinforce方法。

image

delta(log(Policy(s,a))*V) 表示在 狀態(tài) s 對所選動作 a 的吃驚度沐鼠。如果 Policy(s,a) 概率越小挚瘟,反向的 log(Policy(s,a)) (即 -log(P)) 反而越大。如果在 Policy(s,a) 很小的情況下饲梭,
拿到了一個 大的 R乘盖,也就是 大的 V,那 -delta(log(Policy(s, a))*V) 就更大憔涉,表示更吃驚订框。比如選了一個不常選的動作,發(fā)現(xiàn)它能得到了一個好的 reward兜叨,那么對這次的參數(shù)進行一個大幅修改穿扳,這就是吃驚度的物理意義。

選行為的時候不是根據(jù)Q value而是根據(jù)概率国旷。生成action的過程矛物,本質(zhì)上是一個隨機過程。最后學習到的策略跪但,也是一個隨機策略(stochastic policy)履羞。

Actor Critic:

結合值和概率的一種算法。

Actor依據(jù)Policy Gradient基于概率選行為屡久,Critic依據(jù)Q Learning等以值為基礎的學習方法忆首。

Critic基于Actor的行為評判行為的得分,Actor根據(jù)Critic的評分修改選行為的概率涂身。

Policy Gradient屬于回合更新雄卷,這樣降低了學習效率。Critic學習獎懲機制蛤售,使得Actor每一步都能更新丁鹉,而不是Policy Gradient等到回合結束菜更新。

Actor Critic涉及兩個神經(jīng)網(wǎng)絡悴能,而且每次都在連續(xù)狀態(tài)中更新參數(shù)揣钦,每次參數(shù)更新前后都有相關性,導致神經(jīng)網(wǎng)絡只能片面看待問題漠酿,甚至學不到東西冯凹,于是Google DeepMind改進了這個方法。

Deterministic Policy Gradient (DPG):

確定性的行為策略,每一步的行為通過函數(shù)μ直接獲得確定的值宇姚,不再是一個需要采樣的隨機策略匈庭。

因為PG學到隨機策略后每一步行為都對最優(yōu)策略概率分布進行采樣才能獲得action具體值,而action通常是高維向量浑劳,在高維空間頻繁采樣影響計算能力阱持。

Deep Deterministic Policy Gradient (DDPG):

Actor-Critic + DQN = Deep Deterministic Policy Gradient

Deterministic 就改變了輸出動作的過程,在連續(xù)動作上輸出一個動作值魔熏。

DDPG是針對連續(xù)行為的策略學習方法衷咽。在RL領域,DDPG主要從:PG -> DPG -> DDPG 發(fā)展而來蒜绽。

Code:

實現(xiàn)強化學習的代碼主要分為三個部分:

  • 環(huán)境腳本 (env.py)
  • 強化學習腳本 (rl.py)
  • 主循環(huán)腳本 (main.py)

根據(jù)不同的學習方法镶骗,每個環(huán)節(jié)有一些基本的function和變量:

  • rl.py
    • rl.choose_action(s)
    • rl.store_transition(s, a, r, s_)
    • rl.learn()
    • check_state_exist(self, state)
    • rl.memory_full
  • env.py
    • env.reset()
    • env.render()
    • env.step(a)
    • env.state_dim
    • env.action_dim
    • env.action_bound

框架大致如下:

# main.py

# 導入環(huán)境和學習方法
from env import Env
from rl import RL

# 設置全局變量
MAX_EPISODES = 500
MAX_EP_STEPS = 200

# 設置環(huán)境
env = Env()
s_dim = env.state_dim
a_dim = env.action_dim
a_bound = env.action_bound

# 設置學習方法
rl = RL(a_dim, s_dim, a_bound)

# 開始訓練
for i in range(MAX_EPISODES):
    s = env.reset()                 # 初始化回合設置
    for j in range(MAX_EP_STEPS):
        env.render()                # 環(huán)境的渲染
        a = rl.choose_action(s)     # RL選擇動作
        s_, r, done = env.step(a)   # 在環(huán)境中進行動作

        # 存放記憶庫
        rl.store_transition(s, a, r, s_)

        if rl.memory_full:
            rl.learn()              # 記憶庫滿了, 開始學習

        s = s_                      # 變?yōu)橄乱换睾? 
# env.py

class Env(object):
    def __init__(self):
        pass
    def step(self, action):
        pass
    def reset(self):
        pass
    def render(self):
        pass
# rl.py

class RL(object):
    def __init__(self, a_dim, s_dim, a_bound,):
        pass
    def choose_action(self, s):
        pass
    def learn(self):
        pass
    def store_transition(self, s, a, r, s_):
        pass

Reference:

  1. A Painless Q-Learning Tutorial
  2. Deep Reinforcement Learning
  3. Reinforcement Learning
  4. Deep Q Learning
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市躲雅,隨后出現(xiàn)的幾起案子鼎姊,更是在濱河造成了極大的恐慌,老刑警劉巖相赁,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件此蜈,死亡現(xiàn)場離奇詭異,居然都是意外死亡噪生,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門东囚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跺嗽,“玉大人,你說我怎么就攤上這事页藻〗凹蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵份帐,是天一觀的道長璃吧。 經(jīng)常有香客問我,道長废境,這世上最難降的妖魔是什么畜挨? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮噩凹,結果婚禮上巴元,老公的妹妹穿的比我還像新娘。我一直安慰自己驮宴,他們只是感情好逮刨,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堵泽,像睡著了一般修己。 火紅的嫁衣襯著肌膚如雪恢总。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天睬愤,我揣著相機與錄音片仿,去河邊找鬼。 笑死戴涝,一個胖子當著我的面吹牛滋戳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啥刻,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奸鸯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了可帽?” 一聲冷哼從身側(cè)響起娄涩,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎映跟,沒想到半個月后蓄拣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡努隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年球恤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荸镊。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咽斧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躬存,到底是詐尸還是另有隱情张惹,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布岭洲,位于F島的核電站宛逗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盾剩。R本人自食惡果不足惜雷激,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望告私。 院中可真熱鬧侥锦,春花似錦、人聲如沸德挣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至番挺,卻和暖如春唠帝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玄柏。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工襟衰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粪摘。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓瀑晒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親徘意。 傳聞我的和親對象是個殘疾皇子苔悦,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容