GAN解读
来源:互联网 发布:淘宝如何设置全屏海报 编辑:程序博客网 时间:2024/05/23 02:07
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
资历不深,入坑一年的我仅从个人角度谈谈理解,希望能抛砖引玉。
GAN对于人工智能的意义,可以从它名字的三部分说起:Generative AdversarialNetworks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。
Networks:(深度)神经网络
自从12年AlexNet横空出世后,神经网络俨然已成为现在learning的主流。比起贝叶斯学派的强先验假设(priori),SVM在核函数(kernel)上的反复钻研,神经网络不需要科研者过多关注细节,只需要提供好海量的数据和设置好超参数,便能达到不错的效果。用武侠小说的方式来说,便是各大门派高手潜心十余载修炼一阳指/九阴真经/麒麟臂等神功,比试时却发现有一无名小卒内力浩瀚如海,出手虽毫无章法可言,但在内功的加持下,轻松打得众人抬不起头。
Deep系列的算法不仅在众多benchmark上霸据榜首,其衍生应用也给人工智能带来了一股新的浪潮,例如创作艺术品(Gatys 的 Neural Alorightm for Artistic Style),AlphaGo(CNN估值 + 蒙特卡洛剪枝),高质量的机器翻译(Attention + seq2seq)等等。这些衍生应用在部分任务上,已经能媲美人类中的专家,让人不禁浮想强人工智能(strong AI)的到来。然而,纵使深度网络(Deep Neural Networks)再强大,它也有自己的局限,生成模型上的不尽人意便是其中之一。
Generative(Model):生成模型
机器学习的模型可大体分为两类,生成模型(Generative Model)和判别模型(Discriminative Model)。判别模型需要输入变量 ,通过某种模型来预测 。生成模型是给定某种隐含信息,来随机产生观测数据。举个简单的例子,
- 判别模型:给定一张图,判断这张图里的动物是猫还是狗
- 生成模型:给一系列猫的图片,生成一张新的猫咪(不在数据集里)
众所周知的imagenet-1000图像分类,自动驾驶的图片语义分割,人体骨架点的预测都属于判别模型,即给定输入预测某种特征。实际上12~14年的大部分工作都属于判别模型,为什么呢,原因之一便是判别模型的损失函数(loss)方便定义。
回到根源,什么是机器学习?一句话来概括就是,在训练过程中给予回馈,使得结果接近我们的期望。对于分类问题(classification),我们希望loss在接近bound以后,就不要再有变化,所以我们选择交叉熵(Cross Entropy)作为回馈;在回归问题(regression)中,我们则希望loss只有在两者一摸一样时才保持不变,所以选择点之间的欧式距离(MSE)作为回馈。损失函数(回馈)的选择,会明显影响到训练结果的质量,是设计模型的重中之重。这五年来,神经网络的变种已有不下几百种,但损失函数却寥寥无几。例如caffe的官方文档中,只提供了八种标准损失函数Caffe | Layer Catalogue。
对于判别模型,损失函数是容易定义的,因为输出的目标相对简单。但对于生成模型,损失函数的定义就不是那么容易。例如对于NLP方面的生成语句,虽然有BLEU这一优秀的衡量指标,但由于难以求导,以至于无法放进模型训练;对于生成猫咪图片的任务,如果简单地将损失函数定义为“和已有图片的欧式距离”,那么结果将是数据库里图片的诡异混合,效果惨不忍睹。当我们希望神经网络画一只猫的时候,显然是希望这张图有一个动物的轮廓、带质感的毛发、和一个霸气的眼神,而不是冷冰冰的欧式距离最优解。如何将我们对于猫的期望放到模型中训练呢?这就是GAN的Adversarial部分解决的问题。
Adversarial:对抗(互怼 )
在generative部分提到了,我们对于猫(生成结果)的期望,往往是一个暧昧不清,难以数学公理化定义的范式。但等一下,说到处理暧昧不清、难以公理化的问题,之前提到的判别任务不也是吗?比如图像分类,一堆RGB像素点和最后N类别的概率分布模型,显然是无法从传统数学角度定义的。那为何,不把生成模型的回馈部分,交给判别模型呢?这就是Goodfellow天才般的创意--他将机器学习中的两大类模型,Generative和Discrimitive给紧密地联合在了一起。
模型一览
<img src="https://pic1.zhimg.com/50/v2-5dfe9e846a1ad37160dfdad80f0b784c_hd.png" data-rawwidth="384" data-rawheight="453" class="content_image" width="384">
对抗生成网络主要由生成部分G,和判别部分D组成。训练过程描述如下
- 输入噪声(隐藏变量)
- 通过生成部分 得到
- 从真实数据集中取一部分真实数据
- 将两者混合
- 将数据喂入判别部分 ,给定标签, (简单的二类分类器)
- 按照分类结果,回传loss
在整个过程中, 要尽可能的使, (火眼晶晶,不错杀也不漏杀)。而 则要使得 ,即让生成的图片尽可能以假乱真。整个训练过程就像是两个玩家在相互对抗,也正是这个名字Adversarial的来源。在论文中[1406.2661] Generative Adversarial Networks ,Goodfellow从理论上证明了该算法的收敛性,以及在模型收敛时,生成数据具有和真实数据相同的分布(保证了模型效果)。
从研究角度,GAN给众多生成模型提供了一种新的训练思路,催生了许多后续作品。例如根据自己喜好定制二次元妹子(逃),根据文字生成对应描述图片(Newmu/dcgan_code,hanzhanggit/StackGAN),甚至利用标签生成3D宜家家居模型(zck119/3dgan-release),这些作品的效果无一不令人惊叹。同时,难人可贵的是这篇论文有很强的数学论证,不同于前几年的套模型的结果说话,而是从理论上保证了模型的可靠性。虽然目前训练还时常碰到困难,后续已有更新工作改善该问题(WGAN, Loss Sensetive GAN, Least Square GAN),相信终有一日能克服。
从通用人工智能高层次来看,这个模型率先使用神经网络来指导神经网络,颇有一种奇妙的美感:仿佛是在辩日的两小儿一样,一开始两者都是懵懂的幼儿,但通过观察周围,相互讨论,逐渐进化出了对外界的认知。 这不正是吾等所期望的终极智能么 -- 机器的知识来源不再局限于人类,而是可以彼此之间相互交流相互学习。也难怪Yann Lecun赞叹GAN是机器学习近十年来最有意思的想法https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f 。
- GAN解读
- Generative Adversarial Nets (GAN)解读
- 解读GAN及其 2016 年度进展
- GAN for NLP (论文笔记及解读
- 解读GAN及其 2016 年度进展
- gan
- GAN
- GAN
- GAN
- GAN
- GAN
- GAN
- GAN
- GAN
- 详细解读Ian Goodfellow ICCV2017演讲PPT《解读GAN的原理与应用》
- GAN和Wassertein GAN
- GAN之父NIPS 2016演讲现场直击:全方位解读生成对抗网络的原理及未来(附PPT)
- NVIDIA新作解读:用GAN生成前所未有的高清图像(附PyTorch复现) | PaperDaily #15
- pycharm快捷键及一些常用设置
- 文件
- 软件工程学习笔记1
- MeanShift用于彩色图像分割(OpenCV)
- 欢迎使用CSDN-markdown编辑器
- GAN解读
- 【say something】
- C#匿名方法实现Java匿名类功能
- spark(4)-高可用HA zookeeper原理及环境搭建
- PAT乙级 1028. 人口普查 C语言
- HDU 2700 Parity【字符处理】
- Java实现Python的for...else或while...else逻辑结构
- Linux系统运行时出现的问题
- 隐藏标题栏,状态栏,导航栏,显示全屏