DQN算法

DQN算法

教程鏈接

DataWhale強化學習課程JoyRL

https://johnjim0816.com/joyrl-book/#/ch7/main

DQN算法

DQN(Deep Q-Network) 主要創新點在于將Q-learning算法中的Q表記錄動作價值函數轉為引入深度神經網絡來近似動作價值函數 Q ( s , a ) Q(s,a) Q(s,a),從而能夠處理連續狀態情況,即較高維度的狀態空間。

因此,在Q表中我們描述狀態空間的時候一般用的是狀態個數,而在神經網絡中我們用的是狀態維度

當然,神經網絡也存在缺點,即雖然它的輸入可以是連續的,但是輸出只能是離散的,即只能適用于離散的動作空間。如果要處理連續的動作空間,需要考慮策略梯度方法。

本質上來說強化學習和深度學習解決的問題是完全不同的,前者用于解決序列決策問題,后者用于解決靜態問題例如回歸、分類、識別等等。

  • 經驗回放

狀態轉移元組 ( s t , a t , s t + 1 , r t + 1 ) (s_t, a_t, s_{t+1}, r_{t + 1}) (st?,at?,st+1?,rt+1?)強化學習是與環境實時交互得到樣本然后進行訓練的,這個樣本一般包括當前的狀態 s t s_t st?、當前動作 a t a_t at?、下一時刻的狀態 s t + 1 s_{t+1} st+1? 、獎勵 r t + 1 r_{t+1} rt+1? 以及終止狀態的標志 d o n e done done.

這樣做存在的問題?

  1. 在 Q-learning 算法中,每次交互得到一個樣本之后,就立馬拿去更新模型了。首先每次用單個樣本去迭代網絡參數很容易導致訓練的不穩定,從而影響模型的收斂。
  2. 每次迭代的樣本都是從環境中實時交互得到的,這樣的樣本是有關聯的,而梯度下降法是基于一個假設的,即訓練集中的樣本是獨立同分布的。
  3. 直接將 Q-learning 算法訓練的方式來更新 DQN 的模型相當于是最原始的梯度下降方式,距離目前最成熟的小批量梯度下降方式還有一定的差距。

因此DQN的訓練過程中,會把每次通過環境交互的樣本存儲在一個經驗回放中,然后每次從經驗吃中隨機抽取一批樣本來訓練網絡。

首先每次迭代的樣本都是從經驗池中隨機抽取的,因此每次迭代的樣本都是獨立同分布的,這樣就滿足了梯度下降法的假設。其次,經驗池中的樣本是從環境中實時交互得到的,因此每次迭代的樣本都是相互關聯的,這樣的方式相當于是把每次迭代的樣本都進行了一個打亂的操作,這樣也能夠有效地避免訓練的不穩定性。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 目標網絡

其次為了保障訓練的穩定,避免Q值的估計發散。考慮使用一個每隔若干步才更新的目標網絡。目標網絡和當前網絡結構都是相同的,都用于近似 Q值,在實踐中每隔若干步才把每步更新的當前網絡參數復制給目標網絡。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

練習題

  1. 相比于 Q ? l e a r n i n g Q-learning Q?learning算法, D Q N DQN DQN算法做了哪些改進?

DQN使用了深度神經網絡來近似動作價值函數,解決了Q-learning使用表格存儲Q值使得狀態空間過大或者狀態連續的問題。

  1. 為什么要在 D Q N DQN DQN算法中引入 ε ? greedy \varepsilon-\text{greedy} ε?greedy策略?

引入策略是為了平衡探索與利用的過程,如果智能體只進行利用,那么它可能會陷入局部最優,而忽略了更好的動作或狀態;如果智能體只進行探索,那么它可能會浪費時間和資源,而無法收斂到最優的策略。因此,智能體需要在探索和利用之間進行權衡,以達到最佳的學習效果。

  1. D Q N DQN DQN算法為什么要多加一個目標網絡?

目標網絡的引入是為了增加DQN算法的穩定性和收斂性。DQN算法的核心是用深度神經網絡來近似Q函數,即狀態-動作值函數。如果我們只用一個神經網絡來計算估計值和目標值,那么每次更新參數后,目標值也會隨之改變,這樣就會導致目標值不穩定,甚至發生震蕩,從而影響神經網絡的收斂。考慮使用一個每隔若干步才更新的目標網絡。目標網絡和當前網絡結構都是相同的,都用于近似 Q值。

  1. 經驗回放的作用?

