GAN生成式对抗网络视频学习笔记
GAN 生成式对抗网络
用途:人脸生成、图像着色、图像超像素、背景模糊、人脸生成、文字生成图片、卡通头像生成、帧预测
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104231016-1669531491.png></center>
<center><img src = )
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104229451-502857655.png)
GAN工作原理:
随机噪声z:从一个先验分布(人为定义,一般是均匀分布或者正态分布)中随机采样的向量;
真实样本x:从数据库中采样的样本;
合成样本G(z):生成模型G输出的样本
判别器:区分真实样本和虚假样本。对于真实样本,尽可能给出高的评分1;对于虚假数据,尽可能给出低分0
生成器:欺骗判别器。生成虚假数据,使得判别器D尽可能给出高的评分1。
GAN目标函数:
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104228823-705611826.png)
以合成图像为例子:
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104228120-483651382.png)
生成器和判别器之间存在对抗的关系,这也是生成式对抗网络中对抗一词的由来
训练算法:
-
随机初始化生成器和判别器
-
交替训练判别器D和生成器G,直到收敛
(1) 步骤1:固定生成器,训练判别器D区分真实图像和合成图像——赋予真实图像高分,合成图像低分
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104227181-352774997.png)
(2) 步骤2:固定判别器,训练生成器G欺骗判别器D。更新生成器的参数,使其合成的图片被生成器赋予高分
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104226523-90001928.png)
训练策略:
-
随机初始化生成器G和判别器D
-
交替训练生成器G和判别器D,直到收敛
2.1 训练判别器
从数据集采样m的真实样本\(\{x^1,x^2,...,x^m\}\),从一个分布(均匀,正态)采样m个向量\(\{z^1,z^2,...,z^m\}\),通过生成器G得到m个合成数据\(\{\underline{x}^1,\underline{x}^2,...,\underline{x}^m\},\underline{x}^i = G(z^i)\),更新判别器参数\(\theta_d\),最大化目标函数
\[\overline{V} = \frac{1}{m}\sum\limits_{i=1}^mlogD(x^i) + \frac{1}{m}\sum\limits_{i=1}^mlog(1-D\overline(x^i))\\ \theta_d \leftarrow \theta_d + \eta\nabla\overline{V}(\theta_d) \]
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104225978-1732773410.png)
2.2 训练生成器
从一个分布(均匀,正态)采样m个向量\(\{z^1,z^2,...,z^m\}\),更新生成器G的参数\(\theta_g\),最大化目标函数
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104225598-48442254.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104225035-1764175915.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104224059-369825044.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104223274-1269974577.png)
极大似然估计:
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104221497-1927973288.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104220850-42112763.png)
很多情况下,假设数据符合高斯分布是不合理的,数据分布是无法用公式显示写出来的。因此用高斯模型去拟合数据分布,生成的结果总是不令人满意。
需要一个更通用的生成模型可以拟合任意数据分布
生成器:
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104219795-502396991.png)
分析判别器D:
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104217580-1130878494.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104213069-545158050.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104209970-1857036014.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104209027-225587358.png)
GAN到底在做什么事呢?
最大化判别器损失,等价于计算合成数据分布和真实数据分布的JS散度
最小化生成器损失,等价于最小化JS散度(也就是优化生成模型)
cGAN
传统的对抗网络无法控制生成数据的类别
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104208312-2100046318.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104206035-1559127690.png)
GAN VS cGAN
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104204860-1560649007.png)
DCGAN
原始GAN使用全连接网络作为判别器和生成器,不利于建模图像信息,参数量大,需要大量的计算资源,难以优化
DCGAN使用卷积神经网络作为判别器和生成器,提出一系列网络结构和优化策略,有效的建模图像数据
滑动卷积
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104201113-496527145.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104158964-932944487.png)
批归一化:
BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的
优势:1. 加速神经网络收敛 2. 减小神经网络参数对于初始化的依赖
激活函数采用PReLU,当x < 0时仍然可以提供梯度
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104158126-1464753046.png)
![](https://img2020.cnblogs.com/blog/2097416/202009/2097416-20200912104155752-315826464.png)