# 伊恩·古德费洛：生成对抗网络（GAN）

> GAN 提出者讲解对抗训练的直觉来源、模型稳定性的困难与生成模型的未来。

- 原标题：Ian Goodfellow: Generative Adversarial Networks (GANs)
- 期数：特别节目
- 发布日期：2019-04-18
- 嘉宾 / 主题：伊恩·古德费洛
- 网页版：https://lexfridman-cn.pages.dev/ep/ian-goodfellow/
- 官方页面：https://lexfridman.com/ian-goodfellow/
- 精读字数：约 10358 字（阅读约 23 分钟）

> 本文为 lex.qiaomu.ai 基于原始访谈的 AI 改写中文精读，非官方翻译；引用请注明出处并链接网页版。

2014 年，蒙特利尔的一间酒吧。伊恩·古德费洛（Ian Goodfellow）跟实验室的几个人争论一个想法：能不能让两个神经网络互相当对手，一个负责造假，一个负责识破，让它们在对抗中一起变强。

在场的人几乎都反对，理由很具体。你没法在外层网络的训练循环里再套一个内层网络的训练循环，两个进程会失去同步。这个担心来自经验。当时他们都在做深度玻尔兹曼机，那里面有正相和负相两个同时运行的过程，一个让真实数据更可能出现，一个让模型自己采出来的样本更不可能出现，在 MNIST 上跑得很好，一换到彩色照片就散架，两个进程再也对不齐。

凌晨一点，古德费洛回到家，把代码写了出来。

它跑通了。

五年后坐在这期播客里，他说自己至今没有一个能指认的单一原因，解释为什么 GAN 在图像生成上成立，深度玻尔兹曼机不行。有不少理论论文证明在某些设定下这个算法确实收敛，但那些设定限制得太死，解释不了实践中看到的全部现象。他的结论很朴素：很多机器学习算法，事前预测它表现如何几乎不可能，只能跑实验看结果。

## 深度学习是一个多步程序

古德费洛那本《深度学习》教材的开篇画了一张俄罗斯套娃图：深度学习是表示学习的子集，表示学习是机器学习的子集，机器学习是人工智能的子集。这张图暗含一件事，深度学习未必等于 AI 的全部。

他自己给深度学习下的定义是：任何涉及学习多个连续步骤参数的机器学习。宽度是并行的操作数，深度是串行的操作数。他把一张计算图读成流程图，深度是图上依次执行的步数，宽度是同时执行的步数。

这个定义跟 2006 年前后的主流叙事差别很大。那时候辛顿证明深度信念网络可以训练，大家兴奋的点是逐层抽象：第一层学边缘，第二层学角，最后某一层学出识别具体物体的"祖母细胞"。古德费洛说，今天没有人真的相信 ResNet 第 150 层是一个祖母细胞，第 100 层是轮廓检测器。**当年的理解是每层学到一种新表征，现在的理解是同一份表征被反复修改。**

> 每一步精炼的都是同一份表征，它把现有的东西磨得更细。某种意义上这有点像推理。这算不上演绎意义上的推理，它是把一个想法拿出来，反复打磨，打磨到足够好用为止。（古德费洛）

他还提到，深度学习和浅层学习的分界线落在有没有串行步骤上，表征好不好是次要的。支持向量机可以有成千上万个输入特征，每个特征乘一个权重，这些乘法全是并行的，串行结构几乎为零。深度学习多出来的那部分能力，来自多步。

## 人类不必打两百万局 Pong

说到今天的瓶颈，他先指向数据。深度学习需要大量数据，尤其是标注数据。有些无监督和半监督算法能减少标注需求，但它们仍然要海量无标注数据。强化学习不需要标签，代价是需要极多的交互次数。

> 人学会打 Pong，用不着先打两百万局、局局都输。（古德费洛）

另一个瓶颈是定位。到今天为止，没有人真的主张把深度学习单独当作智能的全部配料。AlphaGo 里，深度学习只是一个估计价值函数的模块；大多数强化学习算法里，深度学习只是一个估计下一步该做什么动作的模块。整套系统是拼起来的。

