首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google 的神经网络生成图像 (Inceptionism) 自述(含源码下载)

Google 的神经网络生成图像 (Inceptionism) 自述(含源码下载)

作者头像
用户1737318
发布2018-06-05 15:36:43
1.6K0
发布2018-06-05 15:36:43
举报
文章被收录于专栏:人工智能头条人工智能头条

Inceptionism: Going Deeper into Neural Networks

人工神经网络刺激了图像分类和语音识别,取得了显著的最新进展。尽管这些都是基于众所周知的数学方法的非常有用的工具,但是事实上我们对于为什么某些模型的工作很少而其他的没有,理解的出奇的少。让我们看一看一些简单的技术,窥视一下这些网络的内部。

我们训练一个人工神经网络,通过展示数以百万计的训练例子,并且逐步调整网络参数,直到它提供我们想要的分类。这个网络通常包含了10 到30个人工神经元堆叠层。每个图像被馈送到他们称之为下一层的输入层,直到最终到达“输出”层。网络的“答案”来自这个最终输出层。

神经网络的挑战之一是弄明白每一层的作用究竟是什么。我们知道,在训练后,每一层逐步地提取图像的特征,水平越来越高,直到最后一层本质上作出决定图像要显示什么。例如,第一层也许寻找边缘或角落。中间一层解释基本特性来寻找整体形状或组件,像一扇门或一片叶子。最后几层把它们聚集在一起形成完整的解释——这些神经元激活响应非常复杂的事物,如整个建筑物或树木。

可视化所发生的一种方式是将网络倒置,并要求它用提高一个输入图像的方式来引出一个特定的解释。假设你希望了解什么样的图像可以产生“香蕉”状图像。从一个充满随机噪声的图像入手,随后朝神经网络认为是“香蕉”状的方向逐渐调整图像(参见相关研究[1],[2],[3],[4])。就其本身而言,这并不能很好的工作,但如果我们对图像优先施加约束,这些图像应该具有类似的自然图像统计信息,例如相邻像素需要相关的,那么便可以达到目的。

所以这里有一个惊喜:通过训练来区分不同类型的图像的神经网络也有相当多生成图像所需的信息。在不同的类查看一些例子:

为什么这个很重要?我们训练网络,通过给他们简单的展示很多我们想让他们学习的例子,希望他们提取了手头麻烦事的本质(例如,一个叉子需要一个手柄和2到4个尖齿),并学会忽略并不重要的事情(叉子可以是任何形状、任何大小、任何颜色或取向)。但是如何检查网络已经正确地学习了正确的功能?它可以帮助可视化叉子的网络的表示。

事实上,在某些情况下,这表明神经网络寻找的东西并不是我们认为它是的东西。例如,下面是一个神经网络,我们设计的看起来像哑铃:

看起来这已经有哑铃状的图像了,但是似乎没有一张哑铃状的图像是完整的,没有强健的举重运动员举起它们。在这种情况下,网络未能完全提取哑铃的本质。也许是从来没有出现过在没有手臂的情形下拿起哑铃的情况。可视化能够帮助我们纠正这种训练事故。

不用精确地规定我们希望网络要增强的功能,相反,我们也可以让网络做这样的决定。在这种情况下,我们仅仅给网络馈送一个任意的图像或照片,并让网络对照片进行分析。然后我们选择一层,并要求网络增强它检测到的任何功能。每一层的网络在不同的抽象层次处理功能,所以我们生成的特性的复杂度取决于我们选择哪一层给予增强。例如,低层往往产生笔触或简单的装饰品状图案,因为这些层对于诸如边缘和他们的方向的基本特征比较敏感。

左:原图由ZachiEvenor拍摄。右:软件工程师Günther Noack处理后的图像

左:原画由GeorgesSeurat创作。右:软件工程师Matthew McNaughton处理后的图像

