2.3 EBGAN
Yann LeCun于2006年首次在机器学习中引入能量模型。所谓能量模型本质上就是一个能量函数U(x),该函数将样本空间里的每一个样本相应地对应于一个能量标量值,该能量值与样本的概率密度函数p(x)有关,具体为:
其中,Z为归一化常数。我们都知道在物理学中,低能量的物质趋于稳定,而高能量的物质趋于不稳定,电子会自发从高能量状态跃迁到低能量状态。受此启发,例如在有监督学习中,对于训练集中的样本x,若(x,y)的标签y是正确的,则赋予(x,y)较低的能量,若标签y是错误的,则赋予(x,y)较高的能量,故能量模型的学习任务是要学得一个“好”的能量函数U(x)。类似地,在无监督学习中,应当在训练数据pdata的流形上放置低能量,其他位置放置较高的能量,如图2-12所示。
EBGAN便是一种将能量模型应用到GAN上的成功尝试,我们先通俗描述如何将能量模型应用在生成模型上[2]。首先,制造一个能量场U(x),U(x)在高概率密度的区域放置低能量值,在其他区域放置高能量值,假设如图2-13a所示,然后依据能量场U(x)调整生成器,使其生成的样本能量减小,如图2-13b所示。
图2-12 能量函数示意图
图2-13 EBGAN原理示意图
在EBGAN中,判别器扮演了能量函数U(x)的角色,对于每一个输入样本,判别器为其赋予能量值D(x),生成器的功能依然是随机地生成样本。在迭代训练过程中,我们希望判别器能对来自训练数据集的样本尽量赋予低能量(最低能量为0),而对来自生成器的样本尽量赋予高能量。需要说明,若不对判别器赋予的最高能量进行数值限制,则会减缓收敛速度。为了避免对生成器的生成样本赋予无穷大的能量,设定能量上限为m,即判别器目标函数为:
其中,[·]+=max(0,·)。所以判别器其实是在“塑造”能量函数U(x)。自然地,生成器的训练目标是生成的样本能量值尽量小,即目标函数为:
在EBGAN中,判别器不是一个简单全连接网络或者卷积网络,而是由一个编码器和一个解码器构成的自编码器,再加一个MSE误差计算层,如图2-14所示。
图2-14 EBGAN判别器示意图
对于输入样本x,先经过一个编码器(ENC)得到样本的编码表示ENC(x),然后将编码表示送入解码器(DEC)得到样本x的重构DEC(ENC(x)),计算重构误差(EBGAN选择均方误差),并将该误差作为样本的能量数值,即
其实EBGAN与正则自编码器有非常紧密的联系。先抛开EBGAN,仅对于一个自编码器,要避免其成为一个简单的恒等映射,即对于任意样本x,均有DEC(ENC(x))=x,也就是说自编码器并没有学得样本的隐变量表示或者提取到样本的特征,而只能完全复制样本。为此,通常我们需要向自编码器添加一些约束正则项,使它只能近似地复制,并只能复制与训练数据相似的输入而不是全部的输入。这些约束强制自编码器决定输入数据的哪些部分被优先复制。在EBGAN中,生成器充当了自编码器的正则项这一角色,因为自编码器被非常明确地指示:尽量复制训练数据集的样本,尽量不复制生成器的样本。同时,使用一个可训练的生成器神经网络作为正则项要比手动设置的正则项具有更大的灵活性。
进一步,对于判别器的自编码器模型,为了防止它产生的样本仅仅簇集在pdata的一个或者几个模式中,EBGAN对编码器添加了PT项(Pulling-away Term),即对于同一批里的样本,我们希望它们经过编码器后可以得到彼此不同的编码。该项使用余弦相似度来量化,即:
其中,S表示样本的编码结果。我们将使用了PT正则项的EBGAN称为EBGAN-PT。
最后,在训练EBGAN时,可以参考以下4条提示内容。
1)判别器的目标函数包括两项,第一项针对训练数据集的样本,第二项针对生成器产生的样本,且第二项的值域被限制为[0,m]。当然我们也希望第一项值域为[0,m],但它并未被[·]+函数限制,可能超出m。理论上第一项的值域上界取决于神经网络的容量和数据集的复杂性。
2)实际在训练EBGAN时,可以先单独在训练数据集上训练判别器(自编码器模型),当判别器的损失函数收敛时,损失函数的值大概说明了自编码器模型对数据集的拟合程度,这时再开始寻找超参数m。
3)超参数m的选择需要谨慎,若m的值过大则容易造成训练的困难和不稳定,若m的值过小则容易造成最终生成的样本失真、模糊。
4)可以在训练开始时选择一个比较大的m,随着训练过程的进行,逐渐减小m的值,并最终衰减为0。