他押注的方向是多模态。今天训练出来的模型，绝大多数只吃一种数据。人脑不一样，视觉、听觉、触觉、骑车、开车、跟人说话、读书，全在同一段人生里积累。他的判断是：**如果给模型一份真正整合的、能闭环交互的多模态数据集，再把它放大，今天这批算法可能就够了，能学出很有意思的东西。**

## 能形式化的意识，和不能形式化的意识

聊天中间两人哲学了一会儿。古德费洛把"意识"拆成两个版本。

一个是自我意识，也就是智能体知道自己存在于世界里，会基于这个事实做规划。这个版本的定义对计算机科学家是可操作的，而且强化学习算法已经在被迫建模自己对环境的影响。训练得当的话，这种有限版本的自我意识已经存在了。

另一个版本是关于主观体验的，比如 qualia。他不知道怎么把这个变成科学问题。你没法设计一个实验，判断对面这个人是不是哲学僵尸，做着和人完全一样的信息处理却没有内在体验。同样，你也没法设计一个实验，判断一套高级 AI 系统有没有在这个意义上醒过来。

## 对抗样本从"机器学习的毛病"变成了"安全责任"

他自己说，这几年对对抗样本的看法变了很多。一开始他把它当作机器学习的一个大缺陷，目标是缩小机器和人类面对对抗扰动时的反应差距。现在他更多把它看成一类安全漏洞。

> 我现在更多地把它们当作一种安全责任，而不是某种证明机器学习本身有独特毛病、人类没有的东西。（古德费洛）

关于能不能拿对抗样本当提升准确率的工具，答案比想象中复杂。2014 年他做的第一个对抗训练分类器，在 MNIST 上不但扛住了部分对抗样本，干净数据上的准确率还提高了。这个结果复现过好几次：用弱对抗样本训练，分类器会更准。

**但换成别的数据集，或者换成更强的对手，这个红利就消失了。**面对真正强的对手，你得付出代价，准确率和鲁棒性之间存在权衡。

他把这个思路放回工程传统里看。很多工程分支都会做最坏情况分析，保证系统在最坏情况下能用，也就顺带保证了它在真实世界里那些 messy 的平均情况下能用。自动驾驶领域现在也是这个路子：主动去找系统会怎么出错，能扛住所有难例，就用一种经验性的方式说明系统是靠得住的。

语音识别的例子更有画面感。2016 年有一篇叫 Hidden Voice Commands 的论文，做出了人听不懂、但手机能识别成攻击者指定指令的声音。之后攻击方进展更快，防守方更慢。现在已经能做出这样的音频：人听起来是一句正常的话，背景里有点沙沙的杂音，手机却把它识别成完全不同的另一句话。那些沙沙声本身就是对抗扰动。

## 写一章深度学习，只写活下来的东西

彼得·诺维格邀请他为《人工智能：一种现代方法》第四版写深度学习章节。他的做法有点反常规：先等了一年才动笔。

帮他做出判断的，恰恰是写过一整本教材的经验。第一本书出版之后，他能看到哪些话题在几年里站住了，哪些显得多余。这个后视视角让他在写单章时能大刀阔斧地砍。

另一个让他安心的观察是：这个领域稳定到 1980 年代的一些核心想法现在还在用。他刚入门时，1980 年代的东西几乎全被否定了，后来有一部分又回来了。凡是撑过时间检验的，他才写进去。

写书有两种哲学。一种是写成覆盖一切的参考手册，一种是写成高层摘要，给读者一套理解这个领域的语言，告诉他们哪些概念最重要。第一本书他试图两者兼顾，这一章他选了后者。碰到"学习学习"这种飞快的领域，他干脆只写一段话：这里有个快速演进的方向，你该知道它存在，它可能就是你现在项目里想用的那个卷积网络模块的来源，但把最新的架构和性能对应关系逐条总结出来没有意义。

## 反向传播会退到一个角落，但不会死

辛顿说过我们得扔掉反向传播，从头再来。古德费洛的回应带着一种工程史的耐心。

