Temporal Difference Variational Auto-Encoder

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,就可以看到不同的對未來的預測。

 

我們對其中一個進行更加深層次的探索,可以看到,他最終可以預測未來很多種情況。

以上。

 

 

 

 

發佈了213 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章