1,框架构建
还记得上篇提到的隐含变量Z吗?这个Z就是决定最终x形态的隐含变量。给定一个图片Xk,我们假定P(Z|Xk)代表这些图片的概率分布,并且服从正态分布。然后我们从中采样(重参数见2),并且通过decoder将图片再恢复出来。
简而言之,就是encoder,对相应的输入数据,通过网络(两个dense层)产生了均值和方差。为了避免var为0(因为引入噪声数据),使模型具有持续的生成能力,VAE 要求每个P(Z|Xk)都向正态分布看齐。
而decoder,则负责对获得的Z解码。
2,重参数技巧
在实际应用过程中,z的值是一个随机变量,反向传播中,我们没有办法对z求导。我们通常用reparametrization trick代替randomly sample,即通过引入一个高斯分布e,将z变成一个确定的值,从而使得反向传播可以得以计算。
3,loss
1,分类损失
2,分布损失
最终loss
xent_loss = K.sum(K.binary_crossentropy(x, x_decoded_mean), axis=-1)
kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
vae_loss = K.mean(xent_loss + kl_loss)