# 李宏毅_ATDL_DRL Lecture 6 ###### tags: `Hung-yi Lee` `NTU` `Deep Reinforcement Learning` [課程撥放清單](https://www.youtube.com/playlist?list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_) ## DRL Lecture 6: Actor-Critic [課程連結](https://www.youtube.com/watch?v=j82QLgfhFiY&list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_&index=6) ### Review - Pilicy Gradient ![](https://i.imgur.com/RW9vPKv.jpg) $\nabla \bar{R}_\theta \approx \dfrac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} \left( \sum_{t'=t}^{T_n} \gamma^{t'-t} r^n_{t'}-b \right) \nabla \log p_\theta(a_t^n \vert s_t^n)$ * 讓agent與環境互動,計算在某一個state-$s$採取某一個action-$a$的機率 * 計算從state-$s$採取action-$a$之後,一直到遊戲結束的時候,其accumulated reward有多大 * 從$t$到$T$加總 * $\gamma^{t'-t}$,這是一個discount factory,因為一個action對愈後面的影響愈小,可能是0.99或是0.9 * 減掉bias-$b$是希望括號項目內的所得的值有正有負,為正,代表增加這個state-action pair的機率,負的就減少。 * $\sum_{t'=t}^{T_n} \gamma^{t'-t} r^n_{t'}$,以$G_t^n$來表示 * $G$的不穩定是因為互動過程中的隨機性,為random variable,過程中從$G$ sample,然後用sample到的資料更新參數 * 即使是相同的state-action pair,最終得到的結果還是可能如上圖說明一般的存在很大的落差,因此我們希望可以直接估測$G$這個random variable的期望值,用期望值來代替sample的值 ### Review - Q-Learning ![](https://i.imgur.com/NmVW1AH.jpg) 直接估測$G$的方式就是value-based的方法: * State value function $V^\pi(s)$ * input s output scalar * State-action value function $Q^\pi(s, a)$ * input s output vector,每一個維度都是對應action的Q-value,只能用於discrete action 可用TD或MC來估測,TD較穩,MC較精確 ### Actor-Critic ![](https://i.imgur.com/q4hwz9f.jpg) $G$這個random variable的期望值就是Q-value,在policy-$\pi$情況下,當state-$s$的時候執行action-$a$所得的accumulated reward有多大。因此,要做的事很簡單,如果要將$G$用期望值來表示,只要把Q-function套在這邊就可以將actor-critic兩個方法結合起來。 baseline的話,可以用value-function來表示,即是在policy-$\pi$的情況下,在某一個state-$s$一直互動到遊戲結束的excpected的reward有多大<sub>(V-function沒有考慮action,Q-function才有action考慮)</sub>。 直觀來看,就是將原始Policy Gradient中的項目以Q-value減掉V-value就結束了,只是缺點就是要估測的是兩個`nn`(Q-function與V-function)。 ### Advantage Actor-Critic ![](https://i.imgur.com/hHlle5N.jpg) 事實上,在Actor-Critic的方法內,可以單純的估測V-function,將Q-value以V-value來表示: * $Q^\pi(s_t^n, a^n_t) = E \left[ r^n_t + V^\pi(s^n_{t+1}) \right]$ * $r$是random variable,在某一個state採取action所得的rewrad是不確定,中間具有隨機性,因此要取期望值才會是Q-function * $Q^\pi(s_t^n, a^n_t) - V^\pi(s^n_t)$ * $=r^n_t + V^\pi(s^n_{t+1}) - V^\pi(s^n_t)$ * 直接拿掉期望值,並取代原始的Q-function * 原始取期望值是因為具有隨機性 * 這麼做的好處在於,只需要估測一個`nn`即可(V-function) * 這麼做的壞處在於,引入随機性,因為$r$本身具有隨機性,但相較於G的accumulated reward來說可能還好,因為$r$是某一個step會得到的reward,而G是所有未來的step會得到的accumulated reward,因此相較於G的variance,$r$的variance可能較小。 ### Advantage Actor-Critic ![](https://i.imgur.com/mlR48D7.jpg) 整體流程如下: * 將G取代掉的部份稱為Advantage function * $r^n_t + V^\pi(s^n_{t+1}) - V^\pi(s^n_t)$ 1. 有一個$\pi$,初始化一個actor與環境互動收集資料 2. 不同於Policy Gradient直接更新參數,是利用收集到的資料來估測value function * 可以使用TD或MC 3. 更新$\pi \rightarrow \pi'$ * 利用$\nabla \bar{R}_\theta \approx \dfrac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n}(r^n_t + V^\pi(s^n_{t+1}) - V^\pi(s^n_t)) \nabla \log p_\theta(a_t^n \vert s_t^n)$ 4. 利用$\pi'$再與環境互動收集資料 5. .... ### Advantage Actor-Critic ![](https://i.imgur.com/JDWWvvk.jpg) 實作上有兩個tip: 1. 訓練過程中有兩個`nn`,一個是V-function,一個是Policy(即actor),其中V-function input state ,output scalar。而actor的話是input state,output action的distribution。因為兩個`nn`的input都是state,因此前面幾個layer的話是可以共用的。如果是影像的輸入的話,就可以將輸入的像素轉為較高階的資訊。 2. 一樣需要exploration的機制(參考Q-learning課程資訊),實作Actor-Critic的一種常見作法,就是對actor的output(action distribution)下一個constrain,讓distribution的entropy不要太小,讓不同的action被採用的機率平均。 ### Asynchronous Advantage Actor-Critic(A3C) ![](https://i.imgur.com/WeKoXg4.jpg) A3C的精神就跟鳴人用影分身訓練自己的道理一樣。 ### Asynchronous ![](https://i.imgur.com/8xbqrn7.jpg) A3C同時開很多Worker(影分身),再將所有的經驗通通集合在一起: 1. 有一個global network,包含policy、V-function,其參數為$\theta^1$ 2. Worker工作前就是先copy global network的參數 3. Worker與環境互動 * 如果要收集到多樣性的資料的話,就要讓每一個Worker的初始化都不一樣 4. 利用收集到的資料計算梯度(梯度的符號錯誤) 5. 回傳梯度之後更新global network的參數$\theta^1 \rightarrow \theta^1 + \eta \nabla \theta$ 要注意到的是,所有的actor都是平行執行,同時在執行計算,做完就回傳參數,即使原本取到的是$\theta^1$到回傳的時候已經變成是$\theta^2$的時候也沒有關係,一樣回傳之後計算。 ### Pathwise Derivative Policy Gradient ![](https://i.imgur.com/L2Hreql.jpg) [論文連結_Deterministic Policy Gradient Algorithms ](http://proceedings.mlr.press/v32/silver14.pdf) 這是一種用Q-learning來解continuous的方法,也可以視為是一種特別的actor-critic的方法。 以棋靈王來說明的話,阿光是Actor,佐為是Critic,一般的RL可能在阿光下一個棋之後,佐為只告訴阿光好,不好,就這樣,但如果是Pathwise Derivative Policy Gradient的話,佐為會同時告訴阿光應該採取什麼樣的action。critic會引導actor做什麼樣的action才能得到比較大的value。 以Q-learning的觀點來看,Q-learning較難以處理continuous的action,但我們可以用一個actor來解這個問題($a = \arg \max_a Q(s, a))$)。 假設actor是一個solver,它的工作是給定state-$s$,然後告訴我們那一個action可以得到最大的Q-value。這概念跟GAN非常相似,將Q視為discriminator,要依據discriminator決定action非常困難,那就另外learn一個`nn`來解這個問題,也就是actor,利用actor來決定action,解$\arg \max$的問題。 ### Pathwise Derivative Policy Gradient ![](https://i.imgur.com/5Fmoqp6.jpg) 直觀來看如下: * learn一個Q-function,input為state-$s$、action-$a$,output為$Q^\pi(s, a)$ * learn一個actor解$\arg \max$,input為state-$s$,output為action-$a$,這個output做為Q-function的input,希望可以讓Q-value愈大愈好 實作上會將兩個`nn`接起來,做為一個比較大的`nn`,訓練過程中會固定住Q-function的參數,單純的訓練actor的參數,以Gradient ascent來最大化。這似曾相識的概念,就是GAN,conditional GAN。Q為discriminator(cirtic),actor為generator。 ### Q-Learning Algorithm ![](https://i.imgur.com/Y6Z570L.jpg) 這是之前課程提過的原始Q-Learning演算法: * 初始化Q-function與target network $\hat{Q}$,並且讓$\bat{Q}$=Q * 每一個episode中 * 每一個time step t * 給定state-$s_t$,由Q-function決定採用那一個action-$a_t$(記得加exploration) * 得到reward-$r_t$,跳到下一個state-$s_{t+1}$ * 將$\left\{ s_t, a_t, r_t, s_{t+1} \right\}$寫入buffer * 從buffer中sample batch-size的資料出來$\left\{ s_i, a_i, r_i, s_{i+1} \right\}$ * 利用target function-$\hat{Q}$計算$s_{i+1}$的值,再加上$r_i$得到target-$y$ * 更新Q-function,希望$Q(s_i, a_i)$的output與target-$y$愈接近愈好 * 每$C$個step之後重新讓$\hat{Q}$=Q ### Q-Learning Algorithm $\rightarrow$ Pathwise Derivative Policy Gradient ![](https://i.imgur.com/X7libBM.jpg) 從Q-learning到Pathwise Derivative Policy Gradient只需要調整四個地方: 1. 原本是用Q-function決定採用那一個action,調整為直接用actor-$\pi$來決定,不需要再解$\arg \max$的問題 2. 不解$\arg \max$的問題之後,target-$y$也調整為$\hat{Q}(s_{i+1}, \hat{\pi}(s_{i+1}))$,原本由$\hat{Q}$決定那一個action,也直接由$\hat{\pi}$來決定 3. 利用更新$\pi$來最大化Q-function $Q(s_i, \pi(s_i))$,這原因跟GAN的generator一樣。 4. 每$C$個step就同步一次,即$\hat{\pi}=\pi$ 與Q-learning有兩個`nn`一樣,pathwise Derivative Policy Gradient也有兩個actor,參數也一樣是固定住,在幾個time step之後才會同步一次。因為我們並不希望target value不斷的變動。 ### Connection with GAN ![](https://i.imgur.com/DqAsJQL.jpg) [論文連結_Connecting Generative Adversarial Networks and Actor-Critic Methods](https://arxiv.org/abs/1610.01945) 因為GAN與actor-critic都是非常難訓練,因此論文上也提出那幾種作法在GAN上有實作錄記,那些在actor-critic上有,也許可以互相學習。