Deepmind 投的ICLR2019的文章。之前沒有認真推導過公式,所以看起來比較費勁。用了幾天,看了看兩套代碼,推了推公式,快過年了,每天放在上面的時間也不多,用了四天才弄了個半懂,下面我展開講一下,希望我之後看我的自己的筆記可以看懂。(之前FudalNet我就忘了,回來看到自己文章,都不知道誰寫的)
首先上一個基礎知識,求高斯分佈的KL散度:(之前一直使用和標準正態的KL,不太瞭解泛化的求解公式)
另外一個就是知道高斯分佈中sample出來的結果,如何求解log prob:
#LOG2PI = np.log(2.0 * np.pi)
def gaussian_log_prob(mu, logvar, x):
'''Batched log probability log p(x) computation.'''
logprob = -0.5 * (LOG2PI + logvar + ((x - mu)**2 / logvar.exp()))
return logprob.sum(dim=-1)
好了,基礎知識準備好了,開始:
文章動機:
智能體agent在部分可觀測的世界上進行行動的時候,需要根據以往的step獲得的信息尋找一個對未來世界信息的不確定性的表示方法,以獲得更好的策略。爲了滿足上述要求,模型應該具備一下三點要求:
(1)對未來世界信息的表示需要是高維度的,並在高維度上進行預測,不應該在org state space 上。
(2)需要是一個belief state ,通過以往step的信息獲得一個後驗的state表示,這個表示應該能夠包含對未來世界信息的預測,來獲得最優的表示。
(3)具備時間抽象能力,即可以跳躍預測,不用爲了預測一個稍微靠後的step,而將之前的step都預測一個遍。
因此本文提出了一個結合了時序差分法的變分自編碼器,該編碼器的提出主要是爲了解決當前時序模型的存在的問題
自迴歸模型,如RNN,存在以下問題:
(1) 只能在原始空間預測(比如輸入是1,2,3,4那麼預測的結果也只能是數字,不能是a,b,c,不存在高維表示,因此不能再高維預測,儘管RNN可以高維表示,但是卻不能進行預測,比如output1預測output2,相互之間沒有必然關聯)
(2) 是step model,即每次向後預測一步,不能跳步,test的時候,如果想要預測多步之後的,需要把新預測出的結果,重新feedback到網絡中。(如果可以在高維空間表示,偏差會小一些)
VAE AE等編碼器state space model,可以將obs space映射到high level space上,通過encoder(後驗)以及decoder(先驗)來實現。
因此我們將VAE與自迴歸模型結合起來
state sequence , obs sequence ,因此聯合概率可以寫爲:,給定obs獲得z表示的後驗分佈爲
其中這個z就是三點要求中的第一條的high level state,其中把x1到xT的過往狀態分別映射到高維b,可以理解爲
RNN的output,便是上面要求的第二點 belief state
需要根據前面小於t的state來進行下一步的預測,因此左邊的公式經過推導得到右邊的公式
下面是我手推的過程:
這裏面有一個小問題就是換到kl的地方有一個小於等於(我寫的小於),這個地方我沒太明白,希望知道的指點一下。
最後得到上面式子的結構
最後經過下面的過程:得到最終結果
本篇文章的實驗部分:(我只抽取兩個我比較感興趣的)
這個的缺點是沒有和別的方法做對比。比如直接和LSTM對比
第二個是在較爲複雜的世界裏面,通過sample出數據(mu sigma 高斯分佈的sample),decode的左邊圖片可以看到結果一樣,但是經過轉換之後Transition得到的新的z進行decode,就可以看到不同的對未來的預測。
我們對其中一個進行更加深層次的探索,可以看到,他最終可以預測未來很多種情況。
以上。