他的观察是：**当一个算法不再位于研究的关键路径上，它不会死，它只是退到一批专门的场景里。**逻辑回归对今天做语音识别或自动驾驶的研究者毫无吸引力，但它在医学和金融里分析高噪声数据、在需要极快预测的场合里，还有大量用途。

所以他觉得反向传播和梯度下降可以留着，只是它们未必是通往人类级或超人级 AI 所需的全部。

替代方向他给了一个具体的想象：把模型堆叠起来，低层的模型去预测高层模型的参数。这样在顶层，你做的动作是预测不同的参数值会表现如何，梯度计算在这个位置退居其次。这种思路在贝叶斯优化里已经出现了，高斯过程预测不同参数配置的表现，早就用在超参数优化上。问题在于，这些算法都还没能在某个 AI 级别的难题上把 state of the art 真正推上去。

## 机器的短期记忆还差得远

他点名了一个至今没做对的系统：短期记忆。

人类这边，你告诉某人"今天会议三点开"，他听一遍就记住了。不需要你重复"三点开、三点开、三点开"，让他在这个事实上走很多步梯度。机器这边，梯度下降要记住一条具体事实，必须在这条事实上反复迭代很多次。

LSTM 名字里就带着"长短期记忆"，它的机制和人脑的短期记忆并不相同。注意力机制、神经图灵机这类能写存储单元、能立刻用新事实更新自己的结构，都往这个方向试过，还没拿下。他认为这块正需要新的优化算法，或者现有算法的新用法，让系统能闪电般地把一条具体事实写进状态里。

## 1980 年代的书，可能会被重新翻开

聊到符号系统时，他承认那套东西在组装事实上确实更强。1980 年代的系统能做图搜索、一阶逻辑、蕴含推理，问题是对专家输入的依赖太重，覆盖面很窄。

他自己没有往那个方向走。他做的是机器学习安全、生成模型。不过他能看到一条中间路线：可微的知识库，或者某种让模糊的机器学习算法能和知识库交互的接口。神经网络本身就是一个可微的知识库。

他给的例子很小，也很说明问题。今天生成模型做出来的人脸经常不对称，两只眼睛颜色不一样的比例远高于现实世界。如果有一个知识库能装下"人脸大致对称""两眼颜色大概率相同"这类常识，并且能把这个提示直接注入模型，模型就不用自己从海量数据里重新发现这件事。

他的主张没那么激进：把 1980 年代那套技术扩展一下，让它们和神经网络配合，可能是一条路。

## 两个玩家，一场零和博弈

生成模型是能在一批数据上训练、然后生成新数据的模型。你有一堆猫的照片，想生成更多猫的照片，或者估计一个关于猫的概率分布，用来判断一张新图是猫的概率有多大。

生成模型内部还分门派。有些擅长造有些擅长造新数据，有些擅长估计密度函数，告诉你某条数据来自训练分布的可能性有多高。GAN 偏向造样本这一侧。少数变体比如 Glow 两样都能做。

造样本这件事是从零开始的。它不会去拼照片，不会把这只猫的眼睛贴到那只猫的耳朵上。它先在训练里形成了某种关于概率分布的表征，然后生成一只从来没存在过的猫。

GAN 的特殊之处在于，它是一场博弈论意义上的两人游戏。生成器负责出图，训练刚开始时它出的完全是噪声。判别器负责看图判断真假，一边拿真实照片训练它说"真"，一边拿生成器的输出训练它说"假"。两边一起变强，最后收敛到一个纳什均衡：生成器抓住了正确的概率分布，判别器只能做到随机猜测，因为真样本和假样本看起来同样可能来自任一来源。

## 为什么造出来的不是垃圾

这里有个逻辑上的麻烦，他自己主动挑明了。

生成模型如果严格做到我们要求它做的事，它会做的唯一一件事就是背下训练数据。基于最大似然的模型更是如此：在一份特定训练集上取得最大似然的办法，就是把所有概率质量堆在训练样本上，别处一点都不给。GAN 的博弈也是在训练集上打的，在这个游戏里变得不可战胜的办法，就是字面意义上记住训练样本。

> 生成模型都有这个性质：如果它们真的做到了我们要求它们做的事，它们除了背下训练数据之外什么都不会做。（古德费洛）

