Deep Q learning學習筆記

2021-10-03 05:54:03 字數 2507 閱讀 8440

q-learning作為典型的value-based algorithm,訓練出來的是critic(並不直接採取行為,評價現在的行為有多好),因此提出了state value function的概念,方便對每個狀態進行評估

policy-based是不斷的增加reward高的行為發生的概率,而q-learning是不斷的尋找新的actor使得v增大,具體的分類見deeprl 基礎

q-learning要解決的最首要問題是如何估計state value function

目前主流有兩種方法

完整的玩完一整局的遊戲,然後對期間出現過的狀態進行統計,從該狀態開始計算在之後的所有時間裡獲得的reward,就是他的value

缺點:必須將乙個episode玩完才能得到結果,如果遊戲非常長則不能得到多少有效資料。而且,取樣不是無窮多的,很可能一些重要樣本沒採到,那麼訓練損失會很大。

迅速更新value-function,無需等待整局遊戲的結束,但是在state s

ts_t

st​出現的時候,要估計在這之後他會獲得的reward,因此可能會不準確。

知道了如何估計value-function,現在可以正式介紹何為q-function

通常情況下,輸入乙個狀態state,乙個action,q-function將他們對映到乙個值上,表示當前情況的value

q:在state s這裡採取的action不一定就是a,但是我們強制採取action a得到的然後讓他自由的玩下去看他會得到多少reward。

有兩種寫法

(1)左側是標準寫法輸入s,a**q值

(2)右側對於discrete action才能用,輸出一堆值對應著每個可能的action。

其實並不存在新的π』,這個π』只是通過argmax運算q-value得出來的一系列action組成的π。即有q就能找到π』。而且理論上,一定可以找到找到乙個新的π』,這個π』一定比原來的π更好 。

本來是乙個network,左側的network引數變化,右側網路引數同樣會變化,這種target變化的情況不好訓練,因此將右側的網路進行固定。將左側網路訓練n次之後,再更新右側的網路引數。也就是不要他們一起動。(一開始兩個network其實是一樣的)

利用這個action更新公式會有乙個問題,一開始全都沒有sample,q值都是0,這時sample到了a2,之後a2會被一直select,其他的沒有任何的機會。這時候用policy-gradient就沒法更新,根本沒有蒐集到有效的資料。

sample到的資料多了後,actor就越來越有把握,也就可以變小(noise on action),這是一種隨機的亂試,不是完全按照q-function一直進行的,比較奇怪。

在乙個episode的開始加上noise,中間保持不變,(noise on parameters),系統的進行嘗試,explore in a consistant way

有點像policy-gradient,越厲害的action機率越高,q-value有正有負,即使很差的我們也給他乙個機率。保證取樣比較全面

1、不斷的與環境進行互動,將經驗存在buffer中,一般buffer會比乙個episode中產生的所有資料大很多,也就是存著很多組資料。滿的時候丟棄舊的。

2、在每乙個interation中,sample很多data(包括很多過去的資料),更新q。

3、(1)rl最費時的是與環境做互動,train的速度很快,這樣可以將歷史資料進行多次利用。(2)我們希望用來訓練的資料diverse,而很和資料就很diverse。

4、問題:當前的π和歷史的π顯然都不一樣,用歷史資料訓練當前資料?

是可以的,experience只是搜尋了某個場景採取的動作會收穫的獎勵,並不涉及具體的π,因此不必要和π保持統一,可以用來訓練。

學習學習再學習

如果乙個技能足夠複雜 比如從零學程式設計 那就不要指望讀完一本書就可以打天下。多買幾本書同類的書 因為每個作者的出發點是不一樣的,哪怕對同乙個概念都有不同的解釋說明。理解知識的重要過程之一就如牛的反芻一樣,要嚼一遍 嚥下去 再吐出來 再嚼一遍 再嚥下去 所以,既然一本書可以讀幾遍,那麼同一話題多應該...

學習 學習 再學習

原本要使用vs2005開發乙個b s專案的,沒有想到只能先暫時停停了,居然跟不上技術的發展了,呵呵,一直使用delphi delphi也沒能跟上 沒有想到轉到vs2005上竟然有這麼多要學的東西,當然目的是了做乙個好的系統。最近一直在學習asp.net ajax,雖然專案停了,但是我覺得值得,有很多...

只是學習 學習 再學習

通過做 讓我學會了很多東西 什麼 flash div css html js as 雖然都只是皮毛 不過 算是了解那麼一點點吧 哈哈 我還突然發現 我的 數學和英語 進步了不少 而且還都是很實用的 比在學校的進步可快多了 那句話說的很不錯 在你了解了一些皮毛之後你會發現很多東西你都必須去學。因為少一...