对抗学习是深度学习中最火的一个领域。网站arxiv-sanity的最近最流行的研究领域列表上,许多都是对抗学习,本文同样也是一篇讲对抗学习的文章。
在这篇文章中,我们主要学习以下三个方面的内容:
从传统机器学习到深度学习
我在UIUC上“模拟信号与系统”课程的时候,教授在一开始就信誓旦旦地说:“这个课程将是你们上的最重要的课程,抽象是工程里面最重要的概念。”
康奈尔大学的课程里面也有“解决复杂问题的方法就是抽象,也就是隐藏细节信息。抽象屏蔽掉无用的细节。为了设计一个复杂系统,你必须找出哪些是你想暴露给其他人的,哪些是你想隐藏起来的。暴露给其他人的部分,其他人可以进行设计。暴露的部分就是抽象。”
深度神经网络中的每层就是数据的抽象表示,层和层之间有依赖关系,最终形成一个层次结构。每一层都是上一层的一个更高级的抽象。给定一组原始数据和要解决的问题,然后定义一个目标函数来评估网络输出的答案,最终神经网络就能通过学习得到一个最优的解。
因此,特征是神经网络自己学习得来的。但是在传统的机器学习中,特征和算法都是人工定义的。
现在的数据的特征、结构、模式都是网络自我学习的,而不是像传统机器学习那样人工定义。所以以前无法实现的AI的算法现在可行了,并且在某些方面超过了人类。
从深度学习到深度对抗学习
很多年前,我学习过拳击。我的拳击教练不让新手问问题,说
新手不知道问什么问题,连问的问题都是错误的,会得到没用的答案,会专注于错误的东西,越学越错。
Robert Half说过“会问问题和会解题一样,都需要一定的水平”
对抗学习的奇妙之处在于所有的东西都是从数据中学习得到的
,包括要解决的问题,最终的答案以及评估答案的标准—目标函数。传统的深度学习中,是由人来决定要解决什么问题,人来决定用什么目标函数做评估。
Deep Mind公司用AlphaGo证明了深度对抗学习的厉害之处。在围棋比赛中,AlphaGo可以自己创造新的下法和招数。这开创了围棋的新纪元,突破了过去几千年的一个瓶颈,达到了新的高度。AlphaGo能做到这点是因为它能自己给自己打分,可以随时计算当前的局势的分数,而不用预先人工定义和预编程。这样,AlphaGo自己和自己下了几百万局的比赛。听起来很像对抗学习吧?