DQN
作為DRL的開(kāi)山之作,DeepMind的DQN可以說(shuō)是每一個(gè)入坑深度增強(qiáng)學(xué)習(xí)的同學(xué)必了解的第一個(gè)算法了吧。先前,將RL和DL結(jié)合存在以下挑戰(zhàn):1.deep learning算法需要大量的labeled data,RL學(xué)到的reward 大都是稀疏、帶噪聲并且有延遲的(延遲是指action 和導(dǎo)致的reward之間);2.DL假設(shè)樣本獨(dú)立;而RL前后state狀態(tài)相關(guān);3.DL假設(shè)分布固定,而RL在學(xué)習(xí)新的行為時(shí),數(shù)據(jù)分布會(huì)變化。DQN通過(guò)Q-Learning使用reward來(lái)構(gòu)造標(biāo)簽、使用經(jīng)驗(yàn)池等方法解決了這些問(wèn)題。
基于Q-learning 確定Loss Function
Q-learning 更新公式為:
DQN 的 loss function:
DQN使用隨機(jī)梯度下降更新參數(shù),為啥要把targetnet單獨(dú)拎出來(lái)呢,后續(xù)會(huì)說(shuō)的。
experience replay
DQN 使用exprience replay解決instablity的問(wèn)題,把每個(gè)時(shí)間步agent與環(huán)境交互得到的轉(zhuǎn)移樣本存儲(chǔ)在buffer中,并被隨機(jī)抽取。通過(guò)這種方式,去除了數(shù)據(jù)之前的相關(guān)性,并且緩和了數(shù)據(jù)分布的差異。
TargetNet
為了減少 和 目標(biāo)
之間的相關(guān)性,從而提高穩(wěn)定性.2015年版的DQN加入了另一個(gè)網(wǎng)絡(luò)——
作為targetnet,它和
參數(shù)分離,每次參數(shù)更新只更新
,而
的參數(shù)
保持不變,并且周期性的將
的參數(shù)復(fù)制給
。此時(shí),loss function變?yōu)椋?br>
double DQN
在標(biāo)準(zhǔn)的Q-learning,和DQN中,參數(shù)是這么更新的:
max操作使得估計(jì)的值函數(shù)比值函數(shù)的真實(shí)值大。如果是均勻的過(guò)估計(jì),找到的最優(yōu)策略是不會(huì)變的,不會(huì)對(duì)我們的目標(biāo)造成影響。但實(shí)際上,過(guò)估計(jì)的誤差在不同的states和actions下是不同的,這就會(huì)影響到我們找到最佳策略了。為了減少overestimation,van Hasselt et al.(2016)提出Double DQN(D-DQN)。利用DQN中的target network,將selection 和 evelation 解藕。使用Behavior Network選擇出value最大的action,用target network來(lái)估計(jì)它的值被更改為:
PS 論文中有對(duì)兩個(gè)數(shù)學(xué)定理的詳細(xì)證明,感興趣的同學(xué)可以看哦
Prioritized Experience Replay
在前面的方法中,experience replay都是均勻隨機(jī)采樣,但實(shí)際上不同樣本的重要性顯然是不同的。舉個(gè)例子,在強(qiáng)化學(xué)習(xí)初期,replay memory中,除了直接和目標(biāo)相關(guān)的state-action pair 有正值,大部分的value都為0,大量的從zero-value state 到 另一個(gè) zero-value state 的transitions更新導(dǎo)致很低效。Moore & Atkeson, 1993 提出Prioritized Sweeping,優(yōu)先選擇value改變了的state。具體算法如下:
但Prioritized sweeping 主要用在model based planning。Schaul et al. (2016) 提出了Prioritized Experience Replay。
Prioritizing TD-Error
用 TD-error來(lái)規(guī)定優(yōu)先學(xué)習(xí)的程度. 如果越大, 就代表我們的預(yù)測(cè)精度還有很多上升空間, 那么這個(gè)樣本就越需要被學(xué)習(xí), 也就是優(yōu)先級(jí)越高。通過(guò)存儲(chǔ)transition,及其每次回放更新得到的最新的TD-error,將TD-error絕對(duì)值最大的transition從 memory 中進(jìn)行回放。然后對(duì)該transition進(jìn)行Q-learning的更新,并根據(jù)TD-error,更新其優(yōu)先級(jí)。而對(duì)于沒(méi)有已知TD-error的新進(jìn)入memory的transition,將其放到最大優(yōu)先級(jí)的行列,以確保所有的經(jīng)驗(yàn)至少被回放一次。
Stochastic Prioritization
greedy TD-error prioritization有以下問(wèn)題:1.那些TD-error很小的transition 將很長(zhǎng)時(shí)間不被replay.2.對(duì)noise spikes 敏感。最終算法會(huì)集中在一個(gè)小子集里面。初始TD-error很高的transitions會(huì)經(jīng)常被重放,缺失多樣性會(huì)導(dǎo)致over-fitting。作者提出了一種介于均勻隨機(jī)采樣和貪心優(yōu)先之間的隨機(jī)采樣方法,transition的采樣概率為:
其中,是
的優(yōu)先級(jí)。這樣,即使是最低優(yōu)先級(jí)的transition被采樣到的概率也不為0.
的設(shè)定有多種方法。
第一種是成比例優(yōu)先。.
用來(lái)防止transitions的TD-error為0后不再被回放。具體實(shí)現(xiàn)中,使用名為sum-tree的樹(shù)型數(shù)據(jù)結(jié)構(gòu)。它的每個(gè)葉子節(jié)點(diǎn)保存了 transition priorities,父節(jié)點(diǎn)存儲(chǔ)了孩子節(jié)點(diǎn)值之和,這樣,頭節(jié)點(diǎn)的值就是所有葉子結(jié)點(diǎn)的總和
。采樣一個(gè)大小為
的minibatch時(shí),range
被均分為
個(gè)ranges,每個(gè)ranges均勻采樣,這樣,各種
的transitions都有被采樣到。
第二種是。
是transition
根據(jù)它的
在replay memory中的rank。這種方法對(duì)異常值更加不敏感,因此更為魯棒。作者最終使用了基于array的二叉堆實(shí)現(xiàn)的優(yōu)先隊(duì)列來(lái)存儲(chǔ)transitions。
-
Importance Sampling
Prioritized replay 改變了分布,因此引入了bias。為了消除bias,作者使用了importance-sampling(IS) weights:
Q-learning更新中的替換為
,并出于stability的原因,用
將權(quán)值正則化。
Prioritized Sweeping
Dueling Network Architectures for Deep Reinforcement Learning
Wang et al. (2016b)在網(wǎng)絡(luò)結(jié)構(gòu)上做了創(chuàng)新,這種新的網(wǎng)絡(luò)結(jié)構(gòu)能夠更容易的與當(dāng)前和未來(lái)的RL算法相結(jié)合。
作者引入了advantage function。
關(guān)注的是state的值,
關(guān)注的是這個(gè)狀態(tài)下,動(dòng)作的重要性。
估計(jì)的是在這一狀態(tài)下選擇某一動(dòng)作的價(jià)值。因?yàn)樵谀承顟B(tài)下,無(wú)論做什么動(dòng)作對(duì)下一個(gè)狀態(tài)都沒(méi)有太大影響,而這種方法,可以單獨(dú)學(xué)習(xí)狀態(tài)本身的價(jià)值。
如上圖,作者將原來(lái)的DQN最后的一條全聯(lián)接層一分為二,一個(gè)用來(lái)估計(jì)value functions,一個(gè)用來(lái)估計(jì)advantage function。最后將兩條流聚合成輸出Q function。
相應(yīng)的Q function變?yōu)椋?br>
和
是兩個(gè)全聯(lián)接層分支的參數(shù), 那為什么要減去
呢。這是因?yàn)榻o定一個(gè)Q,我們無(wú)法給出一個(gè)唯一的V和A(擁有兩個(gè)變量的一個(gè)方程式,當(dāng)然有無(wú)窮多解)。為了解決這一問(wèn)題,作者強(qiáng)制讓被選擇的動(dòng)作的advantage為0,即
。
這樣,
在實(shí)際應(yīng)用中,作者用均值代替了最大值操作,即:
這樣,可以縮小 Q 值的范圍,去除多余的自由度,且期望值為0,提高算法穩(wěn)定性
Distributional value function
強(qiáng)化學(xué)習(xí)一般是對(duì)智體收到的隨機(jī)return的期望進(jìn)行建模,但實(shí)際上,這些隨機(jī)return的分布——value distribution是非常有用的。
It’s already evident from our empirical results that the distributional perspective leads to better, more stable reinforcement learning
Bellemare et al. (2017)提出貝爾曼方程的一個(gè)變體,實(shí)際上可以預(yù)測(cè)所有可能的結(jié)果,而不用對(duì)它們進(jìn)行平均 —— distributional Bellman’s equation
具體算法如下:
網(wǎng)絡(luò)結(jié)構(gòu)上的改變:
傳統(tǒng)的DQN最后一層全聯(lián)接層輸出的是維向量,表示當(dāng)前狀態(tài)下,每一個(gè)動(dòng)作的價(jià)值的估計(jì)。Categorical DQN 輸出的是
維,表示的是表示的是 N 個(gè)動(dòng)作在 M 個(gè)價(jià)值分布的支撐上的概率。
def _network_template(self, state):
"""Builds a convolutional network that outputs Q-value distributions.
Args:
state: `tf.Tensor`, contains the agent's current state.
Returns:
net: _network_type object containing the tensors output by the network.
"""
weights_initializer = slim.variance_scaling_initializer(
factor=1.0 / np.sqrt(3.0), mode='FAN_IN', uniform=True)
net = tf.cast(state, tf.float32)
net = tf.div(net, 255.)
net = slim.conv2d(
net, 32, [8, 8], stride=4, weights_initializer=weights_initializer)
net = slim.conv2d(
net, 64, [4, 4], stride=2, weights_initializer=weights_initializer)
net = slim.conv2d(
net, 64, [3, 3], stride=1, weights_initializer=weights_initializer)
net = slim.flatten(net)
net = slim.fully_connected(
net, 512, weights_initializer=weights_initializer)
net = slim.fully_connected(
net,
self.num_actions * self._num_atoms,
activation_fn=None,
weights_initializer=weights_initializer)
logits = tf.reshape(net, [-1, self.num_actions, self._num_atoms])
probabilities = tf.contrib.layers.softmax(logits)
q_values = tf.reduce_sum(self._support * probabilities, axis=2)
return self._get_network_type()(q_values, logits, probabilities)
orz其實(shí)這篇論文我看了代碼才懂了算法流程,但是并不能完全理解,有大佬可以解釋一哈嗎??
未完待續(xù)
A3C
asynchronous advantage actor-critic (A3C) [Mnih et al.(2016)] (https://arxiv.org/pdf/1602.01783.pdf)并不屬于value-based算法,這里提到它一是因?yàn)镈eepMind 在投給AAAI 2018的論文Rainbow: Combining Improvements in Deep Reinforcement Learning
中使用了A3C中的multi-step learning。
論文中最為出彩的地方在于:在多個(gè)環(huán)境副本上并行地異步執(zhí)行多個(gè)agent,不同的agent采用不同的策略,經(jīng)歷不同的state,有不同的transition,不但有助于探索,加快速度,而且使得時(shí)間上數(shù)據(jù)的相關(guān)性很小,起到穩(wěn)定學(xué)習(xí)過(guò)程的作用。因此不需要使用又費(fèi)計(jì)算又費(fèi)資源的experience replay,這樣就可以使用on-policy RL 方法。
算法有一個(gè)global network,和若干個(gè)agent,大概的步驟過(guò)程是:
1.agent 將global network的參數(shù)pull過(guò)來(lái)
2.agent與環(huán)境互動(dòng)n-step或遇到terminal state 提前終止
3.agent計(jì)算loss,得到梯度
4.把梯度 push 給global network,用梯度更新global network的參數(shù),然后reset自己,回到第一步
Noisy DQN
Fortunato et al. (2018)提出在參數(shù)中加入噪聲,代替-greedy,增加模型的探索能力。
Noisynet
舉個(gè)例子,設(shè)神經(jīng)網(wǎng)絡(luò)的一個(gè)linear layer 為:
那么加入噪聲后為:
是均值為0的噪聲,
和
都是可學(xué)習(xí)的參數(shù)。設(shè)
為
有兩種噪聲產(chǎn)生方法:
a.Independent Gaussian noise:為每一個(gè)權(quán)值和偏差都設(shè)定一個(gè)獨(dú)立噪聲。在這種情況下,若輸入x是q維、輸出y是p維,那么就需要p*q+q個(gè),
b. Factorised Gaussian noise:通過(guò)將分解,大大減少了需要的噪聲數(shù)量,只需要q+p個(gè)
即可。
和
的計(jì)算公式為:
這里,作者將設(shè)為
NoisyNet 的loss function 為
梯度為
作者使用蒙特卡洛方法近似上面的梯度,得到
參考資料:
增強(qiáng)學(xué)習(xí)——周莫煩
論文閱讀之:PRIORITIZED EXPERIENCE REPLAY
DQN從入門到放棄
reinforcement learning:an introduction
deep reinforcement learning:An overview
spinning up
DeepMind為明年的AAAI,準(zhǔn)備了一份各種DQN的混血
Going beyond average for reinforcement learning
Distributional Reinforcement Learning
深度強(qiáng)化學(xué)習(xí)系列之(8)----- A3C算法原理及Tensorflow實(shí)現(xiàn)
一文讀懂 深度強(qiáng)化學(xué)習(xí)算法 A3C (Actor-Critic Algorithm