日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

DQN

作為DRL的開山之作,DeepMind的DQN可以說是每一個入坑深度增強學習的同學必了解的第一個算法了吧。先前,將RL和DL結合存在以下挑戰:1.deep learning算法需要大量的labeled data,RL學到的reward 大都是稀疏、帶噪聲并且有延遲的(延遲是指action 和導致的reward之間);2.DL假設樣本獨立;而RL前后state狀態相關;3.DL假設分布固定,而RL在學習新的行為時,數據分布會變化。DQN通過Q-Learning使用reward來構造標簽、使用經驗池等方法解決了這些問題。

基于Q-learning 確定Loss Function

Q-learning 更新公式為:

DQN 的 loss function:

DQN使用隨機梯度下降更新參數,為啥要把targetnet單獨拎出來呢,后續會說的。

experience replay

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

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

TargetNet

為了減少

和 目標

之間的相關性,從而提高穩定性.2015年版的DQN加入了另一個網絡——

作為targetnet,它和

參數分離,每次參數更新只更新

,而

的參數

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

的參數復制給

。此時,loss function變為:

DQN算法偽代碼

double DQN

在標準的Q-learning,和DQN中,參數是這么更新的:

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

被更改為:

PS 論文中有對兩個數學定理的詳細證明,感興趣的同學可以看哦

Prioritized Experience Replay

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

prioritized sweeping

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

Prioritizing TD-Error

用 TD-error來規定優先學習的程度. 如果

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

Stochastic Prioritization

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

的采樣概率為:

其中,

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

的設定有多種方法。

第一種是成比例優先。

.

用來防止transitions的TD-error為0后不再被回放。具體實現中,使用名為sum-tree的樹型數據結構。它的每個葉子節點保存了 transition priorities,父節點存儲了孩子節點值之和,這樣,頭節點的值就是所有葉子結點的總和

。采樣一個大小為

的minibatch時,range

被均分為

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

的transitions都有被采樣到。

第二種是

是transition

根據它的

在replay memory中的rank。這種方法對異常值更加不敏感,因此更為魯棒。作者最終使用了基于array的二叉堆實現的優先隊列來存儲transitions。

Importance Sampling

Prioritized replay 改變了分布,因此引入了bias。為了消除bias,作者使用了importance-sampling(IS) weights:

Q-learning更新中的

替換為

,并出于stability的原因,用

將權值正則化。

Prioritized Sweeping

Dueling Network Architectures for Deep Reinforcement Learning

Wang et al. (2016b)在網絡結構上做了創新,這種新的網絡結構能夠更容易的與當前和未來的RL算法相結合。

作者引入了advantage function。

關注的是state的值,

關注的是這個狀態下,動作的重要性。

估計的是在這一狀態下選擇某一動作的價值。因為在某些狀態下,無論做什么動作對下一個狀態都沒有太大影響,而這種方法,可以單獨學習狀態本身的價值。

dueling network architecture.png

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

相應的Q function變為:

是兩個全聯接層分支的參數, 那為什么要減去

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

這樣,

在實際應用中,作者用均值代替了最大值操作,即:

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

Distributional value function

強化學習一般是對智體收到的隨機return的期望進行建模,但實際上,這些隨機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)提出貝爾曼方程的一個變體,實際上可以預測所有可能的結果,而不用對它們進行平均 —— distributional Bellman’s equation

具體算法如下:

categorical algorithm

網絡結構上的改變:

傳統的DQN最后一層全聯接層輸出的是

維向量,表示當前狀態下,每一個動作的價值的估計。Categorical DQN 輸出的是

維,表示的是表示的是 N 個動作在 M 個價值分布的支撐上的概率。

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其實這篇論文我看了代碼才懂了算法流程,但是并不能完全理解,有大佬可以解釋一哈嗎??

未完待續

A3C

asynchronous advantage actor-critic (A3C) [Mnih et al.(2016)] (https://arxiv.org/pdf/1602.01783.pdf)并不屬于value-based算法,這里提到它一是因為DeepMind 在投給AAAI 2018的論文Rainbow: Combining Improvements in Deep Reinforcement Learning中使用了A3C中的multi-step learning。

論文中最為出彩的地方在于:在多個環境副本上并行地異步執行多個agent,不同的agent采用不同的策略,經歷不同的state,有不同的transition,不但有助于探索,加快速度,而且使得時間上數據的相關性很小,起到穩定學習過程的作用。因此不需要使用又費計算又費資源的experience replay,這樣就可以使用on-policy RL 方法。

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

1.agent 將global network的參數pull過來

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

3.agent計算loss,得到梯度

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

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

Noisy DQN

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

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

Noisynet

舉個例子,設神經網絡的一個linear layer 為:

那么加入噪聲后為:

是均值為0的噪聲,

都是可學習的參數。設

有兩種噪聲產生方法:

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

b. Factorised Gaussian noise:通過將

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

即可。

的計算公式為:

這里,作者將

設為

NoisyNet 的loss function 為

梯度為

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。