主頁 >  其他 > Value-Based Reinforcement Learning-DQN

Value-Based Reinforcement Learning-DQN

2021-08-14 06:50:25 其他

強化學習

這一章會講DQN演算法,并且用TD演算法來訓練DQN,

Value-Based Reinforcement Learning-DQN

  • 強化學習
  • 前言
  • 一、Action-Value Functions
  • 二、DQN
    • 2.1 游戲中agent的目標是什么?
    • 2.2 agent如何做決策?
    • 2.3 如何理解Q* 函式呢?
    • 2.5 DQN打游戲?
  • 三、如何訓練DQN?
    • 3.1 TD演算法
    • 3.2 TD演算法訓練DQN
  • 四、訓練步驟
  • 六、總結

前言

說明一下:這是我的一個學習筆記,課程鏈接如下:

最易懂的強化學習課程
公眾號:AI那些事
在這里插入圖片描述


一、Action-Value Functions

我們回顧一下Action-Value Functions:
在這里插入圖片描述
??這些R都是環境給的Reward獎勵,每當agent做出一個動作,環境就會更新一個狀態,并且給一個獎勵R,每一個獎勵R都依賴前一個狀態和動作,所以Return依賴t時刻開始所有的動作和所有的狀態,未來的狀態A和S都是隨機變數,動作A的隨機性來自policy函式π,動作是agent根據函式π隨機抽樣得到的,狀態S的隨機性來自于狀態轉移函式p,新的狀態是根據函式p隨機抽樣得到的,未來所有的動作和狀態都是隨機的,Ut依賴于這些動作和狀態,因此Ut也是隨機的,Ut的值可以反映出來未來獎勵的總和,所以我們想了解Ut的大小,由于Ut是一個隨機變數,在t時刻我們并不知道Ut的值,我們可以對Ut求期望,這樣就可以排除掉Ut中的隨機性,這個期望是關于未來所有的動作A和狀態S求的,期望消除了S和A的隨機變數,只留下了At和St兩個變數,通過求期望我們得到了Qπ函式,它被稱為Action-Value function 動作價值函式,Qπ和策略函式π有關,和St和At也有關,未來的隨機性都被期望所消除了,Qπ只依賴當前的動作At和狀態St,Qπ可以反映出當前狀態St下做動作At的好壞程度,我們想要進行一般消除策略函式π,我們可以根據Qπ對π求最大化得到最優動作價值函式Q*(最優動作價值函式)

??Q* 告訴我們不管用什么樣的策略π要使agent在當前狀態st下做動作at,那么回報Ut的期望頂多就是Q*(st,at),不會更好,Q* 函式與policy函式π無關,只要agent做的動作a那么Q*(st,at)就是最好的結果了,哪怕之后你把策略函式π改進的更好,你獲得的回報也不會比Q*(st,at)更好,

??說的更簡單一點Q* 函式告訴我們,基于當前狀態st做出動作at的好壞程度,所以Q* 函式可以指導agent做決策,agent觀測到當前的狀態st,Q* 函式可以給當前狀態進行打分,比如向上跳是3000分,向左是2000分,向右是1000分,agent可以根據分數來做決策,既然向上跳的分數最高是3000分agent就應該向上跳,這樣期望回報才會最大化,

二、DQN

在這里插入圖片描述

2.1 游戲中agent的目標是什么?

??主要目標是打贏游戲,既然目標定下來了,那么agent就要努力的實作目標,假設Q* 函式是知道的,那么agent該怎么做決策呢?

2.2 agent如何做決策?

??決策就是選出最優動作,那什么才是最優動作呢,我們剛才說Q* 函式可以給所有的動作打分,每個動作a都有一個分數,最好的動作a就是分數最高的那個動作,我做一個更加通俗的解釋:Q* 函式就像一個先知一樣,它能預見未來的結果,比如你問先知,現在有a,b,c三支股票,我該把我的錢用來買哪一支股票呢?未來是充滿隨機性的,什么都可能發生,如蝴蝶效應,所以先知沒有辦法給你一個確定的答案,只能告訴你平均值,先知告訴你,從平均值來看,A股票漲了10倍,B股票漲了2倍,C股票跌了一半,先知還告訴你實際發生的情況和平均值并不一樣,那么你該買哪一支股票呢?我們很定會選擇A股票,因為它能漲10倍,

2.3 如何理解Q* 函式呢?

