虚拟对抗训练:一种新颖的半监督学习正则化方法

640?wx_fmt=jpeg

特约作者 | 曹凯

本文介绍一种名叫Virtual Adversarial Training (VAT) [1]的方法,是一种对于给定条件标签分布 640?wx_fmt=svg 的数据度量该分布局部光滑性的一种方法。其实就是对于每一个数据点,它的条件标签分布对于局部的扰动鲁棒性怎么样,是否数据的一点小变化,就会导致预测的其标签的大变化。这种情况在研究对抗样本的时候很常见,比如本来一张猫的图片,稍微加了一点扰动,神经网络就将其判为梨这种完全不一样的类别,这显然不是我们想要的。

 

一、动机

为什么会想到用光滑性smooth来做正则化呢?正则化从贝叶斯的角度来看,是加了先验信息到模型里面。而自然界的很多物理系统,都是可以用基于微分方程光滑模型描述。所以作者就想到了把条件标签概率约束成光滑的,在输入 640?wx_fmt=svg 变化很小的情况下,输出 640?wx_fmt=svg 也变化很小。满足光滑的情况下,如果对抗样本相比于原样本变化(某种度量下)很小,那么标签应该也不会有太大变化。

优点:VAT在对抗训练的时候,不需要标签信息,所以可以应用于无监督学习。此外,VAT的计算代价也是很低的。

与Goodfellow提出的监督学习对抗方法adversarial training[2]不同的是,VAT找的方向是能使预测的输出分布偏离现状的方向,而adversarial training找的是使模型预测最大地偏离正确label的方向。我们可以称目前模型预测的label是虚拟label(virtual)。

 

二、方法

  • 一些符号定义

640?wx_fmt=svg 表示输入向量,维度是 640?wx_fmt=svg ; 640?wx_fmt=svg 表示输出标签, 640?wx_fmt=svg 是标签空间;输出分布 640?wx_fmt=svg , 640?wx_fmt=svg 是模型参数;用 640?wx_fmt=svg 表示某一步训练之后的模型参数; 640?wx_fmt=svg 表示有标签的数据集; 640?wx_fmt=svg 表示无标签的数据集。我们使用 640?wx_fmt=svg 和 640?wx_fmt=svg 训练模型640?wx_fmt=svg

  • 对抗训练

要讲VAT,首先要从Goodfellow的adversarial training开始,其损失函数为:

640?wx_fmt=svg

其中, 640?wx_fmt=svg 是一个非负度量函数,度量分布 640?wx_fmt=svg 之间的距离,比如交叉熵,我们可以称 640?wx_fmt=svg 是对抗的扰动,也就是对抗的一方想找出来用于攻击的量,对抗的另一方想尽量减小这个量对模型的影响。对于adversarial training来说, 640?wx_fmt=svg 是真实label 的one-hot编码向量 640?wx_fmt=svg。对于这个优化问题,我们没法得到闭式解,但是对抗的方法本来也就是迭代求解的,我们可以得到近似的解,比如:

640?wx_fmt=svg

或者:

640?wx_fmt=svg

对于神经网络来说, 640?wx_fmt=svg 是可以用反向传播计算的。很明显,对抗方法找到的扰动方向,比随机找一个扰动是要来的好的。

  • 虚拟对抗训练:VAT

那么如果训练样本没有标签,或者有一部分数据没有标签怎么办呢?VAT就是要解决这样一个问题。

我们把 640?wx_fmt=svg 统一记为 640?wx_fmt=svg ,VAT目标函数为:

640?wx_fmt=svg

之前的 640?wx_fmt=svg 是用的label的one-hot编码,这边没有了label,VAT用 640?wx_fmt=svg 近似代表。作者认为如果有标签的样本比较多,那么 640?wx_fmt=svg 是离 640?wx_fmt=svg 比较近的,这也是文章用virtual 这个词的原因。所以在迭代过程中, 640?wx_fmt=svg 用上一步的 640?wx_fmt=svg 代替,损失函数变为:

640?wx_fmt=svg

于是,给整个目标函数加上LDS:

640?wx_fmt=svg

其中, 640?wx_fmt=svg 是有标签数据的负对数似然函数。

整个正则化过程,只有两个超参数 640?wx_fmt=svg 和 640?wx_fmt=svg 。作者实验过程中,将 640?wx_fmt=svg 固定为1,这样就只有一个超参数了。

  • 具体计算

注意到之前算 640?wx_fmt=svg ,如果 640?wx_fmt=svg 换成 640?wx_fmt=svg,那么 640?wx_fmt=svg 永远是0,就没法算了,所以得用到二阶信息。

如果一阶导数为0,则 640?wx_fmt=svg 二阶泰勒展开:

640?wx_fmt=svg

其中,640?wx_fmt=svg 是海森矩阵,记为H。再把 640?wx_fmt=svg 记为 640?wx_fmt=svg 。

那么计算

640?wx_fmt=svg

其中 640?wx_fmt=svg ,640?wx_fmt=svg 是 640?wx_fmt=svg 最大特征值对应的特征单位向量。

为了计算特征向量,作者使用一种能量迭代方法[3],令 640?wx_fmt=svg 是一个随机采样的单位向量,假设 640?wx_fmt=svg与 640?wx_fmt=svg 不垂直,那么随着迭代 640?wx_fmt=svg 就可以让 640?wx_fmt=svg 收敛到 640?wx_fmt=svg 。为了避免算 640?wx_fmt=svg,这边将 640?wx_fmt=svg也近似替代:

640?wx_fmt=svg

那么就可以计算:

640?wx_fmt=svg

原文算法描述如下:

640?wx_fmt=jpeg

作者对算例描述:

640?wx_fmt=jpeg

实验部分:

640?wx_fmt=jpeg

参考文献:
[1].Takeru Miyato, Shin-ichi Maeda, Masanori Koyama, and Shin Ishii. Virtual adversarial training: a regularization method for supervised and semi-supervised learning. arXiv preprint. arXiv:1704.03976, 2017.
[2]. Ian Goodfellow, Jonathon Shlens, and Christian Szegedy. Explaining and harnessing adversarial examples. In ICLR, 2015.
[3]. Gene H Golub and Henk A van der Vorst. Eigenvalue computation in the 20th century. Journal of Computational and Applied Mathematics, 123(1):35–65, 2000.

文章知乎地址:https://zhuanlan.zhihu.com/p/66389797

 

 

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/

 

posted @ 2019-06-20 22:15  人工智能遇见磐创  阅读(364)  评论(0编辑  收藏  举报