深度神經網絡訓練要求數據符合獨立同分布,經驗回放的作用是消除智能體收集經驗時相鄰的兩個四元組之間的相關性,使得每次從數組里面隨機抽取的四元組都是獨立的,從而提高DQN的訓練效果。

DQN算法進階

介紹一些基于DQN算法的進階算法,例如 D o u b l e D Q N 、 D u e l i n g D Q N Double DQN、Dueling DQN DoubleDQNDuelingDQN這些從網絡模型層面改進以及 P E R D Q N PER DQN PERDQN從經驗回放的角度改進。

  • Double DQN算法。

主要貢獻在于通過引入兩個網絡用于解決Q值過估計問題.

KaTeX parse error: \tag works only in display equations

其中 y t = r t + γ max ? a Q θ ^ ( s t + 1 , a t + 1 ) y_t = r_t+\gamma\max _{a}Q_{\hat{\theta}}(s_{t+1},a_{t+1}) yt?=rt?+γamax?Qθ^?(st+1?,at+1?)是估計值,這個意思就是直接拿目標網絡中各個動作對應的最大的 Q值來當作估計值,這樣一來就會存在過估計的問題。

因此, D o u b l e D Q N Double DQN DoubleDQN的思路就是現在當前網絡中找出最大Q值對應的動作,然后再將這個動作代入到目標網絡中計算Q值。

KaTeX parse error: \tag works only in display equations

然后將這個找出來的動作代入到目標網絡里面去計算目標的 Q 值,進而計算估計值,

KaTeX parse error: \tag works only in display equations

這樣做相當于是把動作選擇和動作評估這兩個過程分離開來,從而減輕了過估計問題。即Double DQN 算法中大臣會根據自己的判斷將自己認為最優的情報匯報給皇帝,做到了情報的精簡與較高質量。

  • Dueling DQN算法

Dueling DQN算法是通過優化神經網絡的結構來優化算法的。DQN算法使用的網絡架構是一個全連接網絡,包含一個輸入層、隱藏層以及輸出層。DuelingDQN則是在輸出層之前分流出價值層(估計每個狀態的價值)與優勢層(用于估計每個動作帶來的優勢)。

[外鏈圖片轉存中…(img-COZ6YXfc-1700835492466)]

去掉這里的價值層即優勢層就是普通的 Q 網絡了,另外會對優勢層做一個中心化處理,即減掉均值。

  • PER DQN算法

PER DQN算法進一步優化經驗回放的設計從而提高模型的收斂能力與魯棒性。會在采樣過程中賦予經驗回放中樣本的優先級。優先級的依據來自于TD誤差。廣義的定義是值函數(包括狀態價值函數和動作價值函數)的估計值與實際值之差,在 DQN 算法中就是目標網絡計算的 Q值和策略網絡(當前網絡)計算的 Q值之差,也就是 DQN 網絡中損失函數的主要構成部分。

TD誤差越大,損失函數的值也越大,對于反向傳播的作用也就越大。 這樣一來如果 TD 誤差較大的樣本更容易被采到的話,那么算法也會更加容易收斂。

練習題

  1. DQN算法為什么會產生Q值的過估計問題?

DQN是直接拿目標網絡中各個動作對應的最大的 Q值來當作估計值。但目標值仍然依賴于神經網絡的輸出,而神經網絡的輸出可能存在偏差和誤差。特別是,當我們用**maxa′Q(s′,a′)**來選擇下一個狀態的最優動作時,我們可能會選擇一個Q值被高估的動作,而不是真正的最優動作。這樣,我們就會用一個高估的Q值來更新當前狀態的Q值,從而導致Q值的過估計

  1. 同樣是提高探索,Noisy DQN與 ε ? greedy \varepsilon-\text{greedy} ε?greedy策略有什么區別