??我們可以把Q* 當做一個先知,它能夠告訴你每一個動作帶來的平均回報,你該聽先知的話,選平均回報最高的那個動作,我們希望有Q* 這樣一個先知,agent可以靠Q* 的指點來做決策,這樣agent就像開了掛一樣,但實際上我們沒有Q* 函式,價值學習的基本想法就是學習一個函式來近似Q* ,我們不可能近似出一個萬能的先知,但是對于超級瑪麗這種游戲學習出來一個先知并不難,要是我玩了10w次超級瑪麗,我就跟先知一樣了,看一眼螢屏就告訴你這一步是什么操作才是最好的,

2.5 DQN打游戲?

??DQN是一種價值學習的方法,用一個神經網路去近似Q* 函式,我們將這個神經網路記為Q(s,a;w),神經網路的引數是w,輸入是狀態s,輸出是很多數值,這些數值是對所有很能的動作的打分,每一個動作對應一個分數,我們通過獎勵來學習神經網路,這個神經網路給動作的打分就會逐漸改進,打分會越來越準,如果讓神經網路玩幾百萬次超級瑪麗,這個神經網路就跟先知一樣了,
在這里插入圖片描述
??DQN就是一個這樣的神經網路,對于不同的問題DQN的結構可能會不一樣,我這里舉個例子,如果是玩超級瑪麗,可以把螢屏上的畫面進行輸入,用一個卷積層將圖片變為特征向量,最后用幾個全連接層把特征映射到一個輸出的向量,這個輸出的向量就是對動作的打分,向量每一個元素對應一個動作,在超級瑪麗的例子里面有左右上三個動作,所以輸出的向量是三維的,agent會做得分最高的動作,所以我們只要把DQN訓練好,就可以用DQN自動控制超級瑪麗打游戲,
在這里插入圖片描述
??用DQN控制agent打游戲,當前觀測到狀態st,用DQN把st作為輸入,給所有的動作打分,選出分數最高的動作作為at,agent執行at這個動作后,環境會改變狀態,用狀態轉移函式p來隨機抽一個狀態st+1,環境告訴我們這一步的獎勵rt,獎勵可以是正的可以是負的也可以是0,獎勵就是強化學習中的監督信號,DQN要靠獎勵進行訓練,有了新的狀態st+1,DQN再對所有的動作打分,agent選擇分數最高的動作,作為at+1,agent執行at+1后,環境會再更新狀態st+2,還會再給一個獎勵rt+1,然后還是重復這一程序,讓DQN給動作打分,讓agent選擇分數最高的動作來執行,然后環境再更新狀態s再給獎勵rt+2,不斷重復這一程序直到游戲結束,
在這里插入圖片描述

三、如何訓練DQN?

??我們這里采用TD演算法

3.1 TD演算法

在這里插入圖片描述
??TD演算法不是那么容易理解,所以我用一個例子來闡述:

??假設:我要從紐約開車到亞特蘭大,我有一個模型Q,引數是W,他可以預測出開車出行的時間開銷,我現在要從紐約出發了,這是Q告訴我,要開車1000min,才能到亞特蘭大,這個模型一開始不是很準確,或者是純隨機的,但是隨著用這個模型的人越來越多,得到越來越來資料跟多訓練,這個模型就會越來越準,會像谷歌地圖一樣準確,

??問題是這樣的,我需要什么資料呢,得到這些資料我該怎么更新模型引數呢?

??最簡單的辦法是,首先,出發之前,讓模型做一個預測記作q,模型告訴我,從紐約到亞特蘭大要花1000min,所以q=1000,預測過后我就出發了,但當我到亞特蘭大的時候我只用了860min,這里的q是模型的預測,而y是我真實的開銷,于是我把y作為target,q和y不一樣,q比y大了140min,這就說明我的模型預測有了偏差,比我實際的y要多,這就造成了loss損失,損失定義為q和y的平方差,記作l,我們對損失l關于模型引數W求導,然后把倒數關于鏈式法則展開l是q的函式,q是W的函式,所以這之間可以用鏈式法則求導,結果就是(q-y) * q函式對W的倒數,梯度求出來了,我們就能根據梯度下降來更新模型引數W,新的引數Wt+1為:
在這里插入圖片描述
??假如我們用Wt+1代替Wt那么預測值將會更加接近真實值y=860,這是因為梯度下降減小了loss讓預測值離真實值更近了,這種演算法我必須完成整個旅途才能對模型進行一次更新,
在這里插入圖片描述
??我問個問題,假如我走到半路我就不走了,那我還有辦法對模型進行更新嗎?

??我從紐約開車去亞特蘭大會經過華盛頓DC,假如我到DC的時候,車子出故障了,我就去不了亞特蘭大了,那我有沒有可能使用這一段旅途去改進模型呢?

??其實是可以的,我從出發的時刻做了預測,模型說從紐約開車到亞特蘭大要花1000分鐘,這個1000就是模型的估計,當我開車到DC的時候我一看花了300分鐘(真實觀測),然后模型又預測我還需要花600min才能到達亞特蘭大,

