1. 程式人生 > >強化學習之深度Q函式

強化學習之深度Q函式

背景:強化學習玩遊戲

模擬器(model 或 emulator)以動作(action)為輸入,輸出一張影象和獎勵。

單張影象無法完全理解agent的當前狀態,所以得結合動作與狀態序列的資訊。

agent的目標是,以一定的方式選擇動作,與模擬器進行相交,來最大化將來的獎勵。

Bellman equation:

Q(s,a)=Esϵ[r+γmaxQ(s,a)|s,a]
強化學習的一般方法是利用Bellman equation作為迭代更新:
Qi+1(s,a)=Esϵ[r+γmaxaQ(s,a)|s,a]

DQN

這裡寫圖片描述

將深度學習應用到強化有幾個挑戰。

  1. 大多深度學習的應用都需要大量的標註資料,而強化學習需要從reward訊號學習,且reward訊號經常比較稀疏(sparse)、有噪聲(noisy)、有延遲(delayed)。從執行動作(action)到產生reward的延遲,可能有上千步長。
  2. 資料樣本的獨立性。深度學習假設資料樣本是獨立的,而在強化學習中狀態(state)之間是高度相關的。
  3. 資料分佈的不變性。深度學習假設資料分佈是不變的,而強化學習可以學習新的行為(policy),進而改變資料的分佈。

針對第二和第三點的應對策略:

​ 經驗回放機制(experience replay mechanism):通過多次隨機取樣之前的狀態轉移,來平滑訓練分佈的變化。

Q函式用網路表示時的損失函式

Li(θi)=Es,aρ()[(yiQ(s,a;θi))2]
其中目標值
yi=Esϵ[r+γmaxaQ(s,a;θi1)|s,a]
值得注意的是,在深度學習中目標值
在訓練開始時是固定不變的,而有強化學習中卻與網路的引數有關。

損失函式的導數為:

θiLi(θi)=Es,aρ();sϵ[(r+γmaxaQ(s,a;θi1)Q(s,a;θi))θiQ(s,a;θi))]
該演算法有兩點值得注意:
  1. model-free。只用到模擬器產生的樣本,並不需要去估計模擬器。
  2. off-policy。要學習的是greedy strategy,follow的是ϵ-greedy strategy。

該演算法比standard online Q-learning 的優勢在以下幾個方面。

  1. 每一次經驗都可能被多次用到,來更新權重,資料利用效率更高。
  2. 由於連續樣本之間的高度相關性,直接從連續的樣本學習是不足的。隨機抽取這些樣本打破了這種相關性,因此能減小更新權重的方差。
  3. 學習on-policy的時候,當前的引數會決定下一個資料樣本,且是在這個資料樣本上訓練的。

關於網路的結構:

  1. 輸入為歷史經驗和動作,輸出為該動作的value值。缺點是每計算一個動作的value都得執行一次網路。
  2. 輸入為歷史經驗,輸出為每個動作對應的value值。優點是隻要執行一次網路,就知道所有動作的value值。

Double DQN

DQN 存在高估Q(s,a)的問題,因為它有max操作,傾向於高估的值。高估問題一直被認為是由不夠強大的函式近似、噪聲造成的。文中還發現不準確的Q(s,a)也會造成高估問題,而Q(s,a)不準確是很常見的,所以高估問題應該比之前認為的更常見。

DQN有強大的函式近似、確定的環境也降低了噪聲的影響,但有時還是存在高估的問題。

背景

DQN裡的最大化操作用同樣的網路引數θ,來選擇和評價一個動作,這就使它更容易選擇高估的動作。Double DQN的idea是將選擇和評價過程解耦合,來防止這種高估問題;換句話說,通過將target裡的max操作分解為動作選擇和動作評價。

Q-learning的target為:

YQt=Rt+1+γmaxaQ(St+1,a;θt)
將它改寫為:
YQt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)
而Double-DQN的target就是:
YQt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)
其中,θt是隨訓練變化而變化的,而