深度強化學習cs294 Lecture7: Value Function Methods
深度強化學習cs294 Lecture7: Value Function Methods
回憶上節課所講的內容,關於actor-critic演算法的講解。將policy gradient方法中目標函式梯度的計算進行一些替換,加入了bootstrapping減小方差,定義了無限步長形勢下的問題描述讓演算法支援線上形式等等。
Value-based Methods
這節課要講的是不基於策略梯度的方式,而直接利用值函式,也就是critic的部分,來得到最終的策略。首先回憶advantage的定義,指的是當前動作比平均動作好的多少,而如果選擇advantage函式最大的動作,這個動作肯定等於或好於任何其它動作,無論當前採用的策略是什麼。也就是說這樣做能得到比較好的策略。
基於每次都能得到更好的策略的想法,我們可以得到一個簡單的策略,那就是policy Iteration策略。一共兩步,第一步評估advantage函式,第二步基於advantage函式改進策略。
但是由於advantage函式需要由 計算得到,因此我們需要先計算 。
先假設狀態空間和動作空間都是比較小且是離散形式的,因此就可以將
函式當做是一個表格來進行維護。從一個初始值開始,利用自舉的形式進行不斷地更新。
假如我們的策略是確定性的且每次只選擇最優的一個動作,那麼就可以將其簡寫為上圖最下方的等式。而這個計算的過程也叫作policy evaluation。
這個計算過程利用了動態規劃的思想,而且實際上我們可以把這兩個步驟合二為一,直接跳過策略的部分來計算狀態值函式。
想要做到這樣的效果要先引入狀態動作值函式 。同樣把這個函式實現為一個表格的形式,每個狀態動作對都對應一個值。這裡直接可以通過採用最大的 值動作來確定策略,因此也就可以直接把當前狀態下最大的 當做狀態s下V值的下一個估計值。於是就得到了一個比policy iteration更簡單的動態規劃演算法:
在計算的過程中不考慮策略的存在,而最後能夠直接根據值函式得到策略。這個演算法叫做value iteration。
那麼如何能夠更好的表示狀態值函式
呢?之前講的都是表示為表格的形式,但是在複雜的問題裡這樣的形式不太可能,因為維度災難的問題。也就是狀態需要表示為一個表格可能太大了無法儲存。因此可以使用引數化的表示,比如利用一個神經網路來表示這個值函式:
而這個神經網路需要訓練來得到逼近實際表示的最優引數,利用最小均方誤差作為目標函式進行優化。
但是在計算過程中,我們需要知道環境中狀態轉移的概率分佈。比如在fitted value iteration的過程中的max步驟以及求期望的步驟都需要。而且max步驟還需要得到在同一個狀態採取不同動作a的結果來選取最優結果。這是很難做到的。但是如果我們選擇使用
函式來替代
就能夠避免這個問題。
使用
之後,max步驟可以直接根據結果得到最優的動作a。而期望部分需要轉移概率分佈的時候,可以使用取樣結果來代替。
這個演算法能夠像actor-critic演算法一樣適應off-policy的形式。而且只使用了一個網路結構,不需要高方差的策略梯度。不過這個演算法對於非線性函式逼近的形式不能夠保證收斂性。
Q-Learning
我們可以寫出
值形式的value iteration演算法,其中取樣時候使用的策略可以使用任意的策略,因為演算法是可以off-policy的。而且中間的迭代過程可以多次:
那麼為什麼這個演算法是off-policy的呢?可以看目標值更新的那個等式,發現實際上在確定了
以後,後一項與使用的策略沒有關係。也就是這個更新結果並不依賴於正在優化的策略。
而這個形勢下的演算法究竟在優化一個什麼目標呢?實際上優化的目標叫做bellman error。
加入bellman error為0,那麼Q函式就是最優的,而根據此時Q函式選取的動作也是最優策略。在表格形式下,這個迭代演算法能夠保證最終得到最優的策略,但是使用了值函式逼近的時候,這個收斂性往往無法保證。
我們同樣可以把Q-learning實現為online形式的:
雖然是online形式的,但是由於演算法支援off-policy,因此選擇動作
時候有很多種策略,比如最簡單的使用確定性的最優動作。但實際上這在學習的時候不是一個好選擇,因為可能就不會得到更好的explore的結果。還有epsilon-greedy和boltzmann exploration兩種常用的選擇:
其中Boltzmann法裡e的指數裡可以再加一個係數當做溫度。
複習一下當前所講的內容:
Value Function Learning Theory
下面講解一下基於值函式方法的學習理論的內容。比如value iteration演算法是否能夠收斂?收斂的話結果又是如何的?
首先定義一個符號
,它的作用如圖。這個符號的實際作用實際上就是對所有的值函式V進行一次迭代,也就是value iteration的過程。而這裡存在一個最優的
,在經過操作符
作用之後與原結果相等。它總是存在的且對應著最優的策略。下面討論如何才能到達這個點。
我們能夠證明,對於value iteration來說這個最優點是可以達到的,因為這個作用符是收縮的。也就是下圖所示,在無限維範數意義上能讓兩個點的對映後的結果更接近:
也就是說,可以在無限維範數的概念上不斷接近最優結果
。因此最優結果是能夠達到的。
但是這是對於表格形式的value iteration來說的,對於函式逼近形式下的結果,還需要在原有的基礎上多加一個操作符
。這個操作符的作用是將值函式對映到函式逼近使用的引數能夠表示的平面上去,對應的是L2範數最小的對映點。
因此實際上使用了函式逼近的情況下,更新過程裡有兩個操作符
。
這個將結果V對映到函式能表示的空間裡的操作符
也是contraction的,但是是在L2範數的意義上。但是兩個操作符聯合起來的作用效果卻讓結果不能保證任何意義上的contraction。也就導致
不一定能夠真的向著最優的
移動。
也就是說使用了值函式逼近方法的value iteration一般是不收斂的。
這個結果對於使用
函式的形式是相同的:
實際上,即使是online形式的Q-learning也是這樣。即使它使用了類似梯度下降的方法,但這不能夠保證結果的收斂。因為實際上使用的並不是梯度下降,因為使用的結果根本不是一個目標函式的梯度(max的部分以及後面跟係數有關的部分都無法求梯度)。
還有一個推論,那就是在actor-critic中,使用了函式逼近形式的演算法,同樣也不能夠保證最終結果是收斂的。
總結一下: