深度学习系列27:VAE生成模型

Posted IE06

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习系列27:VAE生成模型相关的知识,希望对你有一定的参考价值。

1. AE

AE(Autoencoder),自动编码器。
我们常用的encoder-decoder即为最简单的一种AE。训练过程中加上一些扰动,就可以变成去噪自编码器(DAE):

或者用遮盖(MIM,mask image modeling)的方法来加扰动:

2. VAE


损失为重构误差+KL散度,对应GAN中的判别器。
对于每一个样本,需要用神经网络拟合均值 u u u和方差 δ 2 \\delta^2 δ2,然后用标准正态分布采样得到Z,然后再恢复成X。其中方差项是核心,是用来进行对抗生成的关键。重构部分误差项会让 u u u尽量接近真实值,而KL散度会保证生成器拥有标准的随机性。
我们来简单看下keras版本代码:

from keras.layers import Input, Dense, Lambda
from keras.models import Model
from keras import backend as K
# 输入
x = Input(shape=(original_dim,))
h = Dense(intermediate_dim, activation='relu')(x)

# 全连接层计算p(Z|X)的均值和方差
z_mean = Dense(latent_dim)(h)
z_log_var = Dense(latent_dim)(h)

def sampling(args):
    z_mean, z_log_var = args
    epsilon = K.random_normal(shape=K.shape(z_mean))
    return z_mean + K.exp(z_log_var / 2) * epsilon

# 使用均值和方差生成编码结果
z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_log_var])

# 使用解码器恢复数据
decoder_h = Dense(intermediate_dim, activation='relu')
decoder_mean = Dense(original_dim, activation='sigmoid')
h_decoded = decoder_h(z)
x_decoded_mean = decoder_mean(h_decoded)

# 建立模型
vae = Model(x, x_decoded_mean)

# xent_loss是重构loss,kl_loss是KL 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)
vae.add_loss(vae_loss)
vae.compile(optimizer='rmsprop')
vae.summary()

# 开始训练
vae.fit(x_train,
        shuffle=True,
        epochs=epochs,
        batch_size=batch_size,
        validation_data=(x_test, None))

3. CVAE

CVAE是有标签下的条件VAE,最简单的方法,就是通过控制均值来控制生成图像的类别,只需要修改KL散度,从

改成

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于深度学习系列27:VAE生成模型的主要内容,如果未能解决你的问题,请参考以下文章

机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之四(第2章)

深度学习100例-生成对抗网络(DCGAN)生成动漫小姐姐 | 第20天

深度学习100例-生成对抗网络(DCGAN)生成动漫小姐姐 | 第20天

深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天

深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天

《异常检测——从经典算法到深度学习》17 基于 VAE-LSTM 混合模型的时间异常检测