GAN网络的发展(持续更新)

GAN生成对抗网络是最近比较火的深度学习技术,这里记录一下自己学习GAN的笔记,以便日后复习。本文不会给出每种模型的细节,只是提一下主要区别和trick,同时给出相关参考链接。

GAN可以做很多事情,如自动生成动漫人物头像;做pix2pix(image2image)的工作,如给黑白图片上色,基于模糊图片生成高清图片,素描生成真实照片,将风景画“莫奈化”等;也可以用于最近比较火的AI换脸,GAN掉马赛克(修补图片缺失的部分),用于生成万能指纹等。

Auto-encoder

先来复习一下自编码器,自编码器结构如下图所示:

当自编码器训练好后,输入一个随机的code向量到Decoder中,理论上Decoder会生成一张图片。

Auto-Encoder的问题:Decoder的输入向量需要是一张图片经过Encoder生成的,否则无法任意生成图片(随机的输入向量生成的图片不稳定,很难人为构造比较好的隐藏向量),相当于Decoder只认识学习过的图片。

VAE(Variational Auto-Encoding)

在Auto-encoder的基础上做了改进,encoder会生成两组向量,一组代表均值,一组代表标准差,迫使其生成的隐含向量能够粗略的遵循一个标准正态分,这样就可以构造正态分布的向量,通过Decoder来生成稳定图片。(均值和标准差都是假设的,学习过程中会往假设方向更新)在标准差上叠加一组noise(高斯分布的)。

下面定义了VAE的loss=reconstruction_loss+KL_loss,其中KL_loss(latent loss)可以参考https://zhuanlan.zhihu.com/p/22464760的公式推导,假设前提是sample是从正态分布中采样的

loss = reconstruction_loss + latent_loss  

reconstruction_loss = mean(square(generated_image - real_image))  
# latent_loss = KL-Divergence(latent_variable, unit_gaussian)  
# z_mean(均值) and z_stddev(标准差) are two vectors generated by encoder network
latent_loss = 0.5 * tf.reduce_sum(tf.square(z_mean) + tf.square(z_stddev) - tf.log(tf.square(z_stddev)) - 1,1)  

samples = tf.random_normal([batchsize,n_z],0,1,dtype=tf.float32)  
sampled_z = z_mean + (z_stddev * samples)  

VAE比auto-encoder改进了很多(auto-encoder只会记住看过的图片),但是VAE只是更好地学习了对照,而没有真正地学会生成。

GAN

Image-to-Image

DCGAN

GAN最大的问题是难以训练,DCGANGAN的基础上添加了一些trick,拓展了维度,并且训练成功:

1.掉了G网络和D网络中的pooling layer。

2.G网络和D网络中都使用Batch Normalization

3.掉全连接的隐藏层

4.G网络中除最后一层使用RELU,最后一层使用Tanh

5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值