??回顧一下,一開始模型告訴我,從紐約到亞特蘭大需要花1000min,而現在我到DC花了300min,模型又告訴我,我還需要花600min才能到達亞特蘭大,根據模型新的預測我知道我到達亞特蘭大的總時間900min,比原來快了100min,在TD演算法里面我們將這個新的估計900min叫做TD target

??TD target雖然也是一個雖然也是個估計,但未必是實際情況,但是它要比最初的1000min要更可靠,最初的估計純粹是一個估計,無事實成分,雖然TD target也是一個估計但是它有事實成分,當我越接近亞特蘭大,TD target就越接近真實值,

??用TD target的話我不需要跑完整個路程去知道真實的時間開銷,我到了DC我得到TD target=900,我就可以更新模型引數了,我假如y=900就是真實觀測,我把y作為target,損失函式就是:最開始預測的模型引數 1000和TD target差的平方,這里Q(W)和y的差我們稱為TD error,
在這里插入圖片描述
??整個模型更新如下:
在這里插入圖片描述
在這里插入圖片描述
??剛才我們學了TD演算法,有了TD演算法即使不完成旅途也能更新模型引數,把TD演算法用來學習DQN是相同的道理,我不需要打完游戲就能更新游戲的引數,

3.2 TD演算法訓練DQN

在這里插入圖片描述
??怎樣才能使用TD演算法來學習DQN呢?

??剛才的例子里面要用到這樣一個公式:
在這里插入圖片描述
&ems p;?公式的意思是紐約到亞特蘭大的時間(估計)約等于紐約到DC(真實時間)+ DC到亞特蘭大的時間(估計),有上述公式才能實作TD演算法:
在深度強化學習中也有這樣一個公式:
在這里插入圖片描述
??等式左邊是T時刻的估計,這是未來總和的期望相當于紐約到亞特蘭大的總時間,等式右邊有一項rt是真實的獎勵,第二項是DQN在t+1時刻做的估計,相當于DC到亞特蘭大的估計時間,接下來,我總結一下為什么強化學習有這個公式:
??回顧一下折扣回報:
在這里插入圖片描述
??這里的R是獎勵,γ是一個介于0-1之間的折扣率,我們對這個公式進行處理,將有γ的項提取一個γ得到:
在這里插入圖片描述
??括號里的內容是什么呢?我們再用一下折扣回報U的定義,不難發現括號里面就是Ut+1因此我們得到一個等式:
在這里插入圖片描述
??這個等式反應了相鄰兩個折扣之間的關系,

??現在我們要把TD演算法用到DQN上,在t時刻DQN輸出的值Q(st,at;w)是對Ut做出的估計,這就像我從紐約出發前,模型做的預測,告訴我,紐約到亞特蘭大的總時間,

??在下一時刻DQN輸出的值Q(st+1,at+1;w)是對Ut+1做出的估計,這就我開車到DC,模型預測DC到亞特蘭大的時間,

??我們知道Ut=Rt+γ * Ut+1,所以Ut的期望約等于Rt加上Ut+1的期望,所以我們能夠得到這樣一個關系,DQN在t時刻做出的預測:
在這里插入圖片描述
在這里插入圖片描述

四、訓練步驟

??有了prediction和TD target我們就能更新DQN的模型引數了:
在t時刻,模型做出了預測Q(st,at;w),這里的st是當前的狀態,at是已經做出的動作,wt是當時的模型引數,
在這里插入圖片描述
??到了t+1時刻,我們觀測到真實的獎勵rt,還觀測到新的狀態st+1,有了st+1,我們就能用DQN算出下一個動作at+1了,在t+1時刻我們知道了rt,st+1,at+1的值,這時候我們就能計算TD target記作yt,t+1時刻的動作at+1是怎么算出來的呢,DQN對每一個動作打分,分數最高的那個動作就被選出來作為at+1,所以呢,Q(st+1,at+1;wt)就是對Q函式關于a求最大化,
在這里插入圖片描述
??我們將兩者差的平方l做為loss:
在這里插入圖片描述

??然后算lt關于模型引數w的導數,作梯度下降來更新模型引數,做梯度下降是為了使loss減小
在這里插入圖片描述
??總的來說所有步驟就是這樣的:
在這里插入圖片描述

六、總結

期待大家和我交流,留言或者私信,一起學習,一起進步!麻煩大家可用關注公眾號:AI那些事,感謝!!!
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293510.html

標籤:AI

上一篇:Pytorch CIFAR10影像分類 DenseNet篇

下一篇:機器學習演算法 01 —— K-近鄰演算法(資料集劃分、歸一化、標準化)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more