密度估计
密度估计:估计数据的内在分布情况,在上方有一些一维的点,我们用一个高斯函数来拟合这一密度分布情况
PixelRNN
PixelRNN属于显式密度模型,它主要运用链式法则来将求出与训练数据相同的分布,如概率分布或似然建模。如下图所示,要想获得条件概率p需要比较复杂的计算,我们用神经网络来实现。
从左上角一个一个生成像素,生成顺序为箭头所指顺序,每一个对之前像素的依赖关系都通过RNN来建模。
弊端是运算速度过慢
PixelCNN
现在对环境区域(图示那个指定像素点的附近区域)上使用CNN,取待生成像素点周围的像素,把他们传递给CNN用来生成下一个像素值,每一个像素位置都有一个神经网络输出,该输出将会是像素的softmax损失值,我们通过最大化训练样本图像的似然来训练模型,在训练的时候取一张训练图像来执行生成过程,每个像素位置都有正确的标注值,即训练图片在该位置的像素值,该值也是我们希望模型输出的值。
自动编码器Autoencoder
——autoencoder先通过一个encoder将输入图片映射为低维度的特征z,即隐层
——获取了特征z之后,再通过一个解码器decoder将特征重构出输入数据,重构的过程通过计算生成图片和输入图片之间的L2 loss实现。
——训练目标为最小化重构误差
——encoder,decoder可以由全连接层,CNN,RNN模型实现
变分自动编码器VAE
利用VAE,只需要使用有限的数据输入,我们就可以通过隐形参数的调节,获得几乎无限的数量。
这里看了另个视频( 链接.),比较简单的介绍,截了几个图
还有一位大佬的博客,阔以看看
链接,上: https://blog.csdn.net/weixin_40955254/article/details/82315224.
下: https://blog.csdn.net/weixin_40955254/article/details/82315909.
生成对抗网络GANs
它采用了一种“两玩家博弈”的思想,生成器一方试图提高自己生成图片的真实性,以欺骗判别器;判别器一方试图提高自己的判别能力,以判别哪些图像是生成的。
θd来最大化该目标函数;对生成器进行梯度下降,θg进行梯度下降最小化目标函数
最大化这个方程的左边部分就是在训练D,最小化这个方程的右边部分就是在训练G
在实际中,我们定义的生成器目标函数并不能很好地工作,为了提高学习效率,我们接下来要做的是梯度上升算法。我们不再最小化判别器正确的概率,而是进行最大化判别器出错的概率,这样就会产生一个关于最大化的目标函数,也就是最大化log(D(G(z))),现在式子前面有一个负号,可以看出函数图像是左下角函数图像的反转。现在我们可以在生成样本质量还不是很好的时候获得一个很高的梯度信号
完整的GAN训练过程:
先训练K次判别器D,再训练一次生成器G
- 对于判别器网络的k个训练步,先从噪声先验分布z中采样得到一个小批量样本,接着从训练数据x中采样获得小批量的真实样本,下面要做的将噪声样本传给生成器网络,并在生成器的输出端获得生成的图像。此时我们有了一个小批量伪造图像和小批量真实图像,我们有这些小批量数据在判别器生进行一次梯度计算,接下来利用梯度信息更新判别器参数,按照以上步骤迭代几次来训练判别器。
- 之后训练生成器,在这一步采样获得一个小批量噪声样本,将它传入生成器,对生成器进行反向传播,来优化目标函数。
交替进行上述两个步骤。
参考:http://www.kingofstudy.xyz/wordpress/?p=971
https://blog.csdn.net/poulang5786/article/details/80766498