如果我们选择更高层,其识别图像的更加复杂的功能,以及复杂的特性,甚至有呈现趋向的整个对象。同样,我们只是从现有的图像开始分析,并将其给予我们的神经网络。我们对网络要求:“不管你看到了什么,我想要更多!“这将创建一个反馈循环:如果一朵云看起来有点像一只鸟,网络会让它看起来更像一只鸟。这反过来将使得网络在下次传递时识别鸟的能力更加强大,直到一只似乎不知道从哪儿冒出来的,高度逼真的鸟出现。

其结果耐人寻味——甚至一个相对简单的神经网络可用于充分解释一个图像,就像儿童一样,我们喜欢看云和解释随机的形状。该网络主要是在训练的动物的图像,所以自然也容易解释动物形状。但是,因为数据被存储在如此高的抽象层面,其结果是这些学习特征的有趣混合。

当然,相对于使用这种技术看云,我们还可以做的更多。我们可以把它应用到任何类型的图像。其结果随着各异的图像会有相当大的变化,因为该输入特性使得网络偏好于确定的解释。例如,地平线往往会充满了古塔和宝塔。岩石和树木变成建筑。鸟和昆虫出现在叶子的图像中。

原图影响了处理后的图像的对象形式的种类

这种技术为我们提供了一种对特定层图像的定性的抽象层面的理解。我们称这种技术“Inceptionism”涉及到了使用过的神经网络架构。可以看到我们的Inceptionism为多对图像及其处理结果建立了画廊,还加上了一些很酷的视频动画。

我们必须更加深入:迭代

如果我们将该算法迭代地应用到它本身的输出上,而且每一次迭代后应用一些缩放,我们会得到无尽的新印象,探索一整套网络知道的事情。我们甚至可以从随机噪声的图像入手启动这个过程,以便结果变成纯粹的神经网络的结果,正如下图所示:

神经网络“梦”——完全由随机噪声产生,使用由MIT计算机科学和人工智能实验室训练的网络。可以看到我们的Inceptionism为上面的图像的高分辨率版本建立了画廊(标记“Places205-GoogLeNet”的图像便是使用这个网络的)。

这里提出的技术帮助我们理解和想象神经网络是如何能够执行困难的分类任务,改进网络体系结构,并且检查在训练中网络学到了什么。它还使得我们想知道神经网络是否可以成为一个艺术的工具——一种混合视觉概念的新方法­——或者甚至在通常情况下阐述创作过程的根源。

以上为googleresearch博客文章的翻译,译者:王辉

原文链接:http://googleresearch.blogspot.com/2015/06/inceptionism-going-deeper-into-neural.html

相关阅读

Naiyan Wang 最接近的两个实现:

http://nbviewer.ipython.org/gist/bbabenko/febcd442dc03afd9fc75

https://github.com/happynear/caffe-windows/tree/master/matlab/demo/Inceptionism

贾扬清的评论:

我觉得除了一些不太重要的细节之外,Naiyan的方法基本上已经非常close了。而且Alex在他的实验当中使用的也是Caffe的模型,Christopher使用的是DistBelief。 主要的不同是除了梯度信息以外,google的方法在最底层的patch上加了一个reconstruction的正则项,来表示“什么样的patch是实际图像当中应该出现的呀”。这个正则可以自行发挥,比如说sparse coding什么的。我不知道能不能说Alex他们用了什么prior(其实没啥,但是公司总还是比较喜欢玩公司秘密什么的概念,所以大家等他们的paper吧)。Facebook的相关论文用了差不多的想法,他们是用adversarial example来生成和实际图像相似的分布。 大图的话,基本上就是fully convolutional net:我们可以把224*224的模型做成fully convolutional的,然后就可以在大图上跑了:每次随机选一块地方update。如果要fancy一些,也可以先生成low resolution的,然后一点一点增加resolution,有点类似于Pyramid的想法。 2015.7.1 更新:Alex把code开源了,code在这里: https://github.com/google/deepdream

以上来自知乎问题:Google 的神经网络生成图像 (Inceptionism) 是怎么做到的?

链接:http://www.zhihu.com/question/31572348

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Naiyan Wang 最接近的两个实现:
  • 贾扬清的评论:
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档