強化學習的概念在於讓模型與環境互動,從環境中的回饋學習哪些行為是好的,哪些行為是不好的。我們把負責與環境互動的模型稱為行為者(actor)。以下我會介紹兩個常見於更新行為者參數的作法。
什麼是行為(action)?
從一個簡單的例子開始,如果我今天想要讓行為者模型(以下簡稱模型) 去學習如何去玩Space Invader,他的行為就是由左、右、射擊三個動作所組成。每一個時間點模型都可以選擇做這三個動作的其中一種,或是什麼也不做,這部分可以依照需求而定。再比如下圍棋,模型的可能動作就是在當前棋盤的任意一個空位下棋。現在我們可以暫時為行為下一個操作型定義,如果模型能夠輸出一組數值使得環境有所改變的話,那麼這組數值就是模型在那個時候所做的行為。
離散行為空間與連續行為空間
使用滑鼠的時候,滑鼠左鍵是離散行為空間(discrete action space) 中的一種行為,因為滑鼠左鍵只有按著跟放開,不存在按一半的情況。離散行為空間的行為者可以用下式一描述:
$policy = \pi(a_i|s), \sum_i \pi(a_i|s) = 1$ –(1)
其中$policy$ 是一組機率分布,$\pi$ 是行為者模型,$s$ 是環境資訊,$a_i$ 是第$i$ 種行為。式一的意思是模型會根據當時的環境$s$ 計算每一個行為$a_i$ 可能發生的機率。
而左右移動滑鼠則是連續行為空間(continuous action space) 中的一種行為,因為滑鼠的移動速度可以是任意連續值(在符合物理機制的前提下)。連續行為空間的行為者的輸出可以用下式二描述:
$a = \mu(s), \mu(s)\in\mathbb{R}^n$ –(2)
其中$\mu$ 是連續行為空間的行為者、$a$ 是行為並屬於任意實數。因為我們沒辦法窮舉連續行為空間的機率密度,所以行為者輸出的是該行為位於連續行為空間的期望值$\mu(s)$。也因此機率密度分布只能在模型之外的地方被定義,例如手動加入Gaussan noise。例如假設模型今天控制的是搖桿,那可以把搖桿的最左邊訂為-1最右邊訂為1,然後請模型輸出介於-1到1之間的數作為輸出,如下式三:
$a = \mu(s), \mu(s)\in[-1, 1]$ –(3)
這兩類行為空間在機率的處理上有非常大的不同,請讀者先記在心裡。
更新行為者參數是為了得到高分
如何評判行為的好壞也是很值得一談的話題,但是本篇聚焦在更新行為者參數上,所以忽略這個討論,直接假設我們已經有了一個完善的評分系統。我們可以藉由這個評分系統告訴行為者哪些行為可以得到高分。所以只要行為者把高分的行為的出現機率提高,就相當於模型可以在這個環境做出好的行為。
令評分系統叫做$Q$,給$Q$ 當下的環境$s$ 以及模型所做的行為$a$,$Q$ 能夠吐出這個行為應該得幾分,寫作下式四:
$Q(s, a)\in\mathbb{R}$ — (4)
方法一:Policy Gradient
給定一個環境$s$,我們可以把所有可能的行為$a_i$ 的得分$Q(s, a_i)$ 寫成一個partition function, $Z(s)$。令行為者輸出的行為機率分布$\pi(\cdot|s)$跟指數化的$Q(s, \cdot)$ 除以$Z(s)$ 越像越好,兩分布的交叉熵如下式五:
$L = H(\pi(\cdot|s), \frac{\exp(Q(s, \cdot))}{Z(s)}) $ — (5)
其中$H$ 代表交叉熵,會使用指數化的$Q(s, \cdot)$ 除以$Z(s)$ 作為目標機率分布是因為$Q$的質域覆蓋了整條實數線。為了使評分系統的輸出符合機率的定義,$Q$ 必須指數化且除以partition function $Z(s)$。
由於在離散行為空間中,行為的種類可以被窮舉,所以可以直接套用式五計算$L$,並且使用梯度下降(Gradient Descent) 更新行為者的參數使得該交叉熵越小越好。實務上$Z(s)$ 對模型的任意參數的微分為0,所以可以忽略不寫。模型與環境互動的時候,因為時間有限,所以也只能互動$T$ 次。$H(p, q) = -\sum p \cdot log(q)$。綜上所述,式五可以被整理成下式六:
$L = -\sum_t^T \pi(a_t | s_t) \cdot Q(s_t, a_t) $ –(6)
使用式六作為損失函數對行為者的參數做梯度下降(或稱梯度上升,因為$L$含著一個負號)的做法,稱為Policy Gradient。這個做法被廣泛地用在離散行為空間的強化學習上。像是A3C與PPO。
方法二:Q-Learning
連續行為空間的行為者的運氣就沒有那麼好了。由於它總是輸出環境$s$ 的行為的期望值$\mu(s)$,所以這個行為者的行為機率分布尚未定義。為了讓這個模型也能使用式五作為損失函數,首先我們為這些連續行為空間的行為添加一些常態分佈亂數,如下式七:
$a = f(s) = Sample(\mathcal{N}(\mu(s), \sigma(s))), a\in\mathbb{R}$ — (7)
其中$\sigma(s)$ 是常態標準差,它可以由模型決定,也可以跟模型無關。$f(s)$ 是從$\mathcal{N}(\mu(s), \sigma(s))$ 隨機取樣得到的動作。我們用$f(s_t)$ 取代式六中的$a_t$,並且忽略$\pi(a_t|s_t)$,因為現在模型的機率分布是人為給定的。得到下式八:
$L = -\sum_t^T Q(s_t,f(s_t)) $ –(8)
使用式八作為損失函數就叫做Q-Learning,且$Q$ 必須是一個可微分的神經網路。其作法是以模型輸出的期望值$\mu(s_t)$ 為基礎,從常態分佈中取樣出一個行為$f(s_t)$,並且為該行為評分$Q(s_t, f(s_t))$。接著對$L$ 做梯度下降(或稱對評分的總和做梯度上升,因為$L$ 中含有負號),更新參數使得模型做出好行為的機率增加。
Q-Learning 常見於連續行為空間的環境,像是移動手腳、操縱搖桿或是操作方向盤。其中比較有名的有Sof Actor-Critic([1], [2])。Q-Learning也可以用於離散行為空間的環境,但是行為$a$ 必須根據$\pi$ 隨機取樣(Stochastic sampling),或是套上Gumbel Softmax,而不能直接選擇機率最大的行為作為輸出(Arguement of the maxima)。其原因跟取樣導致機率塌縮有關,我們以後有機會再談。
小結
Policy gradient 和Q-learning 都是現在常用的強化學習演算法。其中policy gradient 只能用在離散行為空間中,Q-learning 可以用在離散或連續行為空間中。Policy gradient 在歷史上出現得比較早,因為它不要求$Q$ 要是一個神經網路。直到最近10年間神經網路越來越流行,Q-learning 也跟著流行了起來。
所有文章分類