日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

dqn系列梳理_系列论文阅读——DQN及其改进

發(fā)布時間:2025/3/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dqn系列梳理_系列论文阅读——DQN及其改进 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

DQN

作為DRL的開山之作,DeepMind的DQN可以說是每一個入坑深度增強(qiáng)學(xué)習(xí)的同學(xué)必了解的第一個算法了吧。先前,將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ù)據(jù)分布會變化。DQN通過Q-Learning使用reward來構(gòu)造標(biāo)簽、使用經(jīng)驗(yàn)池等方法解決了這些問題。

基于Q-learning 確定Loss Function

Q-learning 更新公式為:

DQN 的 loss function:

DQN使用隨機(jī)梯度下降更新參數(shù),為啥要把targetnet單獨(dú)拎出來呢,后續(xù)會說的。

experience replay

DQN 使用exprience replay解決instablity的問題,把每個時間步agent與環(huán)境交互得到的轉(zhuǎn)移樣本

存儲在buffer中,并被隨機(jī)抽取。通過這種方式,去除了數(shù)據(jù)之前的相關(guān)性,并且緩和了數(shù)據(jù)分布的差異。

TargetNet

為了減少

和 目標(biāo)

之間的相關(guān)性,從而提高穩(wěn)定性.2015年版的DQN加入了另一個網(wǎng)絡(luò)——

作為targetnet,它和

參數(shù)分離,每次參數(shù)更新只更新

,而

的參數(shù)

保持不變,并且周期性的將

的參數(shù)復(fù)制給

。此時,loss function變?yōu)?#xff1a;

DQN算法偽代碼

double DQN

在標(biāo)準(zhǔn)的Q-learning,和DQN中,參數(shù)是這么更新的:

max操作使得估計(jì)的值函數(shù)比值函數(shù)的真實(shí)值大。如果是均勻的過估計(jì),找到的最優(yōu)策略是不會變的,不會對我們的目標(biāo)造成影響。但實(shí)際上,過估計(jì)的誤差在不同的states和actions下是不同的,這就會影響到我們找到最佳策略了。為了減少overestimation,van Hasselt et al.(2016)提出Double DQN(D-DQN)。利用DQN中的target network,將selection 和 evelation 解藕。使用Behavior Network選擇出value最大的action,用target network來估計(jì)它的值

被更改為:

PS 論文中有對兩個數(shù)學(xué)定理的詳細(xì)證明,感興趣的同學(xué)可以看哦

Prioritized Experience Replay

在前面的方法中,experience replay都是均勻隨機(jī)采樣,但實(shí)際上不同樣本的重要性顯然是不同的。舉個例子,在強(qiáng)化學(xué)習(xí)初期,replay memory中,除了直接和目標(biāo)相關(guān)的state-action pair 有正值,大部分的value都為0,大量的從zero-value state 到 另一個 zero-value state 的transitions更新導(dǎo)致很低效。Moore & Atkeson, 1993 提出Prioritized Sweeping,優(yōu)先選擇value改變了的state。具體算法如下:

prioritized sweeping

但Prioritized sweeping 主要用在model based planning。Schaul et al. (2016)提出了Prioritized Experience Replay。

Prioritizing TD-Error

用 TD-error來規(guī)定優(yōu)先學(xué)習(xí)的程度. 如果

越大, 就代表我們的預(yù)測精度還有很多上升空間, 那么這個樣本就越需要被學(xué)習(xí), 也就是優(yōu)先級越高。通過存儲transition,及其每次回放更新得到的最新的TD-error,將TD-error絕對值最大的transition從 memory 中進(jìn)行回放。然后對該transition進(jìn)行Q-learning的更新,并根據(jù)TD-error,更新其優(yōu)先級。而對于沒有已知TD-error的新進(jìn)入memory的transition,將其放到最大優(yōu)先級的行列,以確保所有的經(jīng)驗(yàn)至少被回放一次。

Stochastic Prioritization

greedy TD-error prioritization有以下問題:1.那些TD-error很小的transition 將很長時間不被replay.2.對noise spikes 敏感。最終算法會集中在一個小子集里面。初始TD-error很高的transitions會經(jīng)常被重放,缺失多樣性會導(dǎo)致over-fitting。作者提出了一種介于均勻隨機(jī)采樣和貪心優(yōu)先之間的隨機(jī)采樣方法,transition

的采樣概率為:

其中,

的優(yōu)先級。這樣,即使是最低優(yōu)先級的transition被采樣到的概率也不為0.

的設(shè)定有多種方法。

第一種是成比例優(yōu)先。

.

