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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强化学习:函数逼近思想

發(fā)布時間:2024/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强化学习:函数逼近思想 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在開始這一篇內(nèi)容之前,讓我們先回顧一下前8篇所提及的內(nèi)容。概括地說,前八篇所講到的各種強化學(xué)習(xí)方法(DP、MC、TD等),有一個共同套路:即采用數(shù)據(jù)表存儲每一個狀態(tài)(state)的價值量(value),然后用不同的方式更新這些狀態(tài)的value,直至收斂;最后根據(jù)每個狀態(tài)下不同動作(action)對應(yīng)的value,決定應(yīng)該選擇哪個狀態(tài),也就是確定了策略(policy)。盡管不同的方法之間有些小的差異,但是從本質(zhì)上看是相似的。

但是從本篇開始提及的“函數(shù)近似”方法,卻在本質(zhì)上有了幾個重大改變,也因此有了一些突出的特點。首先要說明的是:“函數(shù)近似”更像是一種思想,包含一類方法,從后面的章節(jié)就能看出來,基于這個思想,可以衍生出很多不同類型的方法。同時,該方法也正式把強化學(xué)習(xí)和機器學(xué)習(xí)聯(lián)系起來,讓我們可以互相借鑒兩個領(lǐng)域的一些優(yōu)勢。

那么,函數(shù)近似這類方法,有什么改變?第一、對狀態(tài)的價值量(value)的存儲使用函數(shù)來表征,不再用數(shù)據(jù)表。第二、采用機器學(xué)習(xí)中流行的有監(jiān)督訓(xùn)練方式來更新函數(shù)的固有參數(shù),直至函數(shù)收斂。一旦函數(shù)訓(xùn)練完成,我們就自然得到了“狀態(tài)x”--“狀態(tài)價值量y”之間的映射關(guān)系,然后由狀態(tài)價值決定策略就是順理成章的事了。這兩個改變也相應(yīng)帶來了顯著的特點:第一、函數(shù)近似方法不需要大量的存儲空間來存狀態(tài),因為函數(shù)的參數(shù)個數(shù)通常遠遠少于環(huán)境狀態(tài)的數(shù)量(深度神經(jīng)網(wǎng)絡(luò)也許是個例外);第二、訓(xùn)練出來的函數(shù)具備一定的泛化特性(這也是機器學(xué)習(xí)方法的常見特性),可以應(yīng)對部分可觀測的環(huán)境,這對在實際問題中應(yīng)用強化學(xué)習(xí)方法是個好事,因為很多時候我們是無法窮盡所有狀態(tài)的。

下面開始正式介紹這一類方法。

1. 函數(shù)近似思想

1.1 什么是“函數(shù)近似”思想?

采用某種函數(shù)(線性函數(shù)或者非線性函數(shù)等等),基于小部分訓(xùn)練樣本,來擬合價值函數(shù)的真值,比如 或 ,使之在較大規(guī)模的測試樣本上同樣適用。這種思想的主要任務(wù)就是求該函數(shù)的最優(yōu)參數(shù)。

1.2 為什么引進“函數(shù)近似”思想?

(1)數(shù)據(jù)表形式的價值函數(shù)有缺陷。

到目前為止,我們對強化學(xué)習(xí)問題的討論,都局限于tabular的形式,也就是采用一張表來存儲當(dāng)前任務(wù)的價值函數(shù)。這張表,可以理解成python里面的字典結(jié)構(gòu),任務(wù)中所有的“狀態(tài)/狀態(tài)-動作”作為keys,每個“狀態(tài)/狀態(tài)-動作”的價值作為values。為什么這種數(shù)據(jù)表形式的強化學(xué)習(xí)會限制強化學(xué)習(xí)問題的規(guī)模呢?有如下兩個原因:1、內(nèi)存空間。當(dāng)問題規(guī)模超大時,存儲這么一張表需要的內(nèi)存空間是巨大的。2、計算時間和所需數(shù)據(jù)量。當(dāng)問題規(guī)模變大后,再想準(zhǔn)確地計算這張表中的每個值,需要的時間開銷是巨大的;同時,在很多實際任務(wù)中,有些狀態(tài)和動作是永遠不會出現(xiàn)的,這就導(dǎo)致價值函數(shù)很難準(zhǔn)確計算。

