Deep Kernel Density Estimation - 李新春的文章 - 知乎
显示的定义并求解分布 P m o d e l ( x ) P_{model}(x) Pmodel(x),可以定义出密度函数,PixelRNN/CNN 可计算出样本产生的概率真实解,Variational 可计算出样本产生的概率近似解。
学习一个模型 P d a t a ( x ) P_{data}(x) Pdata(x),而无需显示的定义它,无法定义出密度函数。
现在对环境区域(图示那个指定像素点的附近区域)上使用CNN,取待生成像素点周围的像素,把他们传递给CNN用来生成下一个像素值,每一个像素位置都有一个神经网络输出,该输出将会是像素的softmax损失值,我们通过最大化训练样本图像的似然来训练模型,在训练的时候取一张训练图像来执行生成过程,每个像素位置都有正确的标注值,即训练图片在该位置的像素值,该值也是我们希望模型输出的值。
参考:【2017CS231n】第十三讲:生成模型(PixelRNN/PixelCNN,变分自编码器,生成对抗网络)-- 金刚哥葫芦娃
相对于PixelRNN,PixelCNN训练更快(由于上下文信息已知,在训练时可以并行卷积),图像的产生过程还是逐像素的序列生成,依然很慢。
1 序列产生,慢
2 根据给定已生成的像素生成后续的像素,生成的图片固定,不可控制生成
概率密度函数可以写出,但是不能求出精确值,只能近似求解。
PixelRNN和PixelCNN生成固定图像,而VAE可以通过控制噪声来生成各种各样的图像。
半小时理解变分自编码器 - 多头注意力的文章 - 知乎
变分自编码器(VAE)直观理解and 数学推导 - 琦子k
自编码利用重构损失来训练低维的特征表示。
z中保留x中重要的特征信息,训练目标是使得x与 x ^ \hat{x} x^差距最小为最优。
编码器用来进行图像分类,无监督特征学习。
思考一个问题:“自编码器和内容生成之间的联系是什么?”。一旦对自编码器进行了训练,既有编码器又有解码器,但是仍然没有办法来产生任何新内容。乍一看,可能会认为,如果隐空间足够规则(在训练过程中被编码器很好地“组织”了),可以从该隐空间中随机取一个点并将其解码以获得新的内容,就像生成对抗网络中的生成器一样。
可以通过解码从隐空间中随机采样的点来生成新数据。生成数据的质量取决于隐空间的规则性。【在生成任务中我们更关注解码器,生成器其实是训练过程中的辅助,就像GAN里的判别器一样】
但是,自编码器的隐空间的规则性是一个难点,它取决于初始空间中数据的分布、隐空间的大小和编码器的结构。因此,很难先验地确保编码器以与刚刚描述的生成过程兼容的方式智能地组织隐空间。
为了说明这一点,再看一遍之前给出的示例,在该示例中,描述了一种强大的编码器和解码器,可以将任何N个初始训练数据放到实轴上(每个数据点都被编码为实值)并可以没有任何损失地解码。在这种情况下,自编码器的高自由度使得可以在没有信息损失的情况下进行编码和解码(尽管隐空间的维数较低)但会导致严重的过拟合,这意味着隐空间的某些点将在解码时给出无意义的内容。尽管这种精挑细选的一维例子太过极端,但可以注意到自编码器的隐空间规则性问题是普遍的,值得特别注意。
进入隐空间的编码数据之间缺乏结构是很正常的。的确,在自编码器的训练任务中,没有什么东西保证能够得到这种结构:自编码器仅以尽可能少的损失为目标进行训练,而不管隐空间如何组织。因此,如果对架构的定义不小心,那么在训练过程中,网络很自然地会利用任何过拟合的可能性来尽可能地完成其任务……除非明确对其进行规范化!
为了能够将自编码器的解码器用于生成目的,必须确保隐空间足够规则。获得这种规律性的一种可能方案是在训练过程中引入显式的正规化(regularisation)。因此,变分自编码器可以定义为一种自编码器,其训练经过正规化以避免过度拟合,并确保隐空间具有能够进行数据生成过程的良好属性。
就像标准自编码器一样,变分自编码器是一种由编码器和解码器组成的结构,经过训练以使编码解码后的数据与初始数据之间的重构误差最小。但是,为了引入隐空间的某些正则化,我们对编码-解码过程进行了一些修改:不是将输入编码为隐空间中的单个点,而是将其编码为隐空间中的概率分布。然后对模型进行如下训练:
首先,将输入编码为在隐空间上的分布;
第二,从该分布中采样隐空间中的一个点;
第三,对采样点进行解码并计算出重建误差;
最后,重建误差通过网络反向传播。
为什么要取exp?
因为编码器学到的σ可能是负数,但是标准差都是正数。
最小化目标?
最小化目标是使得σ为0,exp(σ)-1+σ为0,使得m2最小,m2 可看做L2正则化。
使得c服从均值为0,方差为1的正态分布,也可以使c服从自定义的均值和方差。
为什么VAE只能求出近似解?
因为含有变量Z,穷举不出来所有Z,只能从有x的地方产生Z,所以L不可以最大化。
1 $ ||x-\hat{x}||^2 $ 最小
2 对方差的约束
为什么σ是互不相关的?
如果各个σ是相关的,会很复杂。σ不相关,则协方差矩阵只对角线元素非0,其他位置都为0。
看完还不懂生成对抗网络GAN请你咬我|附GAN超全学习材料 - Van Meng的文章 - 知乎
纳什均衡简介 - star chou的文章 - 知乎
在2014年, GANs由Goodfellow 和蒙特利尔大学的其他研究者提出来,包括Yoshua Bengio,提及GANs, Yann LeCun 称对抗训练为“过去10年机器学习领域最有趣的idea”。
GANs 的潜力巨大,因为它们能去学习模仿任何数据分布,因此,GANs能被教导在任何领域创造类似于我们的世界,比如图像、音乐、演讲、散文。在某种意义上,他们是机器人艺术家,他们的输出令人印象深刻,甚至能够深刻的打动人们。
真实分布和生成分布最后达到纳什均衡。
纳什均衡简介 - star chou的文章 - 知乎
生成对抗网络(GANs) 是一种包含两个网络的深度神经网络结构,将一个网络与另一个网络相互对立(因此称为“对抗”)。
为了理解GANs, 你需要知道生成算法是如何工作的,为此,我们最好拿判别算法与之进行对比。
判别算法尝试去区分输入的数据,意思就是,给他们数据实例的特征,他们将预测这些数据所属的标签或者类别。
比如说,给它一封邮件的所有单词,判别算法能够判别这封邮件是否属于垃圾邮件。垃圾邮件是标签之一,从这封邮件中获取的所有单词(词袋)就组成了输入数据的特征。当以数学来表述这个问题,标签被称为y,特征被称为x 。 公式 p(y|x) 的意思是“给定x,y发生的概率”,在这个例子中可以翻译成“给定这些包含的单词,这封邮件是垃圾邮件的概率”。
因此,判别算法是将特征映射为标签,它们只关心这种相关性。
一种去理解生成算法的方法是,它们所做的事情恰恰相反,生成算法并非是由给定特定的特征去预测标签,而是尝试由给定的标签去预测特征。
生成算法在竭力回答这样一个问题:假定这个邮件是垃圾邮件,那么这些特征应该是什么样的? 判别模型关心y和x的关系,但生成模型关心的是“你怎样得到x”, 它允许你获得p(x|y), “给定y,x发生的概率”,或者给定一个类,特征的概率。(也就是说,生成算法也能被用做一个分类器,但是它不仅仅做的是输入数据的分类)。
其他方式去区分生成和判别的方法可以如下:
div是散度不是距离,因为散度不可交换,而距离可交换。
div(Pg,Pdata)的数学表达式写不出来,无法学习参数,也无法进行优化。但是,可以得到Pg和Pdata的采样数据,可以使用这些样本数据表示成div的度量,从而进行学习和优化。
JSD是JS散度,也可称为JS距离,因为可以交换。
maxV(G,D) 是JS散度的度量。