用來防止transitions的TD-error為0后不再被回放。具體實(shí)現(xiàn)中,使用名為sum-tree的樹型數(shù)據(jù)結(jié)構(gòu)。它的每個葉子節(jié)點(diǎn)保存了 transition priorities,父節(jié)點(diǎn)存儲了孩子節(jié)點(diǎn)值之和,這樣,頭節(jié)點(diǎn)的值就是所有葉子結(jié)點(diǎn)的總和

。采樣一個大小為

的minibatch時,range

被均分為

個ranges,每個ranges均勻采樣,這樣,各種

的transitions都有被采樣到。

第二種是

是transition

根據(jù)它的

在replay memory中的rank。這種方法對異常值更加不敏感,因此更為魯棒。作者最終使用了基于array的二叉堆實(shí)現(xiàn)的優(yōu)先隊(duì)列來存儲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)前和未來的RL算法相結(jié)合。

作者引入了advantage function。

關(guān)注的是state的值,

關(guān)注的是這個狀態(tài)下,動作的重要性。

估計(jì)的是在這一狀態(tài)下選擇某一動作的價(jià)值。因?yàn)樵谀承顟B(tài)下,無論做什么動作對下一個狀態(tài)都沒有太大影響,而這種方法,可以單獨(dú)學(xué)習(xí)狀態(tài)本身的價(jià)值。

dueling network architecture.png

如上圖,作者將原來的DQN最后的一條全聯(lián)接層一分為二,一個用來估計(jì)value functions,一個用來估計(jì)advantage function。最后將兩條流聚合成輸出Q function。

相應(yīng)的Q function變?yōu)?#xff1a;

是兩個全聯(lián)接層分支的參數(shù), 那為什么要減去

呢。這是因?yàn)榻o定一個Q,我們無法給出一個唯一的V和A(擁有兩個變量的一個方程式,當(dāng)然有無窮多解)。為了解決這一問題,作者強(qiáng)制讓被選擇的動作的advantage為0,即

這樣,

在實(shí)際應(yīng)用中,作者用均值代替了最大值操作,即:

這樣,可以縮小 Q 值的范圍,去除多余的自由度,且期望值為0,提高算法穩(wěn)定性

Distributional value function

強(qiáng)化學(xué)習(xí)一般是對智體收到的隨機(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)提出貝爾曼方程的一個變體,實(shí)際上可以預(yù)測所有可能的結(jié)果,而不用對它們進(jìn)行平均 —— distributional Bellman’s equation

具體算法如下:

categorical algorithm

網(wǎng)絡(luò)結(jié)構(gòu)上的改變:

傳統(tǒng)的DQN最后一層全聯(lián)接層輸出的是

維向量,表示當(dāng)前狀態(tài)下,每一個動作的價(jià)值的估計(jì)。Categorical DQN 輸出的是

維,表示的是表示的是 N 個動作在 M 個價(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。

論文中最為出彩的地方在于:在多個環(huán)境副本上并行地異步執(zhí)行多個agent,不同的agent采用不同的策略,經(jīng)歷不同的state,有不同的transition,不但有助于探索,加快速度,而且使得時間上數(shù)據(jù)的相關(guān)性很小,起到穩(wěn)定學(xué)習(xí)過程的作用。因此不需要使用又費(fèi)計(jì)算又費(fèi)資源的experience replay,這樣就可以使用on-policy RL 方法。

算法有一個global network,和若干個agent,大概的步驟過程是:

1.agent 將global network的參數(shù)pull過來

2.agent與環(huán)境互動n-step或遇到terminal state 提前終止

3.agent計(jì)算loss,得到梯度

4.把梯度 push 給global network,用梯度更新global network的參數(shù),然后reset自己,回到第一步

A3C, each actor-learner thread, based on Mnih et al. (2016)

Noisy DQN

Fortunato et al. (2018)提出在參數(shù)中加入噪聲,代替

-greedy,增加模型的探索能力。

Noisynet

舉個例子,設(shè)神經(jīng)網(wǎng)絡(luò)的一個linear layer 為:

那么加入噪聲后為:

是均值為0的噪聲,

都是可學(xué)習(xí)的參數(shù)。設(shè)

有兩種噪聲產(chǎn)生方法:

a.Independent Gaussian noise:為每一個權(quán)值和偏差都設(shè)定一個獨(dú)立噪聲。在這種情況下,若輸入x是q維、輸出y是p維,那么就需要p*q+q個

b. Factorised Gaussian noise:通過將

分解,大大減少了需要的噪聲數(shù)量,只需要q+p個

即可。

的計(jì)算公式為:

這里,作者將

設(shè)為

NoisyNet 的loss function 為

梯度為

作者使用蒙特卡洛方法近似上面的梯度,得到

總結(jié)

以上是生活随笔為你收集整理的dqn系列梳理_系列论文阅读——DQN及其改进的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。