Noisy DQN是在神經網絡的權重上添加參數化的噪音,從而使Q函數的輸出具有隨機性,而ε-greedy策略是在選擇動作時以一定的概率隨機選擇一個動作,而不是最優的動作。同時Noisy DQN的探索是基于權重的,可以影響所有的動作的選擇,而ε-greedy策略的探索是基于動作的,只影響單個的動作的選擇。因此,Noisy DQN的探索更具有全局性和多樣性,而ε-greedy策略的探索更具有局部性和隨機性。
sy DQN的探索是基于權重的,可以影響所有的動作的選擇,而ε-greedy策略的探索是基于動作的,只影響單個的動作的選擇。因此,Noisy DQN的探索更具有全局性和多樣性,而ε-greedy策略的探索更具有局部性和隨機性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167656.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C現代方法(第23章)筆記——庫對數值和字符數據的支持

文章目錄 第23章 庫對數值和字符數據的支持23.1 <float.h>: 浮點類型的特性23.2 <limits.h>: 整數類型的大小23.3 <math.h>: 數學計算(C89)23.3.1 錯誤23.3.2 三角函數23.3.3 雙曲函數23.3.4 指數函數和對數函數23.3.5 冪函數23.3.6 就近舍入、絕對值函數和取…

設計模式——行為型模式(一)

行為型模式用于描述程序在運行時復雜的流程控制,即描述多個類或對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務,它涉及算法與對象間職責的分配。 行為型模式分為類行為模式和對象行為模式,前者采用繼承機制來在類間分派行為,后者采用組合或聚合在對象間分配行…

醫院預約管理系統開發 代碼展示 九價疫苗接種預約功能(含小程序源代碼)

基于微信小程序的疫苗預約系統讓疫苗信息&#xff0c;疫苗預約信息等相關信息集中在后臺讓管理員管理&#xff0c;讓用戶在小程序端預約疫苗&#xff0c;查看疫苗預約信息&#xff0c;該系統讓信息管理變得高效&#xff0c;也讓用戶預約疫苗&#xff0c;查看疫苗預約等信息變得…

MySQL 優化器 Index Condition Pushdown下推(ICP)

ICP 測試 準備數據 CREATE TABLE icp (employee_id int(6) NOT NULL AUTO_INCREMENT,first_name varchar(20) DEFAULT NULL,last_name varchar(25) DEFAULT NULL,email varchar(25) DEFAULT NULL,phone_number varchar(20) DEFAULT NULL,PRIMARY KEY (employee_id) );insert i…

額溫槍方案,MS8551,MS8601;MS1112,MS1100

鑒于測溫的傳感器信號非常微弱&#xff0c;需要用高精度、低噪聲的運算放大器和高精度、低功耗的ADC。 運算放大器可供選擇&#xff1a;MS8551 or MS8601&#xff0c;具有低失調&#xff08;1uV&#xff09;、低噪&#xff08;22nV√Hz &#xff09;、封裝小等優點&#xff0c…

Redis并發問題解決方案

目錄 前言 1.分布式鎖 1.基于單個節點 2.基于多個節點 3.watch(樂觀鎖) 2.原子操作 1.單命令操作 2.Lua 腳本(多命令操作) 3.事務 1.執行步驟 2.錯誤處理 3.崩潰處理 總結 前言 在多個客戶端并發訪問Redis的時候&#xff0c;雖然Redis是單線程執行指令&#xff…

【間歇振蕩器2片555時基仿真】2022-9-24

緣由multisim出現這個應該怎么解決吖&#xff0c;急需解決-嵌入式-CSDN問答 輸出一定要有電阻分壓才能前后連接控制否則一定報錯。

Python自動化生成漂亮的測試報告

&#x1f4e2;專注于分享軟件測試干貨內容&#xff0c;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;交流討論&#xff1a;歡迎加入我們一起學習&#xff01;&#x1f4e2;資源分享&#xff1a;耗時200小時精選的「軟件測試」資…

五種多目標優化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微電網多目標優化調度(MATLAB代碼)

一、多目標優化算法簡介 &#xff08;1&#xff09;多目標水母搜索算法MOJS 多目標優化算法&#xff1a;多目標水母搜索算法MOJS&#xff08;提供MATLAB代碼&#xff09;_水母算法-CSDN博客 &#xff08;2&#xff09;NSGA3 NSGA-III求解微電網多目標優化調度&#xff08;M…

acwing算法基礎之數學知識--求卡特蘭數