那为什么我们得到的不是一堆训练集的复制品？他的前实习生 Vishnu Nair 写过一篇论文，从统计学习理论的角度论证了背下训练数据其实相当难，需要很多学习步、需要对很多变量的大量观察。

但这也没解释另一件事：为什么生成的是一张有说服力的新图，而不是垃圾。可能的图像有多少，模型训练时见过的图像有多少，这两个数字之间的差距大到不可思议。

他给了一半答案。有一篇叫 Deep Image Prior 的论文证明，拿一个卷积网络，参数完全不用学，只用它的架构，就已经能用来补全图像、去噪。这说明卷积网络的架构本身编码了关于图像结构的重要信息。**我们看到的图像生成进展，可能有相当一部分来自架构，而不是来自学习。**

这个推论往远处走一步就不太乐观了。语音上还能做出像样的模型，但生物数据集比如微阵列测量各种酶含量这种，深度学习模型见得很少。视觉上的成功部分归功于我们逆向工程了人类视觉系统，这个技巧未必能原样搬到任意类型的数据上。

## 从读茶叶到寒武纪大爆发

2014 年那篇论文只证明了一件事：这东西能跑。用 MNIST 的手写数字，用多伦多大学人脸库的小尺寸灰度人脸，同事 Bing Xu 做出了第一个 GAN 人脸模型，人脸勉强能认出来。换成 CIFAR-10 那些 32×32 的车、猫、狗，认不出物体。

但当时的深度学习研究者习惯了看失败样本，习惯到能像读茶叶一样读它们。读茶叶的人看出，这些茶叶渣至少和以前的不一样。未必更好，但有些东西很反常。这就够让人兴奋了。

下一个大台阶是 LAPGAN，Emily Denton 和 Soumith Chintala 在 Facebook AI 研究院做的。他们用一套从低分辨率逐级放大到高分辨率的复杂流程，第一次让 GAN 生成出真正好的高分辨率照片。

同年晚些时候，Alec Radford、Luke Metz 和 Soumith Chintala 发表了 DCGAN。这个名字现在听着不太唯一，因为几乎所有 GAN 都是深度卷积的。但这篇论文给了一份真正好用的配方：只用一个模型，不需要多级流程，直接生成逼真的人脸。古德费洛打了这个比方：**这就像动物有了脊椎骨，之后突然冒出各种鱼和四足动物。**DCGAN 成了此后大量模型的骨架，到今天还在被当 baseline 用。

## 一百个标签顶六万个

GAN 后来更有智力含量的进展，不在画质，在用途。

判别器可以改造成分类器。它本来只判断"真或假"，改一下就能判断"这是猫、狗、车还是卡车"。OpenAI 的 Tim Salimans 那篇 Improved Techniques for Training GANs 里，古德费洛是共同作者，但他明说这部分功劳不属于自己。

关键数字在这里：MNIST 上把错误率做到 1% 以下，传统分类器需要大约六万个标注样本。用这个半监督 GAN 方案，一百个标注样本就够了。**标注量减少了大约六百倍。**当然它还是用了远多于一百张的图片，只是不需要每张都标上"这是 1、这是 2"。

麻烦在于，要生成可识别的特定类别物体，你还是得有标签，因为模型得知道"猫"这个类别意味着什么。

Google Brain 的一篇半监督 GAN 论文往前推了一步。他们的目标放在生成可识别的物体上，标签多少是次要约束。基于 BigGAN，他们只用 10% 的标签就达到了 BigGAN 的效果。BigGAN 原本在 ImageNet 上训练，那是一百二十万张全部标注的图。做法近似于聚类：判别器学着把物体归到几组，这个分组理解帮它形成更真实的图像概念，因为它知道每张生成的图都得来自某个原型组，不能是任意一堆像素。

完全没有类别标签会怎样？你会得到看起来像草地、水面、砖墙、泥土的东西，里面没什么主体。部分原因是 ImageNet 的大图里，物体并不占满整个画面。模型学会了造出真实的像素集合，却没学会"物体才是主角，每张图里都得有"。

## 马和斑马会带出草地

