“GANs 之父”Goodfellow亲身传授:深度学习未来的8大方向和入门AI必备的三大技能

时间:2023-01-25 15:35:48

“GANs 之父”Goodfellow亲身传授:深度学习未来的8大方向和入门AI必备的三大技能

近日,被称为“GANs 之父”的 Ian Goodfellow 在 Quora 上回答网友提问。在问答环节中,Goodfellow 不仅介绍了谷歌大脑(Google Brian)目前正在进行的工作,还详细阐述了 GANs 目前碰到的各种问题,以及未来的发展方向。作为《Deep Learning》的作者之一,Goodfellow 也对深度学习的未来发表了自己的见解。此外,作为“机器学习大师” Yoshua Bengio 曾经的学生,对于一些大学生、独立开发者的困惑,Goodfellow 甚至给出了诸如如何选课之类的建议。

以下为 Goodfellow 的回答:



GANs 目前存在的问题及未来


问:谷歌大脑”2017年在做些什么?


 “谷歌大脑”团队相当庞大,每位研究人员都有很大的*来决定自己想做的工作,实现自己的想法,因此很难对我们的工作做一个总结。


你可以在我们的网站上查看我们所做的研究:Research at Google

(https://research.google.com/teams/brain/)


我们会做基础研究,改进机器学习算法;开发计算机系统,驱动机器学习(比如TensorFlow);运用机器学习解决医疗保健、机器人技术以及音乐艺术创作等领域的问题。


我现在所在的基础研究团队致力于研究对抗式机器学习。


问:GANs 能够生成漂亮的名人脸部以及卧室图片,为什么它们在其他上千种的类别(ImageNet)上不能做到如此完美呢?


我们其实也不知道。我们曾经以为是类似 Jensen-Shannon 离散定理小值损失函数使然。对于生成模型来说,如果这个模型足够大,很多损失函数都能够精确复制训练分布。


那么问题是,当模型不够大的时候,发生了什么呢?是不是模型只处理那些实际的样本,却放弃了生成类似训练中的某些类的样本?还是说模型会尽量包括所有的类别,但有时候一些分类聚在一起会产生模糊、不切实际的样本? 根据 Jensen-Shannon 离散定理,是前者。


这个问题我们考虑了很长时间,就是这个原因导致了模型崩溃。之后,我又发现了少数不同的损失函数能够被利用在生成式对抗网络中,比如在数据和模型中间的KL离散值就会更倾向选择后者。这些损失函数一般不会导致模型崩溃,但问题仍然发生了.


在这之后,我认为模型崩溃是由于学习算法中的非收敛性。这也就意味着在生成对抗网络中的 Nash 均衡能够覆盖所有模型,但学习算法可能找不到 Nash 均衡。我当时认为有必要设计一个更好的能够找到 Nash 均衡的可靠学习算法。在后来的几个月里,推理结果显示,有几个理由让我们可以相信现有的算法本应该能够找到 Nash 均衡的: [1706.04156] Gradient descent GAN optimization is locally stable( https://arxiv.org/abs/1706.04156);[1706.08500] GANs Trained by a Two Time-Scale Update Rule Converge to a Nash Equilibrium(https://arxiv.org/abs/1706.08500)


把这些理论结果阐释清楚是很重要的,因为我们在实际操作过程中的生成式对抗网络,未必和理论中的假设是相对应的,理论中的那些断言并没有“生成式对抗网络一定会达到 Nash 均衡状态”来的直接,等等。但是把这些理论成果放在一起,确实会降低我对模型崩溃来自于非收敛性上的自信。


最近我在考虑,模型崩溃可能来自我们利用的神经网络的架构。如果我训练一个自编码器重新构建 ImageNet 图片,然后随机从一个高斯分布中抽取编码值并对其进行解码,所有生成的图像在语义上都是相似的。我本来以为会生成各种各样的完全不像是训练数据的不尽人意的图片。相反,它的模型也崩溃了,尽管根本就没有进行过任何的 GAN 训练。


这让我想到了生成器网络的体系结构,这种结构使它更容易表达包含模式崩溃的函数,而不是对应各种不同样本的函数。我怀疑我们是否看到了类似于幂函数的东西,在这个方法中,通过矩阵的变换,不停地将一个向量与矩阵的主特征向量相乘。显然,生成器网络并没有像幂函数那样做,因为每一层都有不同的参数,但是我想知道我们是否忽略了一些相关的影响。


问:什么情况下,GANs 能够从任意 ImageNet 类别中生成高质量图片(不仅仅是名人或者卧室)?


也许,最好的能生成多样的 ImageNet 分类的 GAN 是辅助分类的GAN:([1610.09585] Conditional Image Synthesis With Auxiliary Classifier GANs - https://arxiv.org/abs/1610.09585)


一定要记住,在训练流程中利用分类标记来把数据划分成不同类别的小组,因此,它更像是几个能够生成不同种类图片的 GANs,而不是一个巨大的 GAN,这样可以避免模型崩溃的问题。


问:一般情况下,对抗性训练能否有效针对对抗样本?


通常来讲,不是。


一般在训练中,如果你用优化算法 X 来创建对抗样本,那么模型会适应算法 X,但在鉴别由算法 Y 产生的对抗样本的时候会出现失败。我和Alexey通过观察各种各样的算法发现了这个影响。


我也听说有人利用很强大的优化算法,发现在一些案例中,模型根本无法适应训练中的对抗样本。Nicholas Carlini 告诉我,在他进行上千次的迭代的 Adam-based attack 训练中,发生了这个情况。


最近,Aleksander Madry 发现,在通过随机重启进行的梯度上升的对抗训练中,他遇到了无法打破的一个模型。无论在 MNIST 数据集,还是在 CIFAR-10 上,我认为还存在很大的缺陷。


如果你想尝试打破 Madry 模型,请看网址:MadryLab/mnist_challenge(https://github.com/MadryLab/mnist_challenge)


问:GANs 会被用于制造签名和破坏识别软件的恶行吗?系统安全专家如何防范这一问题?


所有的工具都能用来做好事或者坏事。锤子可以用来建造一所房子,不幸的是锤子也可以用来当武器。会有人利用 GANs 来做一些坏事。举个例子,下面就有一个通过 GANs 来生成恶意软件的论文:[1702.05983] Generating Adversarial Malware Examples for Black-Box Attacks Based on GAN (https://arxiv.org/abs/1702.05983)


问:对抗学习与强化学习有何不同?他们能像 CNN+RL (卷积神经网络+强化学习)一样一起工作吗?


在传统的机器学习中,有两个概念:成本和参数,训练算法会通过修改参数以降低成本。在对抗式机器学习中,有不止一个“玩家”,每个玩家都有不同的成本和不同的参数。每个玩家只能修改自己的参数,但成本取决于所有玩家。使用对抗性的方法来强化学习是可能的。例如,你可以在对抗样本中训练 RL 代理,以便使它的鲁棒性更强.[1705.06452] Delving into adversarial attacks on deep policies(https://arxiv.org/abs/1705.06452)


问:对抗式机器学习研究有哪些新的、有趣的研究方向?


防御对抗样本是一个非常热门的课题。如果你想研究这个课题,你可以看看我们的 Kaggle 竞赛: NIPS 2017: Targeted Adversarial Attack(https://www.kaggle.com/c/nips-2017-targeted-adversarial-attack/rules)


  • Aleksander Madry 等人发现:使用随机重启迭代算法生成的对抗样本,对机器学习模型进行对抗训练,所得模型在MNIST和 CIFAR上的防御效果非常好。

  • 还有一个热门课题:如何在不同模型之间更好地转移对抗样本(https://arxiv.org/pdf/1611.02770),如何让对抗样本骗过应用在现实世界中的模型 ([1602.02697] Practical Black-Box Attacks against Machine Learninghttps://arxiv.org/abs/1602.02697),用相机从不同的距离和角度观察对抗样本(Robust Adversarial Examples -https://blog.openai.com/robust-adversarial-inputs/)

  • 我个人的很多工作主要是让 GAN 更加稳定、可靠且易于使用。

  • 很多人对于如何将GAN用于文本非常有兴趣。

  • 隐藏信息的对抗技术(Generating Steganographic Images via Adversarial Training -https://arxiv.org/abs/1703.00371)

  • 半监督学习的对抗方法([1605.07725] Adversarial Training Methods for Semi-Supervised Text Classification - https://arxiv.org/abs/1605.07725);([1705.09783] Good Semi-supervised Learning that Requires a Bad GAN - https://arxiv.org/abs/1705.09783)


当然,还有很多其他的研究正在紧锣密鼓地进行,这里就不列出所有研究内容了。


问:您最喜欢用哪些方法来进行超参数优化?


随机搜索——同时利用随机超参数运行25个工作,选择其中的最好的2-3个,接着收紧随机分布,花更多的时间在最好的工作上。然后再运行新的一组25个工作。


差不多每年我都会尝试最新流行的超参数优化器,看看它们是否比随机搜索更优秀。目前为止,我还没有发现能够哪个优化器真正打败上文提到的随机搜索程序。我意识到别人会有不同的体验,相比大多数人,我倾向使用更多的超参数,因为我正在研究环境中使用超参数优化器。



深度学习的未来


问:深度学习会往哪个方向走?( https://www.quora.com/What-is-next-for-deep-learning )


 深度学习接下来还有很多工作要完成。我们要做的是朝多个方向向外扩展研究工作,而不是只朝一个方向前进:


  • 更好的强化学习、整合深度学习和强化学习。能够可靠地学习如何控制机器人的强化学习算法等。

  • 更好的生成式模型。能够可靠地学习如何生成人眼无法分辨的图像、语音和文本的算法。

  • 学习如何学习以及无处不在的深度学习:能实现重新设计自身架构、调整自身超参数等功能的算法。目前仍然需要人类专家来运行“学习如何学习”的算法,但是未来这种算法将更容易部署,各种非专门研究AI的企业都将能够运用深度学习。

  • 安全之于机器学习,机器学习之于安全:将有更多网络攻击利用机器学习来生成自主性更强的恶意软件,造成欺骗性更强的漏洞等。也将有更多的网络防御利用机器学习做出比人类响应更快的响应,检测出更隐秘的入侵等。攻守两方的机器学习算法将互相欺骗,以实施攻击或防御。

  • 活动的动态路由(Dynamic routing)将促使人类构建更大的模型,这种模型处理单一样本所需的计算可能比当前的模型少。但总体而言,超大量的计算仍将是AI的关键;每当我们构建出某个计算量更少的模型时,我们就会想通过并行运行数千个模型来学习如何学习这些模型。

  • 半监督学习和一次性学习将减少训练多种模型时所需的数据量,并使AI的应用范围更加广泛。

  • 未来的研究将侧重于构建几乎从不出错的超稳健模型,这些模型可应用于安全性至关重要的程序中。

  • 深度学习将不断融入到大众文化中,我们将会看到艺术家和流行文化创造者使用它来完成一些我们从未想到的事情。我认为Alexei Efros的实验室和CycleGAN之类的项目正是这股潮流的开端。


问: 未来哪些机器学习领域将会取代深度学习?


深度学习的定义非常广泛,我不确定它是否会被替代。


深度学习意味着学习好几步的处理方法,而不是仅学习一步。从这点上讲,相对于浅显的算法,深度算法的数量未来会激增。


在2006年至2011年间,深度学习非常流行,但深度学习通常意味着要把无监督的学习算法堆积起来,以此来为监督式学习来定义复杂的特征。


从2012年开始,深度学习通常意味着通过反向传播来优化具有可微分函数的深度计算图表中的所有参数。


从目前来看,我们很快就会拥有更具有贝叶斯特性的算法(而不是建立在对最好参数的一个点估计值),这些算法会运用更多不可微分的操作,等等。当我们停下来思考这还算不算的上“深度”的时候,我们可能仍然认为这就是“深度”。

我认为我们将来不会太重视“深度学习”和其他学习算法的区别,深度学习早已经被大家接受了。


问:在未来的 5~10年内,您最期待看到 AI 领域发生哪些变化?


不同的人期待的也不一样,我个人更渴望看到:


  • 能产生对抗式样本的一个有力的防御,能够在像ImageNet一样的真正的数据集里起作用。

  • 对抗式样本能够理论化,类似于我们目前知道的关于一般监督式学习的知识。(比如 NFL原理、VC 理论,等等)

  • 生成式的模型能够起到真正的作用。

  • 高效的样本学习算法能够像人类一样,可以从很少的标记样本中学习。



给大学生和独立研究人员的建议


问:大二学生该如何学习人工智能?


如果你有志向,可以试着动手学习并参加我们的对抗样本竞赛:NIPS 2017: Non-targeted Adversarial Attack(https://www.kaggle.com/c/nips-2017-non-targeted-adversarial-attack)


  • 参加线性代数和概率论课程。

  • 参加教你如何编写适合现有硬件运行的FastCode的课程。这些课程多为硬件设计课程,而不是编程课。如果找不到这类课程,你可以向你的学业导师寻求帮助。

  • 参加教你如何编写高性能、实时多线程的代码的课程。有时这个课题会被归在另一课程中,如操作系统开发或游戏开发。

  • 阅读《Deep Learning》(http://www.deeplearningbook.org/)

  • 选择一个你感兴趣的简单深度学习项目。如果你对在自身爱好或课程项目中应用深度学习没什么想法,你可以选择一些普通的项目,例如在TensorFlow中从零开始构建SVHN分类器。在完成这个项目的过程中,如果你对读过的关于深度学习的材料有疑问,试着在你的项目数据集中运行试验,通过这种方法来弄清楚这些问题。

  • 如果你的大学开设有机器学习、计算机视觉、自然语言处理和机器人学等课程,一定要参加。

  • 申请“谷歌大脑”项目实习。


问:你会鼓励其他领域的人(比如机械工程)来学习 ML (机器学习)吗?


是的,当然会。


比如我崇拜的英雄之一——Geoffrey Hinton,他的博士学位就是实验心理学。

在我看来,在机械工程学中,你会学习很多在机器学习中经常用到的数学工具,因此你不会从零开始。


总之,我们经常发现当一个人带着从其他领域产生的新的想法来到这个领域的时候,这个领域会发生革命性的变化。


问:没有任何技术背景的人如何学习 ML?


掌握一些基础知识还是很重要的,比如线性代数、概率论和Python编程。


但你也不需要知道所有线性代数的知识(出了校园以后,我再也没用过QR分解),所有的概率论的知识(关于组合学、深度学习中的序列重排序我们用的也不多),或者所有的Python编程知识(很多比较晦涩的语言特征实际上被许多公司禁用了)。


想要入门,最好先学习足够的线性代数、概率论和Python编程,只用Python和numpy,你就可以自己进行逻辑回归。


我认为如果你能读懂《Deep Learning》的1-5章,你就能够学会那个工程中除了Python编程之外的所有知识。这是否可行,我也不是很清楚,因为我很难从一个没有任何技术知识的角度去想这件事。很明显,想要从零开始吸收那么多的知识,你需要很大的耐心和付出,但我们会尽量在书中提供更多的细节让你达到这个目的。


问:您最想推荐哪10本书?

 

  1. 首先我会推荐我、Yoshua 和 Aaron 合著的《Deep Learning》。

  2. Chris Bishop 的《Pattern Recognition and Machine Learning》

  3. Daphne Koller 和Nir Friedman 的《Probabilistic Graphical Models》

  4. Stuart Russel 和Peter Norvig 的《AI: A Modern Approach》

  5. Thomas H. Cormen 的《Introduction to Algorithms》

  6. Gayle McDowell 的《Cracking the Coding Interview》

  7. Douglas Stone 等人合著的《Difficult Conversations: How to Discuss what matters most》(The social side of an AI career is extremely important too!)(AI事业的社会面也极其重要!)

  8. A.N. Kolmogorov 和 S.V. Fromin 的《Elements of the Theory of Functions and Functional Analysis》

  9. 如果你对生成式模型或计算机视觉感兴趣: Natural Image Statisticshttp://www.naturalimagestatistics.net/

  10.Georgi E. Shilov 的《Linear Algebra》


问:独立学习者或研究人员如何与 Google、Facebook 或 OpenAI 等大公司、大机构在深度学习领域一较高下?


在“谷歌大脑”(Google Brain),我们经常思考如何选择与他人不同、真正值得做的项目。我在OpenAI 任职期间,这家公司也将选题作为自身战略的重要部分。

 

全世界对 AI 的广泛关注,意味着AI研究已从优化转为博弈论。过去,研究人员可以选择研究他们所认为的好课题。现在,重要的是预测其他研究人员会研究什么,并选择一个可以带来独特优势的课题。