1. 程式人生 > >強化學習-無模型控制(上)

強化學習-無模型控制(上)

之前的一章瞭解到瞭如何在無模型的環境下進行各個狀態轉移概率以及價值函式的估計。但是仍留有一個疑問,在有模型為前提的動態規劃演算法中,各個狀態的轉移概率已知,從而可以通過嘗試策略組合找出最優策略。但是實際上我們的蒙特卡洛方法和時間差分方法都只估計除了轉移概率和價值函式,並沒有對於策略的優化及其方法做出更多的考慮。這也就是我們需要深入討論的問題——如何優化既有的控制策略。

粗略來說,基於無模型控制的控制策略一般分為線上控制還有離線控制兩種,其分別代表在學習的過程中就進行策略優化,抑或是充分學習了各個結點的轉移概率之後再進行策略優化。

1.策略優化

在增強學習的控制體系裡面,最基本的原理就是獲得不同狀態-動作對的價值函式,並在新的狀態到來之時選擇價值函式最高的那個狀態-動作對加以執行。這樣,控制問題實際上就拆解為了兩個子問題:1.如何選取價值最高的狀態-動作對。2.如何得到狀態-動作對的價值。

1.1.決策問題

我們先來討論如何選取價值最高的狀態–動作對問題,讀者可能會疑問:直接選取數值最高的不就好了?但是實際上並不是這樣的,偶爾我們還是需要機器做出一些“錯誤”的決定的。
我們先來看這樣一個問題:
假設這樣一個場景,在狀態s時,有兩個動作A,B可以選擇,以下是我們得到的一些經驗,A0代表執行A並獲得收益0。

  • A-0
  • B-1
  • A-0
  • B-2
  • B-1
  • A-7
  • A-8
  • A-6
    如果我們只知道前四項經驗,我們可能會理所當然的認為選擇A動作沒有收益,從而偏向於在每一次狀態s的時候都選擇B動作,但是,這種判斷並不一定是正確的。
    然而,在實際的控制過程中,由於經驗的數目是有限的,我們很難保證我們獲得的經驗資料就能夠全面說明事物之間狀態轉換的規律了。所以,有一個思想是:我們不能完全信任我們得到的樣本,在進行決策判斷的時候,偶爾還是要做一個”錯誤”的決策,來嘗試得到新的樣本,這就好像是從學校到家每次都是走的同一條路,你已經習慣了走這條路並且“認為”這條路是離你家最近的,但是偶爾某一天你心血來抽從另一條小路回家,發現這條路竟然更近!我們的決策裡面,正是要模擬這一過程,以探索得到最佳的答案。

1.1.1.ε-貪婪探索

為了尋求哪一個策略是最優控制策略,我們總是想給自己的探索留一些餘地,正如之前的例子,如果根據經驗,擅自把策略選擇動作A的概率變為了0,那可能最終得到的就不是一個最優策略了。所以為了預防這種情況的發生,我們總是想留一個餘量,好讓程式有可能選擇到經驗上的次優解上,這個餘量就是ε貪婪中的ε係數。
其演算法核心思想如下:

π(a|s)={ε/m+1εifa=argmaxaAQ(s,a)ε/motherwise
此時,程式將以1ε的概率選擇當前經驗收益最高的動作,以ε的概率隨機在所有備選動作之中進行選擇。
之後,如果新的策略收益更高,就接受新的策略,並作為當前最高期望來比較。

1.2.價值函式的更新

價值函式的更新基本思想還是之前的文章所提到的蒙特卡洛學習以及時間差分學習的思想。在這裡我想要補充一點的是前文所提到的時間差分學習只假設了一階馬爾科夫情況。即當前時態的價值只和上個時態相關。但是實際中,某個狀態的影響可能會影響好幾個世代,這和簡單的一階馬爾科夫是相悖的。但是這個問題不難解決,只要我們把馬爾科夫鏈加長就好了,這就是TD(λ)演算法,這個λ就是我們假定的馬爾科夫鏈長度。
我們知道,在一般的時間差分演算法中,狀態的更新是這樣的:

V(st)V(st)+γ(Rt+1+αV(st+1)V(st))
而在TD(λ)中,狀態更新就變成了:
V(st)V(st)+wt+nγ(Rt+n+αV(st+n)V(st))
其中wt+n表示世代權值,世代距離更新時態越遠權值越低。