CycleGAN 的马变斑马是个经典例子，古德费洛用它说明一件更深的事。

马通常站在草地上，斑马通常站在更干燥的地面上。这两个属性在训练数据里是耦合的。所以你让它把马变成斑马时，它经常连背景一起改，草地变得干枯。**它学到的是联合分布里的相关性，没有学会把"斑马"这个属性从"干旱地面"里切出来。**

同一个现象在无标签生成里反复出现，也构成了"要生成可识别物体就得有标签"的另一面证据。

## 领域对抗：让特征认不出自己来自哪个世界

领域自适应要解决的问题很实际。你在 ImageNet 这种干净数据集上训练模型，部署到用户手机上。用户拍的是暗光照片、运动中的照片、构图歪斜的照片。模型一到新领域，性能经常崩得很难看，因为输入的样子和训练时差太远。

领域对抗的做法是训练一个特征提取器，让提取出的特征在两个领域里统计性质相同。游戏的另一方是领域识别器，它看特征提取器的输出，猜这些特征来自哪个领域。这个结构和真假判别器很像。

特征提取器要做两件事：让领域识别器猜不出来，同时提出对分类有用的特征。有些情况下结果是两个领域表现拉平，代价是原来那个领域的性能被拉低了。也有不少情况两边都真正变好了。

他把博弈这个框架往外推得更远。安全领域的攻防，本质上就是一个攻击者想搞坏你的系统、防守者想建一个扛得住的系统。他甚至说，生成模型可以用来做数据增强，只是他没听说过"训练一个 GAN 造数据、再用这些数据训分类器"这个最朴素的版本真的成功过。

他给了一个更聪明的版本：在同一份训练集上训练一大堆不同的生成模型，从每个模型采样，把样本合起来训练分类器。每个生成模型泛化的方向可能略有不同，抓到不同的变异轴，分类器能从所有这些数据里学到更丰富的东西。有点像集成，只不过集成的是生成器。

## 从病历到合成病人

GAN 有一类用途和"造更多同款数据"无关，和"造出性质不同的数据"有关。

差分隐私合成数据就是这种。你手上有真实的医疗记录，想训一个分类器发布出去，但别人可能从分类器反推出训练数据里的个人隐私。Casey Greene 实验室的论文展示了做法：用差分隐私训练 GAN，从 GAN 里采出来的样本继承和参数一样的隐私保证。你可以造出一批假病人的数据给其他研究者用，他们几乎可以做任何分析，因为这些数据不来自真人，而差分隐私机制对"原始数据被保护到什么程度"给出了明确的数学保证。

公平性上的应用更绕一点。有个常见的误解：想让预测不受性别影响，把性别这一列从输入里删掉就行了。不够。性别可以从很多别的特征里被推断出来。你拿到了名字，没拿到性别字段，但一个叫 Ian 的人，性别基本不用猜。

真正想要的是这样一个模型：它能吃进很多属性，做出准确、信息充分的预测，同时能确信它在内部没有偷偷把性别或者别的敏感变量反向工程出来。做法和领域对抗几乎一样。一方是特征提取器，另一方是特征分析器，目标是让分析器猜不出你想保护的那个敏感变量的取值。古德费洛对这套思路的评价是"相当聪明，而且简单"。

他还给了另一个更远的方向。用 CycleGAN 那种结构，把某一群体的记录转换成另一群体的等价记录。马变斑马、白天变黑夜都见过了，公平性上可以想象成：把 A 组的一个人转换成 B 组里条件相当的一个人，然后看系统对这两份本该等价的输入，给出的待遇是否一致。

> 要让这个转换过程本身是公平的，有太多地方容易出错。我不觉得这离真正能用还差一点点。但如果你能把转换过程设计得非常小心，它可能给你一种审计手段：把这个人从这组换到另一组，系统是不是还按它该有的方式对待他？（古德费洛）

## 深度伪造：接下来几年会颠一下

被问到深度伪造，他的时间尺度判断很清楚。**他担心的是未来几年，二十年之后反倒没那么担心。**