目錄 1 基礎知識2 模板3 工程化 1 基礎知識 題目&#xff1a;給定n個0和n個1&#xff0c;它們將按照某種順序排成長度為2n的序列&#xff0c;求它們能排成的所有序列中&#xff0c;能夠滿足任意前綴序列中0的個數都不少于1的個數的序列有多少個&#xff1f; 輸出的答案對 1 0 …

【云原生 Prometheus篇】Prometheus的動態服務發現機制與認證配置

目錄 一、Prometheus服務發現的方式1.1 基于文件的服務發現1.2 基于consul的服務發現1.3 基于 Kubernetes API 的服務發現1.3.1 簡介1.3.2 基于Kurbernetes發現機制的部分配置參數 二、實例一&#xff1a;部署基于文件的服務發現2.1 創建用于服務發現的文件2.2 修改Prometheus的…

yo!這里是c++11重點新增特性介紹

目錄 前言 列表初始化 { }初始化 initializer_list類 類型推導 auto decltype 范圍for 右值引用與移動語義 左值引用和右值引用 移動語義 1.移動構造 2.移動賦值 3.stl容器相關更新 右值引用和萬能引用 完美轉發 關鍵字 default delete final和override …

西米支付:簡單介紹一下支付公司的分賬功能體系

隨著互聯網的普及和電子商務的快速發展&#xff0c;支付已經成為人們日常生活的重要組成部分。支付公司作為第三方支付平臺&#xff0c;為消費者和商家提供了便捷、安全的支付方式。而在支付領域中&#xff0c;分賬功能是一個非常重要的功能&#xff0c;它可以幫助企業實現資金…

SpringBoot——攔截器

優質博文&#xff1a;IT-BLOG-CN 一、登錄時可能會出現重復提交問題。我們可以通過重定向解決此問題。例如&#xff1a;用戶提交的請求為&#xff1a;/user/login&#xff0c;通過redirect&#xff1a;重定向至 main.html請求。 PostMapping("/user/login") public …

C語言——從終端(鍵盤)將 5 個整數輸入到數組 a 中,然后將 a 逆序復制到數組 b 中,并輸出 b 中 各元素的值。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int a[5];int b[5];printf("輸入5個整數&#xff1a;\n");for(i0;i<5;i){scanf("%d",&a[i]);}printf("數組b的元素值為&#xff1a;\n");for(i4;i>0;i--…

Windows任務管理器內存性能界面各個參數含義

任務管理器的內存性能界面提供了一些關鍵參數&#xff0c;這些參數可以幫助你了解系統中內存的使用情況。以下是一些常見的參數及其含義&#xff1a; 已提交&#xff08;Committed&#xff09;&#xff1a; 表示已分配的物理內存和虛擬內存的總和。已提交的內存包括當前正在使…

Javascript每天一道算法題(十五)——輪轉數組_中等(一行解決輪轉數組)

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——while遍歷&#xff08;較為復雜&#xff0c;不推薦&#xff09;&#xff08;2&#xff09;方法2&#xff08;直接截取后插入&#xff0c;推薦&#xff09;&#xff08;3&#xff09;方法3——優化方法2&a…

jQuery_03 dom對象和jQuery對象的互相轉換

dom對象和jQuery對象 dom對象 jQuery對象 在一個文件中同時存在兩種對象 dom對象: 通過js中的document對象獲取的對象 或者創建的對象 jQuery對象: 通過jQuery中的函數獲取的對象。 為什么使用dom或jQuery對象呢&#xff1f; 目的是 要使用dom對象的函數或者屬性 以及呢 要…

python -opencv 輪廓檢測(多邊形,外接矩形,外接圓)

python -opencv 輪廓檢測(多邊形&#xff0c;外接矩形&#xff0c;外接圓) 邊緣檢測步驟: 第一步&#xff1a;讀取圖像為灰度圖 第二步&#xff1a;進行二值化處理 第三步&#xff1a;使用cv2.findContours對二值化圖像提取輪廓 第三步&#xff1a;將輪廓繪制到圖中 代碼如下…

Hibernate的三種狀態

1.瞬時狀態(Transient) 通過new創建對象后&#xff0c;對象并沒有立刻持久化&#xff0c;他并未對數據庫中的數據有任何的關聯&#xff0c;此時java對象的狀態為瞬時狀態&#xff0c;Session對于瞬時狀態的java對象是一無所知的&#xff0c;當對象不再被其他對象引用時&#xf…