上面這番文字提到的問題,簡單總結(jié)后,就是四個字:泛化問題,即在小規(guī)模數(shù)據(jù)上獲得的經(jīng)驗,怎么才能夠在大規(guī)模的數(shù)據(jù)上也適用?

(2)參數(shù)方程形式的價值函數(shù)可以解決上述泛化問題

使用函數(shù)近似的思想,我們只需找到一組最優(yōu)的參數(shù),也就確定了最優(yōu)的擬合函數(shù)。這個擬合函數(shù)既不需要存儲大量的狀態(tài)價值信息,也不要求看到整個狀態(tài)-動作空間。只要它的參數(shù)包含了整個狀態(tài)-動作空間背后的規(guī)律,那么它就可以在任何情況下都表現(xiàn)良好,也就是泛化能力好。

1.3 需要注意的問題

函數(shù)近似思想來源于傳統(tǒng)的機器學(xué)習(xí)問題。將這種思想移植到強化學(xué)習(xí)問題中,自然會帶來一些問題。這是因為強化學(xué)習(xí)中存在很多傳統(tǒng)機器學(xué)習(xí)沒有的特點,比如:非穩(wěn)定性(包括狀態(tài)分布和獎勵分布的不穩(wěn)定性),自舉性(bootstrapping),目標(biāo)的延后性。在將函數(shù)逼近思想融合到強化學(xué)習(xí)的過程中,這些問題都要考慮到并做出相應(yīng)改進。

1.4 如何用函數(shù)近似思想解決on-policy prediction問題?

我們知道強化學(xué)習(xí)中存在on-policy和off-policy之分,也存在prediction和control問題之分。事實上,on-policy和off-policy的本質(zhì)區(qū)別在于,更新某狀態(tài)的價值量時,所使用的方法是沿用既定的策略(on-policy)還是使用新策略(off-policy)。而prediction和control問題的本質(zhì)區(qū)別在于所估計的是狀態(tài)價值函數(shù) ,還是動作價值函數(shù) 。其實這就是幾種相似但又有少許不同的問題,我們本篇就從on-policy的prediction問題入手,看看函數(shù)近似思想怎么應(yīng)用。

既然函數(shù)近似思想來源于傳統(tǒng)機器學(xué)習(xí),那么其主要步驟也跑不了機器學(xué)習(xí)那一套。在函數(shù)近似思想的定義中我們提到“這種思想的主要任務(wù)就是求該函數(shù)的參數(shù)”,如何求?分為以下三個步驟:

  • 確定價值函數(shù)的擬合模型
  • 確定待優(yōu)化的目標(biāo)函數(shù)
  • 確定參數(shù)的更新算法

這三個環(huán)節(jié)層層遞進,初步給出我們解決on-policy prediction問題的框架,下面分別討論。

?

2. 確定價值函數(shù)的擬合模型

2.1 價值函數(shù)的參數(shù)方程表示

在前面幾章,價值函數(shù)都是采用數(shù)據(jù)表的形式存儲,一個蘿卜一個坑。從這一章開始,我們開始采用參數(shù)方程的形式表示價值函數(shù),寫法: 。該寫法表示當(dāng)權(quán)重向量為 時,狀態(tài)s的價值近似值。比如: 可以是關(guān)于狀態(tài)特征的線性函數(shù), 的每個元素表示每個特征的權(quán)重; 還可以是通過神經(jīng)網(wǎng)絡(luò)建模得到的非線性函數(shù), 表示神經(jīng)網(wǎng)絡(luò)中神經(jīng)元之間的連接權(quán)值。通過改變 ,我們可以得到各種各樣的擬合函數(shù)。一般來說, 的元素個數(shù)遠遠少于狀態(tài)的數(shù)量。每改變 的任意一個元素,都會影響很多狀態(tài)價值的估計量。

2.2 確定訓(xùn)練樣本