接下来会有一段颠簸的文化过渡期。人们第一次遇上"存在非常逼真的视频和音频，但它们是假的"这件事，会有一段混乱。二十年后再看，人们大体上会明白，不该因为看到了视频就相信它是真的。人们会期待内容带有密码学签名，或者别的能证明真实性的机制。

已经有公司在做这件事。一家叫 Truepic 的创业公司提供验证图像来源的机制。他承认这些机制未必扛得住国家级行为者的攻击，但有人在动手，这条路最终会走通。

他不相信会有那种"看着像素就能判断真假"的终极检测器。恰恰相反，过度依赖检测器是危险的：**如果你做了一个很好的假图检测器，然后有人骗过了它，检测器说这张图不假，那这张图的可信度比没有检测器的时候还高。**检测器给了一种虚假的背书。

他看好的是幕后的估计系统，以及更强的认证体系。想象每台手机都用硬件里嵌的私钥给拍出来的所有内容签名。你没法凭图像本身断定它是真的，但你能确定：某个掌握这台手机私钥的人，在某个时间戳，签了这张图并上传到某个服务器。国家级机构如果真想渗透，可以植入自己选的私钥，或者撬开芯片读出私钥，但那会让资源不那么充足的对手造假变得难得多。

## 一小时出结果的时代过去了

回到酒吧那个故事。被问到深度学习里还有没有这种能被快速验证的突破性想法，他的回答分两半。

有，而且很多。但 GAN 在一小时这个尺度上是个离群点。所谓低资源想法，是指在算法层面做一件很不一样的事，然后拿到很大回报。核心机器学习技术这块，比如更好的分类器、更好的强化学习算法、更好的生成模型，他觉得这种机会不太多了。

> 如果今天有那个想法，要证明它有用会难得多。我需要把它跑到 ImageNet 这种规模上，或者高分辨率数据集上，那些要训练很久。你没法一小时训完然后知道这东西是新的、是激动人心的。2014 年，能在 MNIST 上跑通就够了。（古德费洛）

但有些领域还处在那个人人都是外行的阶段。**公平性和可解释性，我们连该怎么做都还不知道。**

可解释性这块，他认为连正确的定义都还没有。而定义一个真正有用的概念，甚至不需要跑任何实验，就能对领域产生巨大影响。

他拿差分隐私作类比。Cynthia Dwork 和合作者给出隐私的数学定义之前，这个概念很模糊。有了定义之后，你就能设计随机化算法访问数据库，并用数学上定量的方式保证每个人的隐私被保护。**定义一到，算法很快就跟着来了。**

现在大家谈可解释性，谈的其实是各自的观点，每个人脑子里对"可解释"的理解都不一样。如果能定义一个可测量的、和可解释性相关的量，那本身就是巨大的跃迁，哪怕还没有能提升这个量的新算法。

## AGI 需要的是同一段人生里的各种体验

聊到通用人工智能，他先排除两条路。靠固定数据集训练，或者靠坐在那里拼命思考，都到不了。

智能体必须在同一段生命周期里真正与环境交互，获得各种各样的体验。今天的情况是，一堆模型各干一件事，每个都只在一个数据集或一个强化学习环境上训练。确实有论文让一套参数在多个环境里都表现良好，但没有一个智能体能够从一种体验无缝过渡到另一种，把一生中做过的所有事真正整合起来。

多智能体环境也类似。那些环境往往高度同质，全是同一类动作类电子游戏。他不认为存在这样一个智能体，能从打游戏切到读《华尔街日报》，再切到预测某个分子作为药物的有效性。

他自己给智能设的测试标准，比图灵测试更工程化。

> 不用先去 CIFAR 网站下载数据、再写 Python 脚本解析它，你直接把一个智能体指向 CIFAR-10 这个问题，它自己去下载、解压、训练模型，然后开始给你预测。我觉得，一个不需要别人替它把流水线上每一步都装好的系统，是真的明白自己在干什么。（古德费洛）

他特意和 AutoML 划清界限。AutoML 走的路子是：人类已经把胶水代码全搭好了，机器只需要在这个框架内把架构设计得很好。他说的更进一步：如果系统自己知道怎么预处理数据，从而成功完成任务，那你就很难说它没有在某种意义上真正理解了任务。他不确定这是不是智能的哲学定义，但这是他很想造出来的东西，有用，而且能说服他 AI 真的往前走了一步。

