Deepfake换脸-自编码器

自编码器学习的目标:

1. 什么是自编码器

2. 自编码器的分类

3.自编码器的loss怎么计算

4. 自编码器和神经网络的区别

5. DeepFake的训练过程

细节

1. 什么是自编码器

自编码,又称自编码器(autoencoder),是神经网络的一种,经过训练后能尝试将输入复制到输出。自编码器(autoencoder)内部有一个隐藏层h,可以产生编码(code)表示输入。该网络可以看作由两部分组成:一个由函数h = f(x) 表示的编码器和一个生成重构的解码器r = g(h)

2. 自编码器的分类

欠完备自编码器:从自编码器获得有用特征的一种方法是限制h的维度比x小,这种编码维度小于输入维度的自编码器称为欠完备(undercomplete)自编码器。学习欠完备的表示将强制自编码器捕捉训练数据中最显著的特征。

正则自编码器:编码维数小于输入维数的欠完备自编码器可以学习数据分布最显著的特征。我们已经知道,如果赋予这类自编码器过大的容量,它就不能学到任何有用的信息。如果隐藏编码的维数允许与输入相等,或隐藏编码维数大于输入的过完备(overcomplete)情况下,会发生类似的问题。在这些情况下,即使是线性编码器和线性解码器也可以学会将输入复制到输出,而学不到任何有关数据分布的有用信息。理想情况下,根据要建模的数据分布的复杂性,选择合适的编码维数和编码器、解码器容量,就可以成功训练任意架构的自编码器。正则自编码器提供这样的能力。正则自编码器使用的损失函数可以鼓励模型学习其他特性(除了将输入复制到输出),而不必限制使用浅层的编码器和解码器以及小的编码维数来限制模型的容量。这些特性包括稀疏表示、表示的小导数、以及对噪声或输入缺失的鲁棒性。即使模型容量大到足以学习一个无意义的恒等函数,非线性且过完备的正则自编码器仍然能够从数据中学到一些关于数据分布的有用信息。

稀疏自编码器一般用来学习特征,以便用于像分类这样的任务。稀疏正则化的自编码器必须反映训练数据集的独特统计特征,而不是简单地充当恒等函数。以这种方式训练,执行附带稀疏惩罚的复制任务可以得到能学习有用特征的模型。由于自编码器的潜在表示y是对于输入x的一种有损压缩。优化和训练只能让它对于训练集合来说是很好的压缩表示,但并不是对于所有的输入都是这样。为了增加隐藏层的特征表示的鲁棒性和泛化能力,引入去噪自编码器。

去噪自编码器在自编码器的基础上,在输入中加入随机噪声再传递给自编码器,通过自编码器来重建出无噪声的输入。加入随机噪声的方式有很多种。该过程随机的把输入的一些位(最多一半位)设置为0,这样去噪自编码器就需要通过没有被污染的位来猜测被置为零的位。能够从数据的抽样部分预测整体数据的任何子集是在该抽样中能够找到变量联合分布的充分条件(Gibbs抽样的理论依据),这说明去噪自编码器能够从理论上证明潜在表示能够获取到输入的所有有效特征。

3. 自编码器的loss怎么计算

自编码器的过程:

损失函数就是真实的自己和神经网络生成的X的差值。

4. 自编码器和神经网络的区别

但是要注意,自编码器属于无监督学习,也就是说,不同于神经网络,自编码器不需要任何其他的数据,只需要对输入的特征进行提取即可,当然我们要添加一些额外的限制条件来“强迫”自编码器提取我们想要的东西。

Deepfake换脸-自编码器_第1张图片

5. DeepFake的训练过程

这里简单的说一下这个训练过程,假如我们有两个不同的人脸需要交换,我们首先需要设计两个自编码器去生成原来的人脸,即A通过Encoder生成A1,再通过DecoderA生成A2,B通过Encoder生成B1,再通过DecoderB生成B2,这样我们的自编码器能够提取去A或者B的特征,然后通过,解码器去还原A和B。这时候我们使用的编码器是相同的。

然后我们DecoderA和DecoderB对掉,就可以用A生成B2,用B生成A2

 

你可能感兴趣的:(深度学习)