一、問題重述
強化學習是機器學習中重要的學習方法之一,與監(jiān)督學習和非監(jiān)督學習不同,強化學習并不依賴于數(shù)據(jù),并不是數(shù)據(jù)驅(qū)動的學習方法,其旨在與發(fā)揮智能體(Agent)的主觀能動性,在當前的狀態(tài)(state)下,通過與環(huán)境的交互,通過對應(yīng)的策略,采用對應(yīng)的行動(action),獲得一定的獎賞(reward),通過獎賞來決定自己下一步的狀態(tài)。
強化學習的幾個重要的組分是:
- 環(huán)境,即智能體所處的外來環(huán)境,環(huán)境可以提供給智能體對應(yīng)的狀態(tài)信息,并且基于智能體一定的獎賞或者乘法。
- 智能體:智能體是強化學習中的學習和決策主體,他可以通過與環(huán)境的交互來學習改進其在當前環(huán)境下采取的決策策略。
- 狀態(tài):用于描述當前環(huán)境與智能體的情況,或者所觀測的具體的變量。
- 行動:智能體基于觀察到的狀態(tài)所采取的操作或者決策
- 獎勵:環(huán)境根據(jù)智能體所采取的行動和當前的狀態(tài)給與其的反饋。
強化學習的目標是通過學習,不斷優(yōu)化自己的決策策略,使得對于任意一個狀態(tài)下,智能體所采取的行動,都能夠獲得最大的獎勵,值得注意的是,這種獎勵是長期獎勵,而非眼前獎勵。我們?yōu)榱藢崿F(xiàn)這一目標,通常會引入價值函數(shù)和動作-價值函數(shù)來評估行為的好壞,同時使用一定的算法和方法來不斷迭代價值函數(shù),在優(yōu)化迭代價值函數(shù)同時,我們實際上就是在優(yōu)化智能體的決策策略,這是因為事實上價值函數(shù)就是表示智能體在時刻t處于狀態(tài)s時,按照策略π采取行動時所獲得回報的期望。價值函數(shù)衡量了某個狀態(tài)的好壞程度,反映了智能體從當前狀態(tài)轉(zhuǎn)移到該狀態(tài)時能夠為目標完成帶來多大“好處”。我們通過迭代價值函數(shù),就可以不斷的迭代自己的行動策略π。
機器人走迷宮問題是一個經(jīng)典的強化學習的基本問題,我們可以將機器人看做是智能體,將迷宮看做環(huán)境,將機器人所處的地方視為狀態(tài),機器人的行動稱之為動作,機器人根據(jù)當前的迷宮周圍的環(huán)境所采取的動作稱之為策略,每次移動是否合法,是否到達迷宮終點視為環(huán)境給予的獎勵。
二、設(shè)計思想
我們考察機器人走迷宮問題,由于迷宮是有限范圍的迷宮,迷宮的狀態(tài)是有限的,針對這種情況,我們可以采用深度優(yōu)先搜素或?qū)挾葍?yōu)先搜索實現(xiàn)對狀態(tài)的窮舉,然后探索出一條符合條件的路徑。針對寬度優(yōu)先搜索,題中已經(jīng)給出了對應(yīng)的代碼,構(gòu)建了一顆搜索樹,然后通過層次遍歷的辦法來搜索,我們在這里考慮使用深度優(yōu)先搜索。
深度優(yōu)先搜索的實現(xiàn)方法是遞歸與堆棧,可以看做“一條路走到黑,不見黃河不回頭,不見棺材不落淚”,他會沿著一條路徑一直走,直到走到不合法死胡同為止。我們在當前狀態(tài)下,可以通過函數(shù)得到可以走的路徑,然后從中選擇一個,進行遞歸傳參,然后繼續(xù)這個過程,直到走到死胡同或者路徑終點為止。不過值得注意的是,我們需要用到回溯算法:回溯算法的本質(zhì)是,我們這次搜索不希望對于下一次搜索產(chǎn)生影響,所以想要完全消除掉本次搜索對于環(huán)境的影響,在這里我們采用了一個vis數(shù)組來判定該狀態(tài)是否被遍歷過,采用了一個path數(shù)組來存儲每次采取的動作是什么,我們回溯的思路便是在搜索完或者走到死胡同后往回走,將當前搜索完的path刪掉,同時vis數(shù)組置0,這種算法的正確性是顯然的,并不會陷入無窮的遍歷過程,因為對于每一個狀態(tài),我們采取的動作都是唯一的,我們在每一個狀態(tài)都會遍歷對應(yīng)的動作,而不會往回遍歷,回溯的目的并不是回溯動作,而是刪除當前搜索對于未來搜索的影響。這便是我們深度優(yōu)先搜索的設(shè)計思想。
接下來我們考慮實現(xiàn)非搜索算法,即使用強化學習的方法:強化學習首先需要明確優(yōu)化的對象即價值函數(shù)和動作價值函數(shù):
我們不妨假設(shè)環(huán)境所給智能體的獎賞為:
? ? ? ? maze.set_reward(reward={
? ? ? ? ? ? "hit_wall": -10.,
? ? ? ? ? ? "destination": 50.,
? ? ? ? ? ? "default": -0.1,
? ? ? ? })
即撞墻的獎賞為-10,到達重點獎賞為50,正常情況下的獎賞為-0.1,撞墻需要提供一定的懲罰是顯然的,而且懲罰力度要盡可能的大,以鼓勵智能體去探索可行的路徑。
接下來我們考慮優(yōu)化價值函數(shù)和動作價值函數(shù),我們考慮采取Q-learning算法進行迭代。Q-learning是一個值迭代算法,而不是策略迭代算法,下面簡要介紹一下值迭代和策略迭代之間的差異:
值迭代是一種基于迭代更新價值函數(shù)的方法,旨在找到最優(yōu)的價值函數(shù)和策略。它通過反復(fù)迭代計算每個狀態(tài)的值函數(shù),直到值函數(shù)收斂到最優(yōu)值函數(shù)。具體而言,值迭代的步驟如下:
- 初始化所有狀態(tài)的值函數(shù)為任意值。
- 對于每個狀態(tài),根據(jù)當前值函數(shù)和當前策略,計算其更新后的值函數(shù)。
- 重復(fù)步驟2,直到值函數(shù)收斂到最優(yōu)值函數(shù)。
- 根據(jù)最優(yōu)值函數(shù),得到最優(yōu)策略。
而策略迭代是一種同時優(yōu)化價值函數(shù)和策略的方法。它交替進行策略評估和策略改進的步驟,直到策略收斂到最優(yōu)策略。具體而言,策略迭代的步驟如下:
- 初始化策略為任意策略。
- 策略評估:根據(jù)當前策略計算每個狀態(tài)的值函數(shù)。
- 策略改進:根據(jù)當前值函數(shù)選擇每個狀態(tài)的最優(yōu)行動,更新策略。
- 重復(fù)步驟2和步驟3,直到策略收斂到最優(yōu)策略。
值迭代和策略迭代都可以用于找到最優(yōu)的策略,但它們在算法的執(zhí)行方式和收斂性質(zhì)上有所不同。值迭代通常需要更多的迭代次數(shù)來達到收斂,但每次迭代的計算量較小。策略迭代在每次迭代中都需要進行策略評估和策略改進的步驟,計算量較大,但通常收斂更快。
我們在此處采取Q-learning算法進行值迭代。Q-learning算法會將狀態(tài)和動作構(gòu)成一張表來存儲Q值,如下所示:
Q值為動作價值函數(shù),具體的計算公式為
也就是說,當前狀態(tài)下,采取動作a的Q值為環(huán)境即時的獎賞以及到達下一個狀態(tài)后,執(zhí)行任意行動后所獲得的最大獎賞的γ倍,此處的γ為折扣因子,換句話說,當前狀態(tài)的Q值取決于環(huán)境的即時獎賞和未來的長期獎勵,其中長期獎勵的定義方法是遞歸定義。
我們的Q-learning的本質(zhì)就是維護一個Q表,在Q表收斂后,根據(jù)Q表進行決策,由于強化學習是一個馬爾科夫過程,當前時刻的獎賞與事件無關(guān),只與狀態(tài)和采取的行動有關(guān),所以我們可以在某一個狀態(tài)下,找到Q表中對應(yīng)獲得獎賞最大的動作進行行動,然后根據(jù)行動后到達的狀態(tài)繼續(xù)行動,以此類推,直到到達目標點。
如何根據(jù)Q表進行決策的過程我們已經(jīng)說明,接下來我們考慮如何對Q表進行維護:維護Q表是通過不斷更新Q值實現(xiàn)的,具體來說,我們對于每一個時間步的狀態(tài),會選擇一個動作a,值得注意的是,該動作的選擇并不是通過簡單的貪心找最大實現(xiàn)的,我們通常會使用貪心策略,即在某一個狀態(tài)下,有的概率選擇其余的部分進行探索,有1-的概率選擇最高的獎賞進行迭代,是超參數(shù),為了平衡利用和探索,類似于MCT中的超參數(shù)c。在選擇完動作a后,觀察到獎勵和下一個狀態(tài),根據(jù)我們的更新規(guī)則對Q表的Q值進行更新,然后跳轉(zhuǎn)到下一個狀態(tài),以此類推。
值得注意的是,我們更新Q表的Q值,采用較為保守的策略進行更新,引入松弛變量α,具體而言,公式如下:
也就是說,我們的值并不完全通過計算的新Q值得到,而是通過新Q值和舊Q值線性加權(quán)得到的。
我們考慮基本的Q-learning有一個問題:我們的Q值取決于動作價值函數(shù),動作價值函數(shù)就與狀態(tài)耦合,如果狀態(tài)過多,有些狀態(tài)可能始終無法采樣到,因此對這些狀態(tài)的q函數(shù)進行估計是很困難的,并且,當狀態(tài)數(shù)量無限時,不可能用一張表(數(shù)組)來記錄q函數(shù)的值。我們考慮多層感知機(MLP)是一個通用的函數(shù)逼近器,可以以任意精度逼近任意多項式函數(shù),所以我們考慮采用深度神經(jīng)網(wǎng)絡(luò)來擬合Q函數(shù),而不是通過值迭代的方法對Q值進行計算。這便是我們的DQN(Deep-Q-Learning)
- 初始化q函數(shù)的參數(shù)θ
- 循環(huán)
- 初始化s為初始狀態(tài)
- 循環(huán)
-
采樣a~??greedy_π(s;θ)
-
執(zhí)行動作a,觀察獎勵R和下一個狀態(tài)s′
-
損失函數(shù)
-
-
根據(jù)梯度?L(θ)∕?θ更新參數(shù)θ
s←s′
-
- 直到s是終止狀態(tài)
- 直到q_π收斂
- 循環(huán)
我們的損失函數(shù)一般而言是MSE損失函數(shù),主要刻畫了當前神經(jīng)網(wǎng)絡(luò)擬合的Q值與我們計算出的Q值之間的差異,通過不斷優(yōu)化減少損失函數(shù)來更新神經(jīng)網(wǎng)絡(luò)的參數(shù)。
值得注意的是,我們有一些小tricks例如經(jīng)驗重現(xiàn),經(jīng)驗重現(xiàn)是指我們建立一個經(jīng)驗緩沖區(qū),用于存儲過去的狀態(tài),所采取的動作,獲得的獎勵和更新后的狀態(tài),這樣做的動機是,如果我們只使用當前的經(jīng)驗來更新模型參數(shù),容易受到樣本的相關(guān)性和序列效應(yīng)的影響,導致不穩(wěn)定的學習和收斂困難。
我們考慮使用經(jīng)驗緩沖區(qū)對神經(jīng)網(wǎng)絡(luò)進行優(yōu)化,每次隨機選取一定量的樣本進行更新迭代,這樣做就可以避免樣本的相關(guān)性的影響。
接下來我們考慮損失函數(shù),在損失函數(shù)中,q函數(shù)的值既用來估計目標值,又用來計算當前值?,F(xiàn)在這兩處的q函數(shù)通過θ有所關(guān)聯(lián),可能導致優(yōu)化時不穩(wěn)定,我們考慮讓損失函數(shù)中的兩個q函數(shù)使用不同的參數(shù)計算。
- 用于計算估計值的q使用參數(shù)θ?計算,這個網(wǎng)絡(luò)叫做目標網(wǎng)絡(luò)
- 用于計算當前值的q使用參數(shù)θ計算
- 保持θ?的值相對穩(wěn)定,例如θ每更新多次后才同步兩者的值θ?←θ
三、代碼內(nèi)容
代碼內(nèi)容略
四、實驗結(jié)果
對于實驗結(jié)果,可以完全通過網(wǎng)站上的幾個例子,并且程序運行時間特別快
五、總結(jié)
總體來看,本次實驗符合預(yù)期,DQN的效果特別不錯,在實驗中,遇到的比較大的問題是建立DQN網(wǎng)絡(luò)和調(diào)整相應(yīng)的超參數(shù),我們調(diào)整超參數(shù)的策略可以通過在本地運行不同maze大小,看訓練完之后,機器人采取一定行動能否到達最終的目的地,如果不能到達目的地,看機器人的行動軌跡,調(diào)整不同的超參數(shù)的值來使模型達到最佳的效果。文章來源:http://www.zghlxwxcb.cn/news/detail-461116.html
樸素的搜索算法本來我寫了一個傳遞location參數(shù)的版本,但是評測要求不能傳遞這個參數(shù),所以我們只能將其聲明為全局變量進行使用,總體來看,本次實驗難度適中,特別合理,收獲很大!文章來源地址http://www.zghlxwxcb.cn/news/detail-461116.html
到了這里,關(guān)于人工智能導論——機器人自動走迷宮&強化學習的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!