具体想象是：你给它一个维基百科的 URL，或者干脆打一段话说明你想要什么，它自己去决定该搜什么、下载什么、准备哪些原料。

## 被当成机器人的两个人

聊到最后，主持人提到一个细节：古德费洛说话很稳，没有"呃""嗯"这些填充词，容易剪辑。网上有人因此说他和主持人两个人都可能是机器人。

被要求证明自己是人类，他的回答绕回了自己的研究。

> 用今天的技术证明我是真人，其实挺容易的。今天这场对话没有因为我的训练数据而突然拐去聊股市之类的东西。但一般地说，想仅凭内容本身证明某样东西是真的，极其困难。这是我研究里最重要的收获之一：你几乎可以模拟任何东西，所以你必须退回到一个单独的通道去证明真实性。（古德费洛）

他开玩笑说自己应该在出生的时候把自己上链，"但我没做，所以我没法用我自己这套研究方法"。

## 最该解决的问题：让模型动起来

最后一个问题，他挑的是对抗样本鲁棒性。让机器学习在面对一个想干涉、想控制它的对手时保持安全，是今天的研究者能在所有领域里解决的最重要的问题之一：图像、语言、驾驶。

但他更担心的是还没出现的领域。2002 年问大家手机安全的重要问题是什么，没人能预料到今天我们拿手机干这么多事。AI 也会是这样，商业机会究竟在哪里起飞，事前预测不出来。

能事前确定的是：几乎任何用机器学习做的事，你都会希望别人没法只靠给它看一张奇怪的二维码、或者一个奇怪的输入图案，就让它做对方想做的事而不是你想做的事。这套方法论能跨领域，他同意这个判断。

他提到一类自己看好的解法，不落在某个具体方法上，而是一个类别：**让模型每次预测都发生变化。**

现在的做法是训练完就冻结，此后所有输入都用同一套规则分类。从安全角度这是一只活靶子。同样的输入永远得到同样的输出，攻击者只要不断试，找到一个对自己有利的错误，然后把这个错误重复使用就行。

> 让模型更新自己的预测、让攻击者更难预判会拿到什么结果，会让对手更难真正控制系统、让它做他们想做的事。（古德费洛）

代价是模型永远保持一点神秘感，因为它一直在变。这句话听起来像个玩笑，背后却是他整套研究里最实在的一条经验：**内容本身可以被完美伪造，可信性必须来自内容之外的通道。**这条经验同时适用于一段视频、一张人脸，和一个永远输出相同答案的模型。

## 可以立刻做的事

- 评估模型时把对抗鲁棒性当成独立指标测一遍。别只看干净数据上的准确率，用强力攻击跑一次最坏情况分析，把结果和准确率一起汇报。
- 如果你的系统涉及交易、语音指令、身份验证这类可被利用的输出，就假设攻击者能拿到你的模型或者能反复查询它，先做一遍演练：让自己人去找一个对自己有利的错误。
- 处理敏感属性时，别只把字段从输入里删掉。检查模型能否从姓名、邮编、设备型号这些代理特征里反推出敏感变量，必要时用领域对抗式的特征分析器去验证。
- 需要发布数据或模型又怕泄露个体信息时，优先考虑差分隐私训练加合成数据这条路径，它能给出量化的隐私保证，而不是模糊的承诺。
- 动手做生成模型前，先想清楚你要的是造样本还是估密度。GAN 偏前者，自回归模型和流模型在密度估计上更自然，选型错了后面每一步都别扭。
- 做小样本任务时，试试判别器半监督的思路：一百个标签的效果可能顶得上六万个，先跑这个 baseline 再考虑标更多数据。
- 想让模型认识常识，别指望它从数据里自己发现。设计时留一个注入先验的接口，比如可微的外部知识库，人脸大致对称这种事实没必要让模型自己重新学一遍。
- 判断一个 AI 系统是不是真理解任务，看它能不能自己把流水线搭起来。只会在别人准备好的数据上训练的模型，再高的分数也说明不了这件事。