既然“函數(shù)近似”屬于監(jiān)督學(xué)習(xí)的技巧,那么必然需要構(gòu)造訓(xùn)練樣本,包括輸入和輸出。回憶一下我們之前在處理prediction問題時,總是會提到“反向更新”這個詞,也就是backups。比如在蒙特卡洛算法中,backup過程是 ,也就是說,狀態(tài) 的value向著 的方向更新, 叫做 ,也叫做target;同理在TD(0)算法中,反向更新過程是: 。

于是我們自然就想到,可否把反向更新中的 作為一條訓(xùn)練樣本的input和output。這種形式的樣本表明狀態(tài)s的價值估計應(yīng)該更傾向于v,而我們最終想要得到的擬合函數(shù),其特點也應(yīng)該是傾向于把狀態(tài)s的價值估計為v。因此我們確定將反向更新中的 作為訓(xùn)練樣本。

2.3 擬合模型的選擇

確定了訓(xùn)練樣本之后,原則上我們可以選擇任何類型的監(jiān)督學(xué)習(xí)模型來擬合訓(xùn)練樣本。但是并非所有模型都合適,為什么呢?這就需要我們研究一下強化學(xué)習(xí)任務(wù)的特點。

  • 強化學(xué)習(xí)任務(wù)需要實時在線學(xué)習(xí),一邊和環(huán)境交互一邊學(xué)習(xí)。因此需要一個效率很高的模型,可以不斷接收新增的訓(xùn)練樣本進行快速學(xué)習(xí)。
  • 強化學(xué)習(xí)任務(wù)需要處理"非穩(wěn)態(tài)目標(biāo)函數(shù)"問題。這個怎么理解?在強化學(xué)習(xí)中,特別是按照GPI流程(見第四章動態(tài)規(guī)劃的4.6部分)進行value function和policy更新的情況下, 經(jīng)常隨著 變化,于是我們就要不斷地逼近這個變化的 。另外,就算 不變,那么通過bootstrapping方法(比如DP中就用到)所產(chǎn)生的訓(xùn)練樣本的目標(biāo)價值也是非穩(wěn)定的,同一個state,可能其目標(biāo)價值是多個。
  • 強化學(xué)習(xí)問題的上述兩個特點和傳統(tǒng)機器學(xué)習(xí)問題有所不同,因此我們選擇的函數(shù)擬合模型必須得能夠應(yīng)付這兩個特點的任務(wù)。

    我們在這里先不提出具體的模型,只說明模型的必要特點,在下一篇第二部分中會討論具體的模型。

    ?

    3. 確定待優(yōu)化的目標(biāo)函數(shù)

    3.1 為什么建立目標(biāo)函數(shù)

    我們知道,在機器學(xué)習(xí)中,為了得到一個準(zhǔn)確的模型,需要時刻監(jiān)控該模型的訓(xùn)練演化過程,確保模型往好的方面進化。什么是好的方面?怎么確保呢?通常都是針對具體的任務(wù),建立合適的目標(biāo)函數(shù)(有時也叫損失函數(shù)),通過保證模型的更新始終朝著使損失函數(shù)不斷減小的方向,最終可以得到一組滿意的模型參數(shù)。

    之所以之前我們從沒設(shè)立過明確的目標(biāo)函數(shù),是因為采用數(shù)據(jù)表存儲價值函數(shù)時,不需要這么一個目標(biāo)函數(shù),因為價值函數(shù)經(jīng)過不斷學(xué)習(xí)迭代,最終可以自動趨于收斂,得到真實值。此外,數(shù)據(jù)表存儲方式下,每個狀態(tài)的價值更新過程呈相互解耦關(guān)系:即A狀態(tài)的價值更新后,并不影響B(tài)、C狀態(tài)的價值,因為數(shù)據(jù)表的每個區(qū)域是相互隔離的。

    但是,通過函數(shù)近似思想進行價值函數(shù)的估計時,這種解耦關(guān)系被打破了:A狀態(tài)的價值更新后,會導(dǎo)致模型參數(shù) 發(fā)生變化,從而間接影響其他狀態(tài)的價值,因此不再有可能使所有狀態(tài)的價值都達到真實值。

    所以,需要制定一個目標(biāo)函數(shù),這個目標(biāo)函數(shù),決定哪些狀態(tài)我們更在乎,哪些狀態(tài)我們不在乎。更在乎的狀態(tài),適當(dāng)提高它的價值估計精確度;不在乎的狀態(tài),適當(dāng)降低它的價值估計精確度。

    3.2 確定目標(biāo)函數(shù)

    用數(shù)學(xué)語言做上面那件事,就是定義一個概率分布 ,表示對每個狀態(tài)價值準(zhǔn)確度的在乎程度。同時我們用價值近似值 和真值 的均方差作為誤差的定義。結(jié)合這兩部分,我們定義目標(biāo)函數(shù)如下:

    MSVE全稱“Mean Squared Value Error”,均方價值誤差。

    這里再說一下 的數(shù)學(xué)含義:通常 表示在目標(biāo)策略 下,花在狀態(tài)s上的時間占總時間的比例。這時 叫做“on-policy distribution”。在離散序列任務(wù)中, 略有不同,不能嚴格地叫做“概率分布”,因為離散任務(wù)中初始狀態(tài)的選擇會對該分布造成一些影響。因此我們也給出離散序列任務(wù)下的 定義:

    其中h(s)表示狀態(tài)s被選中作為初始狀態(tài)的概率分布。

    需要提醒大家的是,MSVE并不一定是最好的評價指標(biāo),因為我們最終的目的是利用價值函數(shù)的估計值找到最優(yōu)的policy,而滿足這個目的并非一定需要最小化MSVE。但是目前也并不清楚有啥更好的指標(biāo),因此還是繼續(xù)選用MSVE。

    3.3 求解目標(biāo)函數(shù)

    既然目標(biāo)函數(shù)是某種誤差,那么求解該函數(shù),就是使其值變得越小越好。為了最小化MSVE,其實我們要做的就是找到全局最優(yōu)解,也就是找到一個特定的 ,使其滿足:

    值得注意的是,對于簡單的線性模型,這個 或許容易找到,但是對于復(fù)雜的非線性模型,比如神經(jīng)網(wǎng)絡(luò)或者決策樹,這個 很難得到。因此在復(fù)雜非線性模型中常用的替代方案是“尋找局部最優(yōu)解”,也就是找到一個 ,使其滿足:

    至此,我們介紹了基于函數(shù)近似思想擬合價值函數(shù),進而解決強化學(xué)習(xí)問題的大框架。

    從下一節(jié)開始,我們開始討論具體的參數(shù)更新算法。這些方法主要是基于梯度下降理論。

    ?

    4. 確定參數(shù)更新算法

    為了找到最優(yōu)的參數(shù) ,需要從一開始的初始值向著最優(yōu)值不斷迭代更新。有哪些迭代更新的算法可以采用呢?

    4.1 隨機梯度方法

    接下來我們要討論的參數(shù)更新算法主要基于隨機梯度下降理論(SGD)。SGD方法在參數(shù)更新中的運用極其廣泛,并且這類方法恰好也很適合實時在線的強化學(xué)習(xí)任務(wù)。

    在梯度下降理論中, ,價值擬合函數(shù) 是定義在 上,關(guān)于 的光滑可微函數(shù)。我們會在整個訓(xùn)練過程中的每個離散時間點上更新 ,因此我們需要一個新符號 表明在每一個時間點t上的 。

    接下來,假定在我們的訓(xùn)練樣本中的狀態(tài)分布和上一節(jié)在MSVE那里定義的分布 相同。現(xiàn)在我們開始著手更新 ,很明顯的一個方法就是在觀測到的訓(xùn)練樣本上盡可能地減小誤差。SGD方法會在每個隨機訓(xùn)練樣本上按照MSVE誤差減小的方向更新 。這里我們會用到常見的梯度運算符,關(guān)于梯度的含義我在此就不贅述了,可以查看大學(xué)數(shù)學(xué)課本。

    總之, 的更新如下式:

    從上式可以看出, 的更新量方向是沿著MSVE誤差的負梯度方向的,根據(jù)梯度的定義,這個方向也是誤差下降最快的方向。另外 表示步長參數(shù),控制著每次更新的幅度。

    可能讀者會有疑問,為什么要SGD每次沿誤差方向更新一小步,而不是直接徹底消除誤差呢?原因是:我們既不想要也不期待最終的價值函數(shù)能在所有狀態(tài)上的誤差全部為0。我們想要的是價值函數(shù)可以在不同狀態(tài)的誤差幅度之間獲得某種平衡。如果我們在每一個觀測到的狀態(tài)上都徹底消除誤差,那么就會發(fā)現(xiàn) 會不斷震蕩,永遠也找不到局部最優(yōu) 了。事實上,根據(jù)第二篇提到的“標(biāo)準(zhǔn)隨機近似條件”,步長參數(shù) 需要隨著時間而不斷減小的,只有滿足了“標(biāo)準(zhǔn)隨機近似條件”(見第二章多臂賭博機下 2.5部分,梯度下降法才能保證收斂到局部最優(yōu)解。

    現(xiàn)在我們要討論一個很重要的問題:訓(xùn)練樣本的output部分,即 中的 ,如果不是真實值,怎么辦?這在實際任務(wù)中很常見,因為 很可能是被噪聲影響的真實值 ,或者是其他狀態(tài)反向更新后的某個 。這時候,上述 的更新公式就要改成如下所示,用 代替 :

    如果 是 的無偏估計值,即 ,那么根據(jù)“標(biāo)準(zhǔn)隨機近似條件”, 依然可以收斂(保證步長參數(shù) 需要隨著時間而不斷減小)。如果 不是 的無偏估計值,那么 就不能保證收斂。

    作為 的無偏估計值的一個典型案例是蒙特卡羅算法的target value: 。還記得 代表啥么? 表示狀態(tài) 對應(yīng)的return,即獎勵值的總和(也可以是discounted sum)。因為 是 的無偏估計,因此梯度下降版本的蒙特卡洛價值函數(shù)估計算法是可以確定找到局部最優(yōu)解的。

    下面給出的是將傳統(tǒng)蒙特卡洛算法改造成梯度下降版本蒙特卡洛算法的偽代碼:

    ?

    4.2 半梯度方法

    說完了收斂性質(zhì)特別棒的蒙特卡洛算法的target value,也就是訓(xùn)練樣本的output,我們要來說幾個收斂性質(zhì)不樂觀的target:就是采用自舉法(bootstrapping)估計得到價值估計值。

    大家想一下有哪幾個算法采用自舉法進行價值函數(shù)的估計?這里有兩個:

    • TD(λ)前向視角的target value:TD(λ)的前向視角采用λ-return,所以其target value是 。然而,當(dāng)λ<1時, 不是 的無偏估計,因此該方法的梯度下降版本無法找到局部最優(yōu)解。
    • DP的target value: 。同樣,DP中也采用了bootstrapping,它的target value也不是 的無偏估計,因此該方法的梯度下降版本無法找到局部最優(yōu)解。

    為什么采用自舉法進行價值函數(shù)估計得到的target value收斂性質(zhì)不好呢?因為從 的梯度更新公式可以看出,target需要和 相互獨立,互不影響。而這個條件一旦用了自舉法就無法被滿足(看下式標(biāo)紅部分):

    這一類target代入梯度更新公式后,得到的只是部分梯度的下降,而不是真正的梯度下降,因此把這類梯度更新方法叫做:半梯度方法(semi-gradient methods)。

    我們可以看到,半梯度下降算法和梯度下降算法的形式是一樣的,只是target的特點不一樣。區(qū)分這兩種參數(shù)更新算法的唯一指標(biāo),就是看target,即訓(xùn)練樣本的output,是否是input(狀態(tài))真實價值的無偏估計。

    半梯度方法雖然收斂性質(zhì)不如真正的梯度下降方法,但是它有自己的優(yōu)點:

  • 半梯度方法在線性模型下可以保證收斂。
  • 在可收斂的情形下,半梯度方法的收斂速度特別快。
  • 半梯度方法可以用在連續(xù)性任務(wù)中,不必等到序列結(jié)束。
  • 這里給出一個半梯度方法的典型案例:semi-gradient TD(0)

    總結(jié)

    以上是生活随笔為你收集整理的强化学习:函数逼近思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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