对抗学习(AL)
对抗学习的核心思想
通过两个模型的相互对抗,使得生成模型(Generator)能够生成越来越逼真的数据,以欺骗判别模型。通俗的一句话进行总结就是道高一尺,魔高一丈。du贩想尽方法贩du,那缉du警在这个与du贩较量的过程中也不断提高了对处理各种贩du的手段。—— 零和博弈,在这个博弈中,一个参与者的收益是另一个参与者的损失,两者收益之和为零。在机器学习中,这通常意味着一个模型的优化目标是另一个模型的劣化。
对抗样本(Adversarial Examples)
对抗样本是指对原始输入数据进行微小、人眼难以察觉的扰动后,导致机器学习模型(特别是深度神经网络)给出错误预测的样本。如,在论文 Intriguing properties of neural networks 之中有关于对抗样本的阐述,原图片是一张大熊猫,给其加上了点噪声之后,模型却将其判断为长臂猿。
那要如何去生成这些对抗样本呢,你要添加多少噪声,添加什么噪声等来生成这些对抗样本。
生成方法
- 通常是利用模型对输入的梯度信息来生成这些扰动。例如,快速梯度符号法 ( Fast Gradient Sign Attack — FGSM) 是一种经典的生成对抗样本的方法,它沿着损失函数对输入求梯度的方向添加扰动,以最大化模型的分类误差。FGSM的思想,在攻击(添加噪声)时根据相同的反向传播梯度调整输入数据来最大化损失,换句话说,攻击使用了输入数据相关的梯度损失方式,通过调整输入数据,使损失最大化。—— 模型的目的是最小化损失,你现在在反向传播的过程中通过损失函数相对于输入图像的梯度来找到最容易迷惑网络的方向,那你前向传播是不是要去优化这些梯度比较大的地方啊,那FGSM的做法就是,既然这部分(梯度大的)是你做的不好的地方,那我就给你这些做的不好加上噪声,在这个过程中去最大化损失。
- FGSM的公式如下,x 是原有的图像特征,相加的这部分就是噪声部分了,基于损失函数对输入图像梯度来进行噪声的添加。通过这种方式,我们可以生成一个对抗样本
,它与原始输入图像
看起来几乎一致,但是在添加噪声后,模型却将其错误分类。FGSM是基于梯度上升的攻击方法。为了让网络犯错,去最大化损失,而怎样可以高效地让网络犯错呢,那肯定就是沿着梯度最大的方向进行调整就行,因此基于LOSS和梯度方向来添加噪声可以有效地来让网络进行犯错。
对抗训练 (Adversarial Training)
在有了对抗样本后,相对应的就有了对抗训练。我们的目的是训练一个能正确分类的模型,因此你添加噪声完后,要基于什么策略,来让模型学习到更鲁棒的特征呢?如何让其可以正确分类对抗样本呢?因此针对目标,就有了对抗训练,对抗训练的优化目标如下:
中括号里的含义为,在样本空间中找到一组loss最大的对抗样本,针对这一定义,我们将其称之为最大对抗样本数据集,那最大对抗样本数据集是模型做的最不好的地方,我们的目的是让其这方面表现优秀,因此外层的min()函数指出了我们的目的,即面对最大对抗样本数据集,要通过对模型参数的更新,使模型在该对抗样本集上的期望loss最小。
总结一下,对抗样本的生成是为了让loss增大,而对抗训练的目标是针对对抗样本实现loss减小,loss增大和loss减小,因此实现了对抗—— battle 。
领域对抗训练(Domain Adversarial Training)
这是一种用于领域适应(Domain Adaptation)的对抗学习技术。当训练数据和测试数据来自不同但相关的领域时,模型性能会下降。领域对抗训练引入一个领域判别器,试图区分样本是来自源领域还是目标领域。生成器(或特征提取器)的目标是生成领域不变的特征,从而欺骗领域判别器,使其无法区分样本的来源。这种方式使得模型能够学习到在不同领域之间具有泛化能力的特征。
其实,就是输出有两个,一个是分类器,分类器的目的是对源域数据进行分类,来尽可能分出正确的标签;另一个是领域判别起,它的目的是对数据进行分类,来尽可能的区分出哪些是源域数据,哪些是目标领域数据,即分出数据来自哪个域。如下图所示,蓝色区域是分类器部分,红色区域是领域判别器部分,绿色区域是特征提取部分。
特征提取器提取的信息会传入域分类器,之后域分类器会判断传入的信息到底是来自源域还是目标域,并计算损失。域分类器的训练目标是尽量将输入的信息分到正确的域类别(源域还是目标域),而特征提取器的训练目标(对抗学习)却恰恰相反(由于梯度反转层的存在),特征提取器所提取的特征(或者说映射的结果)目的是是域判别器不能正确的判断出信息来自哪一个域,因此形成一种对抗关系。
生成对抗网络(GAN)
GANs 是对抗学习在生成模型领域最成功的应用之一,由 Ian Goodfellow 等人于2014年提出。它革新了数据生成的方式,能够生成高度逼真且多样化的数据,特别是图像。
GaN的原理
GANs 的核心是一个生成器 (Generator, G) 和一个判别器 (Discriminator, D) 组成的对抗性系统。
生成器 (G): 它的任务是接收一个随机噪声向量(通常来自一个简单的分布,如高斯分布),并将其转换为一个看起来像真实数据的新数据样本。生成器的目标是生成足以以假乱真的数据,从而“欺骗”判别器。(以du品举例,生成器可以是生成那些看起来像饮料的du品,让判别器判断不出这是du品)
判别器 (D): 它的任务是接收一个数据样本,并判断这个样本是来自真实数据集,还是由生成器生成的“假”样本。判别器的目标是尽可能准确地识别出真实数据和生成数据。(在一箱饮料中,判别器要判别出哪些是du品,哪些是合规的饮料)
GAN的基本架构如下图所示:
训练过程
生成器和判别器在训练的过程中进行对抗。
- 判别器 D 的训练: 固定生成器 G,判别器 D 接收真实数据和生成器 G 生成的假数据。判别器 D 的目标是最大化其区分真实数据和假数据的能力。它会给真实数据高分(接近1),给假数据低分(接近0)。
- 生成器 G 的训练: 固定判别器 D,生成器 G 接收随机噪声并生成假数据。生成器 G 的目标是最小化判别器 D 将其生成数据识别为假数据的概率。换句话说,它试图让判别器 D 相信其生成的数据是真实的,从而使得判别器 D 给其生成数据高分(接近1)。
- 生成器目的是像让判别器判断不出来,判别器是目的是要尽可能的判断出来,因此形成对抗。这个过程可以形象地比喻为造假者 (生成器) 和警察 (判别器) 之间的博弈:造假者不断提升造假能力,试图让警察无法辨别真伪;警察则不断提升辨别能力,试图识别出所有假货。最终,理想情况下,生成器能够生成与真实数据分布几乎无法区分的数据,此时判别器将无法准确判断样本的真伪(例如,给真实数据和生成数据都打出接近0.5的概率)。
损失函数
- 生成器:
上式中,G 代表生成网络,D 代表判别网络,H 代表交叉熵,z 是输入随机数据。 是对生成数据的判断概率,1代表数据绝对真实,0代表数据绝对虚假。生成器的目的是让数据看上去更加真实,因此
应越大越好。
代表判断结果与1的距离。显然生成网络想取得良好的效果,那就要做到,让判别器将生成数据判别为真数据(即
与1的距离越小越好)。
- 判别器:
是真实数据,这里要注意的是,
代表真实数据与1的距离,
代表生成数据与0的距离。判别器是目的是要让真实数据判断准确,生成数据(用来误导的)被判断错误,因此,判别器要想取得良好的效果,那么就要做到,在它眼里,真实数据就是真实数据,生成数据就是虚假数据(即
与1的距离小,
与0的距离小)
优缺点
优点:
- 可以生成逼真的数据
- 无监督学习,可以在大量无标注的数据情况下学习数据的分布
- 多样性,可以捕捉到数据分布的全部多样性
缺点:
- 训练不稳定,训练过程高度非线性,容易出现模式崩溃(如生成器只生成少数几种样本,无法覆盖真实数据的所有多样性)或者梯度消失的问题,导致难以收敛。
- 对超参数敏感,而对最优模型的超参数进行寻找的话,费时费力且可能结果不讨好
- 评估困难,缺乏一套统一、客观的评估指标来衡量生成样本的质量和多样性