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,就可以看到不同的对未来的预测。
我们对其中一个进行更加深层次的探索,可以看到,他最终可以预测未来很多种情况。
以上。