图:pixabay
本文作者是waya.ai的创始人Michael Dietz,该作者对生成式对抗网络(GANs)颇有研究,本文,他就深入浅出地为我们介绍了深度学习领域中最火的研究方向,以及面临的相关问题。
对抗学习(Adversarial learning)是深度学习中最受欢迎的领域之一。如果你浏览过arxiv-sanity(http://www.arxiv-sanity.com/)的话,你就会注意到,当前最受欢迎的研究领域的大多数都是在研究这一方向。
而这篇文章将要教给你的是:
解释我们应该关注对抗学习这一领域的原因
简要介绍生成式对抗网络(GAN)及其相关的主要挑战
总结最近的研究(Wasserstein GAN,改进Wasserstein GAN的训练),解决这些挑战并稳定GAN训练(包括实施)
经典机器学习——深度学习
之前我在美国伊利诺伊大学香槟分校看了一场关于“模拟信号和系统课程”的开场演讲,在演讲中教授自信地断言:
这是你最重要的课程,而抽象是工程中最重要的概念。
针对复杂性这一问题的解决方案就是抽象,我们也称之为信息隐藏。抽象只是消除不必要的细节。这个想法是为了设计复杂系统的一部分,你必须确定这是其他人必须知道的那部分,以便设计其部件,以及你可以将哪些细节进行隐藏。其他人必须知道的那部分就是抽象。
—— cs.cornell.edu
深层神经网络学习数据的分层表示。网络中的层,以及他们学习的表现形式是彼此相互建立的,层数越多,抽象层次也就越高。给定原始数据,询问网络的问题以及评估网络答案的目标函数,网络学习以最佳的方式来表示(抽象)此数据。
这个概念的结果是,该网络学习并执行特征工程。与经典机器学习方法相反的是,其中预期包含与手动任务相关的信息的特征被手动识别,并从数据中提取出来,从而降低“学习”算法的输入维度。
当数据的基础结构,模式和机制通过学习,而不是手工制动的时候,AI的以前不可行的应用程序被启用,而其超人性化也将成为可能。
深度学习到深度对抗学习
几年前,我遇见过一个拳击教练,他不会让新的拳击手问问题。因为如果新的拳击手问错了问题,就会得到了他们不需要的答案,然后专注于错误的事情。
提出正确的问题需要与提供正确答案一样多的技能。
——Robert Half
对抗学习的美妙之处在于,我们的网络完全从数据中进行学习——要问的问题,相应的答案以及对这些答案的评估。与经典深度学习方法相反的是,预期与手头任务相关的问题被手动识别,手动制作的目标函数指导我们的网络优化,从而学习相应的答案。
Deep Mind最近展示了AlphaGo深度(对抗)学习的巨大潜力,显示AlphaGo发明了新知识,并在围棋中教授了新的理论。这带来了围棋的一个全新时代,并让玩家破解了一个他们被困了数千载的僵局。AlphaGo能够通过学习一个评估函数来实现这一点,该函数可以在任何给定时刻描述系统的“分数”,而不是尝试手工制动和预编程来执行这一操作。然后,AlphaGo通过数百万次模拟游戏对自己进行了训练。这听起来像对抗学习是吧?
AlphaGo的架构
AlphaGo不仅凭借其自身的强大能力成为世界上最好的围棋选手,它还真正掌握了游戏及其所有的细微之处和复杂性。这是有可能的,因为它不受人类输入的限制,或是我们(我们现在的认知都是有限的)对问题领域的理解(例如在询问,回答和评估问题上)的限制。下一步的目标就是将这些学习方法应用于现实世界中。很难想象AI将如何重塑农业,医疗保健等行业,但这一定会发生的。
生成式对抗网络
我所不能构建的是我所不明白的。
——理查德?费曼(美国知名物理学家)
上述引述激发了我开始着手GAN研究的积极性。 GAN将训练过程理解为两个网络之间的游戏,并允许对通用数据进行对抗学习。
GAN的基本概念:GANs是通过让两个网络相互对抗的方式形成生成式模型
https://blog.openai.com/generative-models/
为了建模真实的数据分布,生成器学习如何生成实际的数据样本,而鉴别器学习如何确定这些样本是否是真实的。怀着对“理解某事的最终表达能够重现它”的信仰,我们觉得我们的目标似乎是值得的。如果我们能够成功地将我们的GAN训练到平衡状态(不管多么完美的鉴别器也无法将生成的样本与实际样本相区分),我们应该可以将这种获得的对数据的理解应用于几乎任何具有最佳性能的任务中。
问题犹存
GAN也是存在一些缺点的,它难以优化,训练不稳定。因此必须仔细设计网络架构,必须认真维护生成器和鉴别器之间的平衡,以便进行训练。在这种模式上下,dropping在GAN中是很典型的(生成器仅学习真实分布中的一小部分),并且由于近乎无意义的学习曲线,是难以对它们进行调试的。
尽管如此,GAN已经取得了最先进的成果,但实际应用却受到这些问题的限制。
解决方案
训练GAN以最小化生成的数据与真实的数据分布之间的距离。最初,Jensen-Shannon分歧被用作这种距离度量。然而,Wasserstein GAN(wGAN)提供了广泛的理论见解,并以经验证明,最小化EMD距离(Earth Mover's Distance)合理和有效的近似,理论上是解决GAN的主要问题(详见上述描述)的较好的优化方法。为了使EMD近似有效,wGAN对评论者(以前称为Wasserstein的鉴别器)施加了权重限制,导致了一些训练失败。
对Wasserstein GAN进行的改进训练,使得非常稳定的GAN训练可以惩罚评论者的对于梯度的规范,因为他们是基于输入而不是限制权重。这个“梯度惩罚”只是被简单地添加到上面描述的Wasserstein距离的总损失中去。
""" | |
wGAN implemented on top of tensorflow as described in: [Wasserstein GAN](https://arxiv.org/pdf/1701.07875.pdf) | |
with improvements as described in: [Improved Training of Wasserstein GANs](https://arxiv.org/pdf/1704.00028.pdf). | |
""" | |
import tensorflow as tf | |
# | |
# define earth mover distance (wasserstein loss) | |
# | |
defem_loss(y_coefficients, y_pred): | |
return tf.reduce_mean(tf.multiply(y_coefficients, y_pred)) | |
# | |
# construct computation graph for calculating the gradient penalty (improved wGAN) and training the discriminator | |
# | |
# sample a batch of noise (generator input) | |
_z = tf.placeholder(tf.float32, shape=(batch_size, rand_dim)) | |
# sample a batch of real images | |
_x = tf.placeholder(tf.float32, shape=(batch_size, img_height, img_width, img_channels)) | |
# generate a batch of images with the current generator | |
_g_z = generator_model(_z) | |
# calculate `x_hat` | |
epsilon = tf.placeholder(tf.float32, shape=(batch_size, 1, 1, 1)) | |
x_hat = epsilon * _x + (1.0- epsilon) * _g_z | |
# gradient penalty | |
gradients = tf.gradients(discriminator_model(x_hat), [x_hat]) | |
_gradient_penalty =10.0* tf.square(tf.norm(gradients[0], ord=2) -1.0) | |
# calculate discriminator's loss | |
_disc_loss = em_loss(tf.ones(batch_size), discriminator_model(_g_z)) - \ | |
em_loss(tf.ones(batch_size), discriminator_model(_x)) + \ | |
_gradient_penalty |
在TensorFlow中执行Wasserstein距离与梯度惩罚
终于,我们可以说,这是我们第一次训练各种GAN架构,而几乎没有超参数调整,包括101层ResNets和离散数据的语言模型!
使用Wasserstein距离的好处之一就是,随着评论者的改进,生成器将会从中得到改善后的梯度。当使用Jensen-Shannon分流时,随着鉴别器的改进,梯度将会消失,而生成器无法从中学习(这是训练不稳定的主要来源)。
如果对这个问题感兴趣,想对这些概念有一个坚实的理论认识,我建议大家阅读这两篇论文:
Wasserstein GAN(https://arxiv.org/pdf/1701.07875.pdf)
Improved training of Wasserstein GANs(https://arxiv.org/pdf/1704.00028.pdf)
实现
详见github中开源代码:https://github.com/wayaai/GAN-Sandbox/tree/wGAN
结论
对抗学习使我们能够从我们对问题领域的了解存在的任何限制或局限中,释放我们的模型——对于要学习的内容没有任何预想,而且模型可以自由地探索数据。
来源:medium
作者:Michael Dietz