基于半监督学习的多层感知器生成对抗网络
2019-12-04王格格
王格格,郭 涛,余 游,苏 菡
(四川师范大学 计算机科学学院,成都 610101)
1 引 言
随着信息技术的飞速发展,人们能够以更加快速、廉价的方式来获取大量缺少标记的数据,而为这些数据提供标记则相对困难.因为标记数据的过程成本较高,并且需要大量的人力物力,甚至必须依赖于少数领域专家来完成.传统的以标记数据为基础的机器学习模型已经远不能满足数据分析和处理的要求,数据量大而所获知识和价值甚少是机器学习领域的一大困境[1].半监督学习(Semi-Supervised Learning,SSL)试图让学习器自动地对大量未标记数据进行利用以辅助少量有标记数据进行学习[2],从而解决监督学习的模型泛化能力不强和无监督学习的模型不精确等问题,因此半监督学习可以最大限度地发挥数据的价值.随着深度学习[3]在计算机视觉[4]、自然语言处理[5]和语音识别[6]等多个应用领域取得突破性进展,半监督深度学习成为了自然的需求,因为对海量标记样本的需求在很多应用中都难以被满足是目前深度学习的主要障碍.Kingma等[7]采用叠加的生成模型学习标记样本和无标记样本的隐变量并使用SVM对学习的隐变量进行分类.Rasmus等[8]把自编码器的编码层和解码层之间加入短路连接,然后使用分类器对自编码器学习的特征进行分类.Dai等[9]通过最小化按顺序拼接的自编码器的重构误差学习出序列数据的隐特征.生成对抗网络(Generative adversarial network,GAN)作为深度学习中一种新的生成模型[10-12],在图像生成方面具有良好的表现,而在标记数据较少的情况下,能否利用GAN所学到的样本内容分布和强大的对抗学习能力来提升网络分类性能成为了近几年新的研究热点.Springenberg等[13]强制判别器对于真实样本输出单热向量,对于生成样本输出均匀向量.Sutskever等[14]提出一种输出分布匹配方法用作半监督学习中的正则化项,并用GAN对网络进行训练使得生成的虚拟样本类别分布与真实样本类别分布相匹配.Dai等[15]证明半监督学习情况下,一个差的生成器能够更有利于判别器进行半监督的学习.Augustus[16]提出半监督生成对抗网络(Semi-Supervised GAN,SGAN),强制判别器输出类标签,实现了在只有少量标记数据的情况下,大量未标记数据能辅助判别器提取不同类别图像的特征,从而影响判别器的分类效果及泛化能力.但SGAN上的判别器是由线性卷积层组成,其抽象层次较低,不能提取图像更深层次的特征,从而不能完整学习到各个类别之间的差异性,因此分类精度不高.本文提出半监督多层感知器生成对抗网络(Semi-Supervised Multilayer Perceptron Generative Adversarial Network,SMPGAN),采用多层感知器卷积层代替SGAN判别器上的线性卷积层对底层概念的每个局部特征做一个更好的抽象,并接收大量无标记数据、少量标记数据,以及生成器生成的数据以提高正确分类率,解决了监督分类中因标记数据太少产生的模型泛化能力不强的问题;在生成器上使用特征匹配,能够将生成数据分布尽量与真实数据分布拉近,进一步促进了判别器提取图像不同类别特征的能力.实验结果表明,SMPGAN的分类精度及其生成的图像质量都有明显提高.
第1节为引言,第2节介绍了半监督学习,第3节介绍了传统的GAN以及SGAN的基本原理,第4节对SMPGAN的多层感知器卷积层、模型结构和损失函数进行了详细的介绍,第5节是实验结果及分析,第6节为结束语.
2 半监督学习
在传统的监督学习中,模型通过对大量有标记的训练样本进行学习,从而可以用来预测从未见过的示例数据的标签.然而,获取这样的标记数据比较困难,因为可能需要耗费大量的人力物力,但在实际生活中未标记数据却大量存在,而且获取的成本也较低.另一方面,只使用少量的标记样本训练出的模型往往不具备很好的泛化能力,并且放弃对大量未标记数据的使用也是对数据资源的极大浪费.
半监督学习是结合监督学习与无监督学习的一种学习方法,它通过使用少量的标记数据以及大量的未标记数据来改善模型的性能,使其比在只使用标记数据的情况下得到更好的分类或识别结果,从而充分利用了大量的无标签数据资源,并提高了模型的泛化能力.
半监督学习的基本设置为给定一个来自某未知分布的有标记示例集L={(x1,y1),(x2,y2),…,(x|L|,y|L|)}以及一个未标记示例集U={x1,x2,…,x|U|},期望学得函数f:X→Y可以准确地对示例x预测其标记y[17].其中,xi,xj∈X均为d维向量,yi∈Y为示例xi的标记,|L|和|U|分别为L和U的大小,即它们所包含的示例数.
3 半监督生成对抗网络(SGAN)
3.1 生成对抗网络(GAN)
生成对抗网络(GAN)由一个生成器G和一个判别器D构成,生成器G负责将采样于先验分Pz(z)的随机噪声z映射成类似于真实数据分布Pdata(x)的生成数据分布PG(z);判别器D可以看成是将数据映射到判别概率的函数:D(x)→(0,1),其被训练用于判别输入的数据是来自于真实数据分布Pdata(x)还是生成数据分布PG(z).G和D在相互对抗训练的过程中,分别不断提高自己的生成能力和判别能力,直到PG(z)足以完美匹配Pdata(x),则判别器将会对所有输入给出0.5的概率值,此时,两者也达到了一个动态的纳什均衡[18].可以将这样的训练任务看作是具有值函数V(D,G)的极大极小博弈,由公式(1)给出定义:
(1)
其中,D(x)表示D判断真实数据是否真实的概率,而D(G(z))是D判断G生成的数据是否真实的概率.G应该希望自己生成的数据越接近真实越好,即G希望D(G(z))尽可能的大,此时V(D,G)会变小,对G来说应该最小化.而D的能力越强,越能正确判别出真实数据和生成数据,D(x)应该尽可能大,D(G(z))应该尽可能小,此时V(D,G)会变大,因此对D来说应该最大化.GAN的流程图如图1所示.
图1 GAN流程图Fig.1 GAN flow chart
3.2 半监督生成对抗网络基本原理
半监督生成对抗网络(SGAN)由一个生成器G和一个能够进行多分类的判别器D组成,且二者均为卷积神经网络.SGAN通过在大量无标记数据的基础上加入少量标记数据,不仅实现了GAN判别器作为分类器以对输入数据进行正确分类,而且在大量无标记数据的辅助下,避免了传统分类方法在少量标记数据上产生的过拟合问题.原始GAN判别器D的最后一层是以Sigmoid单元结束的,限制了网络只能输出(0,1)的概率值,即输出的值接近于1表示输入数据为真实数据,接近于0则表示输入数据为生成器G生成的数据.这种概率值很重要,因为通过它,D能够将梯度反馈给G,从而可以提高G生成逼真图像的能力.但SGAN将Softmax激活函数作为D的最后一层,让D可以输出N+1个类别,其中N为原始数据集类别数目,而第N+1类则代表生成器生成的数据为“假”,即D输出的N+1个单元对应为[class1,class2,…,classN,fake].此时,D也充当了分类器的角色,并且具有三种不同的输入数据源用于训练,即真实有标记数据、真实无标记数据和生成器生成的数据.一方面,判别器通过学习区分真实无标记数据和生成的数据,可以很好地捕获到真实无标记数据具有的特定特征,并且能够帮助生成器学习生成逼真的图像,这是通过SMPGAN的对抗训练完成的;另一方面,判别器使用真实有标记数据进行监督训练,在能够正确区分真实数据和生成数据的基础上,进一步精确地对数据集类别进行分类.在训练过程中,D实际上同时进行了无监督学习和有监督学习,可以将其称之为D/C网络.SGAN的流程图如图2所示.
图2 SGAN流程图Fig.2 SGAN flow chart
4 半监督多层感知器生成对抗网络(SMPGAN)
4.1 多层感知器卷积层
多层感知器(Multilayer Perceptron,MLP)是一种前向结构的人工神经网络,映射一组输入向量到一组输出向量.MLP的每一层的节点都全连接到下一层,且每个节点都带有非线性激活函数,克服了感知器不能对线性不可分数据进行识别的弱点.MLP作为一个通用函数逼近器,在对局部数据块进行特征提取的过程中,能够逼近潜在概念分布的更多抽象表示,并且MLP同卷积神经网络一样,也是一个深度模型,均通过反向传播进行训练.而传统卷积神经网络的线性卷积层对下层数据块来说只是一个广义线性模型[19],其抽象层次较低,提取图像深层次特征的能力较弱,进而对图像的分类精度不高.因此,本文采用多层感知器卷积层(Multilayer perceptron convolutional layer,MPConv),使用一个含有多层感知器的微网络结构对输入数据进行卷积,使图像局部区域的深层抽象特征能更好地被提取出来.以在判别器上使用Leaky Relu激活函数为例,MPConv执行的计算如公式(2)所示.
(2)
其中(i,j)表示特征映射的像素索引,xi,j是以(i,j)为中心的输入区域,k是索引特征映射的通道,n为多层MPConv的层数,f为每一层数据块执行卷积操作并通过激活函数的最后结果.通过式子可以看出,MPConv首先对每个局部感受野的神经元进行了更复杂的线性运算,然后再通过一个非线性的激活函数,进一步提取图像的非线性特征.并且,这种结构在多通道的情况下还可以实现不同通道上特征映射的线性交互和信息整合,提高了网络的表达能力.
多层感知器卷积层的结构如图3所示,可以看出,一个多层感知器卷积层由一个线性卷积层和一个含有2个全连接层的多层感知器组成.线性卷积层负责提取图像的基本线性特征,而多层感知器的拟合能力更强大,可以提取图像更深层次的线性特征,并且激活函数的使用引入了非线性因素,进一步提升了网络的表达能力.
图3 MPConv结构图Fig.3 MPConv structure diagram
4.2 SMPGAN模型结构
本文对SGAN的判别器结构做了相应的改进,将其线性卷积层替换成多层感知器卷积层,并使用池化层将图像下采样到原始大小的一半.一个多层感知器卷积层和一个最大池化层组成一个微网络结构,而SMPGAN的判别器又由4个微网络结构组成,如图4所示.原始MINIST数据集的图像大小为28×28×1,第一个微网络结构含有32个卷积核,由于实验中卷积参数padding设置为“same”,因此通过MPCONV后的输出图像大小并不会改变,但其通道数会与当前卷积核的个数相同.但通过最大池化层之后,图像会被下采样到其输入前大小的一半,此时图像大小缩减到14×14×32.以此类推,卷积核个数按照上一个微网络结构的2倍逐渐增加,而输出图像大小以输入到当前微网络结构时图像大小的1/2进行减小,通道数则与当前微结构中卷积核的个数相同.直到图像变成1×1×128的大小时,再拉伸成一维张量输入到全连接层,最后再使用Softmax激活函数输出分类结果.表1是SMPGAN的体系结构描述.
图4 SMPGAN判别器结构图Fig.4 SMPGAN discriminator structure diagram
4.3 损失函数
SMPGAN的判别器同时也充当了一个N+1分类器的角色,它接收一个数据点作为输入,输出一个N+1维的逻辑向量:{c1,c2,…,ck+1}.这些逻辑向量可以转换成类概率,其中公式(3)表示x为假的概率,而公式(4)表示x为真实的且属于类i的概率.
表1 SMPGAN的体系结构描述
Table 1 Description of the SMPGAN architecture
生成器•使用4个微步幅卷积(反卷积)学习空间的上采样.•除输出层使用Tanh激活函数外,其他层均使用Relu激活函数.•除最后一层外每一层均使用BatchNormalization.判别器•由4个微网络结构组成,每个微网络由1个多层感知器卷积层和1个最大池化层组成,多层感知器卷积层用于提取图像特征,最大池化层用于将图像大小下采样到输入时的一半.•除输出层使用Softmax激活函数外,其他层均使用LeakyRelu激活函数.•只在第二层和第三层上使用BatchNormalization,因为不在第一层使用能够增加模型的稳定性,不在最后一层使用是因为判别器的最后一层会作为生成器特征匹配中的嵌入层.•第一层和第三层上使用Dropout可以有效减少网络参数,防止模型过拟合.•将其设置成一个最后一层使用Softmax激活函数的N+1类分类器,用于将真实数据正确地分类为N+1类中的类别,将生成器生成的数据分类为第N+1个代表“假”的类别.
(3)
(4)
这样一来,SMPGAN的损失函数就可以由标记损失和无标记损失两部分组成,如公式(5)所示.其中,公式(6)表示标记损失,即分类损失;公式(7)表示无标记损失,即对抗损失,可以看出无标记损失是标准的GAN博弈值,与传统GAN的判别器损失函数相同.
LD=Llabeled+Lunlabeled
(5)
Llabeled=-Ex,y~pdatalog[pmodel(y=i|x,i (6) Lunlabeled=Ex~pdatalog[1-pmodel(y=N+1|x)]+Ex~Glog[pmodel(y=N+1|x)] (7) SMPGAN生成器的损失函数由对抗损失和特征匹配损失两部分组成,如公式(8)所示.公式(9)与传统GAN相同,表示生成器在与判别器进行对抗训练中学习到的对抗损失.特征匹配由文献[20]提出,其原理在于通过为生成器指定一个新的目标来防止它在当前判别器上过度训练,从而解决SGAN训练不稳定的问题.新的目标不是最大化判别器的输出,而是要求生成器生成与真实数据的统计信息相匹配的数据,即训练生成器匹配判别器中间层特征的期望值.对于生成器来说,这是一个自然的统计数据选择,因为通过训练判别器,可以很自然地找到那些最能区别真实数据和当前模型生成数据的特征.特征匹配的损失如公式(10)所示,其中f(x)表示判别器中间层上的激活. LG=Ladversarial+Lfeature-matching (8) Ladversarial=-Ex~Glog[1-pmodel(y=N+1|x)] (9) (10) 本文的实验环境配置为:曙光W740-G20 GPU服务器,Intel Xeon E5-2690v4 2.6GHz 35M 14核心处理器,256GB DDR4 ECC REG内存,300G SAS硬盘,MX FDR 56GB单端口HCA卡,NV TESLA K80GPU卡,TensorFlow平台. 为与SGAN的实验结果进行对比,本文也在MINIST数据集上进行实验验证,经过实验测试,采用小批量随机梯度下降法进行训练,批量参数为512.噪声从[-1,1]的均匀分布中随机采样,采样大小与批量参数相同.生成器为4层反卷积结构,其卷积核大小依次为2,3,4,6,且除第一层步长设置为1外,其余3层步长均为2.判别器由4个微网络结构组成,每个微网络中多层感知器卷积层的卷积核大小均为3,步长为1;而最大池化层的卷积核大小设置为2,步长也为2,用于把图像下采样到输入时大小的一半.学习率参数为0.0002,并使用Adam优化器分别对生成器和判别器的损失函数进行优化.本文在只有25个、50个、100个和1000个标记数据的情况下对SMPGAN做了相应的实验,并在同样的标记数据量的条件下与SGAN的分类结果做了对比,以此证明SMPGAN结构的优越性. 5.2.1 损失函数图像分析 图5是SMPGAN判别器上的标记损失变化趋势图,从图上可以看出判别器的标记损失在整个训练过程中逐渐减小,直到减小到接近于0时网络开始收敛,反映了判别器的分类能力在训练中在不断提升的过程,最终达到一个稳定的最高分类精度值.图6和图7分别是SMPGAN判别器上的无标记损失(对抗损失)变化趋势图和生成器上的对抗损失变化趋势图,判别器的对抗损失在逐渐下降,而生成器的对抗损失在逐渐上升,这正是两个网络进行对抗训练的结果,并且其趋势也符合第4.3节中对抗损失函数的定义,也证明了网络在训练过程中朝着正确的方向在发展,并未出现异常情况.图8是SMPGAN生成器上的特征匹配损失变化趋势图,可以看到其值先出现减小随后又逐渐上升的状态,因特征匹配损失衡量的是真实数据分布和生成数据分布在判别器中间层激活上的距离,在训练初期,真实数据分布和生成数据分布差异较大,判别器能够很容易地将两者分辨出来,随着对抗训练的进行,生成数据分布逐渐拟合真实数据分布,但此时判别器的判别能力还不够强大,不足以正确区分出这两个分布,因此出现特征匹配损失的值逐渐减小的情况.而到训练中后期,随着判别器的判别能力在不断地增强,真实数据分布和生成数据分布能够逐渐被正确区分出来,因此特征匹配损失的值出现逐渐增大的情况. 图5 SMPGAN的标记损失变化趋势图Fig.5 Labeled loss trend chart on SMPGAN 图6 SMPGAN的无标记损失变化趋势图Fig.6 Unlabeled loss trend chart on SMPGAN 图7 SMPGAN的对抗损失变化趋势图Fig.7 Adversarial loss trend chart on SMPGAN 图8 SMPGAN的特征匹配损失变化趋势图Fig.8 Feature-matching loss trend chart on SMPGAN 5.2.2 时间复杂度分析 本文通过卷积神经网络的时间复杂度衡量模型的运行时间效率,因只对SMPGAN判别器的结构进行了相应改进,这里只考虑其判别器卷积层的时间复杂度1https://zhuanlan.zhihu.com/p/31575074.公式(11)是单个卷积层的时间复杂度,公式(12)是卷积神经网络整体的时间复杂度.其中,为当前层输出特征映射的大小;为当前层卷积核的大小;为当前层卷积核的通道数,即输入通道数,也是上一层的输出通道数;为当前层的卷积核个数,即当前层的输出通道数;为判别器上所有卷积层的层数.可以看出单个卷积层的时间复杂度由输出特征映射的大小、当前卷积核的大小、当前层的输入通道数和输出通道数完全决定,而整体卷积神经网络的时间复杂度为所有单个卷积层时间复杂度的总和.而SMPGAN的多层感知器卷积层相较于SGAN的线性卷积层更为复杂,其时间复杂度由卷积层的时间复杂度和多层感知器的时间复杂度两部分组成,因此SMPGAN的时间复杂度会高于SGAN的时间复杂度,即SMPGAN达到其最高准确率需要的运行时间更长. Time~O(M2·K2·Cin·Cout) (11) (12) 5.2.3 分类结果 表2是SGAN和SMPGAN在MNIST数据集上的4种标记样本数量下的分类结果对比.可以看到,当标记样本数量为25和100时,SMPGAN的分类准确率相较于SGAN都提高了1%左右;而当标记样本为50个时,SMPGAN的分类精度提升相对较高,比SGAN在相同的标记样本数量下提高了5.8%;当标记样本数量为1000时,两者的分类结果相差不大,但都能达到96%左右的精度,证明了半监督学习在少量标记样本的辅助下有助于分类精度的提升.通过在4种不同的标记样本数量下进行实验的结果显示,SMPGAN的分类精度均高于SGAN,证明SMPGAN判别器上的多层感知器卷积层结构和其生成器上的特征匹配在对分类结果提升方面的有效性. 表2 SGAN和SMPGAN在4种标记样本数量下的分类结果 标记样本数量SGANSMPGAN10000.9640.9671000.9280.945500.8830.941250.8020.812 图9、图10、图11和图12分别是SGAN和SMPGAN在25个、50个、100个和1000个标记样本下的ROC曲线对比图.因SGAN和SMPGAN的判别器都为多类分类器,为了便于比较,本文的ROC曲线采用10个类别的ROC曲线平均值绘制.可以看出,当标记样本数为25的时候,SGAN的ROC曲线有高于SMPGAN的ROC曲线的地方,但SMPGAN的AUC值仍大于SGAN的AUC值;当标记样本数为50和100的时候,SMPGAN的ROC曲线明显高于SGAN的ROC曲线,两者的AUC值差别也较大;当标记样本数为1000的时候,SGAN和SMPGAN的ROC曲线将近重合,两者的AUC值也相差甚小,这与表2的分类结果相对应.但在这四种情况下,SMPGAN的AUC值都一直高于SGAN的AUC值,进一步说明SMPGAN训练出的分类器性能更好. 5.2.4 图像生成结果 图9 25个标记样本下的ROC曲线对比图Fig.9 Comparison of ROC curves under 25 labeled samples 图10 50个标记样本下的ROC曲线对比图Fig.10 Comparison of ROC curves under 50 labeled samples 图11 100个标记样本下的ROC曲线对比图Fig.11 Comparison of ROC curves under 100 labeled samples 图13和图14是SGAN生成的图像和SMPGAN生成的图像,从视觉效果上看出,SMPGAN生成的图像比SGAN生成的图像更加清晰真实,且更具多样性.因SGAN和SMPGAN主要是用于图像半监督分类,所以本文重点并不在图像生成上面,但是通过SMPGAN生成的图像可以看出,在一定程度上提升判别器捕获图像深层特征的能力,促使生成器生成更接近于真实样本的图像,进一步说明了GAN的判别器和生成器在进行对抗学习、相互博弈的过程中能够互相影响的特点. 图12 1000个标记样本下的ROC曲线对比图Fig.12 Comparison of ROC curves under 1000 labeled samples 图13 SGAN生成的图像Fig.13 Image generated by SGAN 图14 SMPGAN生成的图像Fig.14 Image generated by SMPGAN 本文提出了半监督多层感知器生成对抗网络(SMPGAN),通过将SGAN判别器上的线性卷积层替换成多层感知器卷积层以提取图像潜在的抽象特征,在大量无标记数据的基础上加入少量有标记数据,并将判别器转换为一个N+1类分类器以实现在少量标记训练数据上进行分类,避免了传统分类方法中的过拟合问题.同时,在生成器上使用特征匹配进一步提高模型的分类能力.在MINIST数据集上的实验表明,在标记数据为25个、50个、100个和1000个的情况下,SMPGAN的分类精度均高于SGAN的分类精度,且SMPGAN生成的图像相较于SGAN也更加清晰.5 实 验
5.1 参数设置
5.2 实验结果及分析
Table 2 Classification results of SGAN and SMPGAN under 4 kinds of labeled sample numbers6 结束语