产生图像时,每次产生一个像素点。也就是,训练一个网络,输入为一个三维的vector,输出为另外一个三维的vector。可以使用Pixel RNN进行图像生成、语音生成等。
如果需要练习,可以提供该课程提供的792个Pokemon突袭那个,图像为20*20大小,数据库地址。实验结果如下图:
VAE生成语言,输入为sentence,输出也为sentence。对于输入的数据,在code space上进行等距连接,然后选取稍微偏移的点,进行decode,产生输出数据。这对应了autoencoder的方式,而生成对应了在code space中间加入了噪声,即下图中, m1,m2,m3 m 1 , m 2 , m 3 对应了编码的区间, σ1,σ2,σ3 σ 1 , σ 2 , σ 3 对应了编码的噪声,而指数化则将其转换为正数。 e1,e2,e3 e 1 , e 2 , e 3 从高斯分布中得到,对应了标准的分布情况。限制项对应了对于方差进行限制,即 exp(σi)−(1+σi) e x p ( σ i ) − ( 1 + σ i ) 较小值在方差为1处,此时就对方差完成了限制。
为了在code space中选取的点能够恢复成类似输入的类别,可以在code space中间引入部分噪声,要求在噪声范围内的输出的MSE最小,这样能够较好的保证在code space中的采样点能够恢复出类似原始输入的数据。
通常对于VAE的解释如下,每一个图片可以看作是高维空间的一个点,而VAE则是估计高维空间的点分布,即计算出 P(x) P ( x ) ,选取的输出在概率较大的地方。这里使用Gaussian Mixture Model进行解释,如下图所示,复杂的概率分布可以看作是多个高斯分布通过不同的加权叠加的结果。在进行概率分布计算时,首先决定从哪一个高斯分布进行取样,然后再计算该高斯分布的概率,这也就对应的全概率公式的形式。
首先,从multinomial distribution(多项式分布)中选取m,此时m为正整数;对于每一个m,都存在均值和方差,则可以得到m对应的高斯分布,最后得到 p(x|m) p ( x | m ) 。对于实际操作,需要决定有多少个mixture,然后根据数据,采用EM方法,可以得到权重、均值和方差。进一步地,我们可以采用离散分布估计来进行VAE操作,而不是局限于此处的聚类操作。
VAE是Gaussian Mixture Model的distributive representation的版本。首先,从正态分布选取一个z,z为向量,每一个维度代表要选取的每一个特征;然后根据z得到高斯分布的 μ,σ μ , σ ;这里假设 μ(z),σ(z) μ ( z ) , σ ( z ) ,也就是前述的变量都是关于z的一个分布,这个分布同样可以使用神经网络表示,输入为z,输出为均值向量,对于方差矩阵,可以将其向量化或者采用输出对角线元素,nondiagonal元素为0。最终的概率如下所示:
对于code space中的一个向量z,向量z符合某个分布(一般为高斯分布),需要利用神经网络表示出 μ(z),σ(z) μ ( z ) , σ ( z ) ,这个输出的结果在进行完全的decode后,得到x,需要保证上述p(x)的似然函数最大。如下图所示,可以将似然函数P(x)分解,其中q(z|x)可以为任意概率分布,最后化简的右侧项为KL-divergence,衡量两个概率分布的相似程度(相对熵),得到了下边界 Lb L b 。
最后可以得到,最大似然函数可以表示如下图所示,需要寻找P(x|z)和q(z|x)最大化Lb。这张图解释如下:对于 logP(x) log P ( x ) ,其与q(z|x)无关;而如果能够最大化Lb,则会最小化KL,这意味着似然函数 logP(x) log P ( x ) 与Lb逐渐靠近。
最后化简Lb式子如下图,包含了一个KL-divergence和一个积分项,需要最小化KL-divergence,对应于regularization项的前两个。也就是说,首先对于x,进入decoder,对应的时q(z|x),产生一个z;然后根据z产生x的几率,得到x的mean和variance。
对于VAE,参考的资料如下所示:
进一步地资料如下所示: