DeepDream,深海梦魇。
不关注计算机视觉相关领域的朋友可能对这个名词感到非常陌生。如果我告诉你上面的这些图片都是DeepDream的作品,你可能会感叹于这些画作绚丽的色彩和抽象的笔触,充满了一种后现代主义的诡异美感。如果我再告诉你DeepDream其实是一个人工智能的图片生成项目,并且开源于两年以前,你是否会对AI艺术领域会有一个重新的认识。这个曾经给艺术界和技术圈带来强烈冲击和深度触电的项目,至今对生成艺术的发展有长远的影响。
DeepDream,如果把这个项目拟人化,可以说是人如其名。其作品中大面积的漩涡、彩虹般的色彩、繁复的重影会让初次接触的人有一种眩晕感,可能还有一些不适感,尤其是早期由于DeepDream使用大量的动物图片作为训练集,所以生成的图片里充斥着眼睛、鼻子、头、躯干等很难让人接受的元素。
这个项目原本是Google用于图片分析和处理的人工智能系统 Inceptionism,开源之后将很多著名的艺术作品进行了超现实的演绎。其后产生了很多建立在DeepDream基础上的衍生产品,优秀如俄罗斯的Ostagram,将两张图片合二为一,最后的效果让人联想到抽象艺术家的画作。Facebook上也曾经掀起一股狂潮。只要你敢想,敢做,就算一张毫无特色的画作也可以变成抽象艺术作品。
如果仅仅是对DeepDream生成的作品感兴趣,你可以直接拉到文章最后,点击「阅读原文」到Ostagram的官网,把自己一些可能平凡无奇的照片变得有特色起来。
但如果你还想更加深入地了解到DeepDream是如何办到创作这种后现代风格的艺术作品的,你可能就需要耐着性子接着往下看了。下面的文字可能对有过计算机基础的人更加友好,但是我也会尽量写得通俗一些。
DeepDream启始于Google内部的一个图像分类和识别的需求。人工神经网络的发展,以及庞大的图像库如ImageNet的建立,推进了图像分类和语音识别的飞速发展。(注:ImageNet的建立者是华裔女性科学家,斯坦福计算机系副教授李飞飞,感兴趣的可以搜索她的最新TED)对于图像识别,这些神经网络模型非常有效,但是为什么有效以及在哪一层产生了效果,科学家们花了更多的时间去探究这个黑盒子里面的逐步演进。(注:神经网络模拟人脑的神经元传输,通过建立算法并且增加信息传递的层级数量来进化)
先简单介绍一下DeepDream项目的神经网络,这个模型原本是用于图像识别。这是一个由10-30层人造神经元堆叠而成的模型,科学家通过数以百万计的训练实例逐渐调整网络参数,直到创造出他们想要的分类模型。(注:分类是机器学习中的一个常见应用,即输入一堆杂乱无章的元素,计算机找出规律并进行类别划分)每个图像从输入层输入,然后与之后的每一层进行交互,直到最终达到输出层。最终的输出层会给出模型的结果,即识别出图像是什么事物并进行分类。
神经网络层次越深,虽然耗费的算力越多,但最终出来的模型的准确度也会越高。这是因为在模型中,每一层逐渐提取图像的更高层次的特征,直到最后一层基本上对显示的内容可以做出判断。举个例子,如果输入这个模型的图片是一棵树。第一层可能会查找边缘或角落,中间层解释基本特征来寻找整体形状或组件,比如叶子,最后的几层将这些组装成完整的解释,输出相对比较非常复杂的事物,比如树木。最终模型输出的结果就是判断出这个图片是一棵树。在此过程中,每一层的抽取和判断是具有随机性的,所以神经网络最有挑战性和最吸引人的就是了解每一层究竟发生了什么。DeepDream的科学家从这个角度思考,逐渐发现这个原本用于图像识别的系统有了创作抽象作品的能力。
刚刚我们是从神经网络的正向流程去思考问题,即输入一个图像,神经网络就把它识别成什么。如果用反向的角度,寻找输出某一特定值的规律,会不会有其他的发现呢。比如想知道究竟输入什么样的图像最终会输出“香蕉”。于是他们从一个随机噪声的图像开始,然后逐渐调整图像到神经网络认为是香蕉。如下图所示。
然后他们惊喜地发现,那些用来经过训练的图像分类神经网络,其中已经具备了有相当多的信息可以用来生成图像。比如下面这些例子,第一行是羚羊、量杯、蚂蚁、海星,第二行是小丑鱼、香蕉、降落伞、螺丝钉。
不难发现生成的图片还是很抽象的,如果不把图像名称标注出来,恐怕还是很难看出是什么物体的。那这个发现为什么会是一个惊喜呢?这就是艺术作品了吗?这八张图和文章最开始展示的作品差距还很大的。不急,现在科学家们的目的并不是为了生成艺术品,只是单纯的为了研究神经网络每一层的效果而已。
在前面的文章里面说过,建立这个神经网络的目的是为了提取图像的本质特征,并学会忽略那些不重要的信息。举个例子,科学家们希望这个神经网络能够识别出一个叉子的一个手柄和2-4个尖头,因为这是叉子的本质特征。同时它又能忽略掉具体的形状、大小、颜色或方向,因为这些是附加属性。但问题是,神经网络的建立者们如何检查它是否正确学习了这些特性呢?在一层一层的神经网络中,它的学习过程有没有出现偏差呢?如果能够从获取一些神经网络的中间层的可视化展示,无疑是可以在某种程度上帮大忙的。
觉得有点迷糊了吗?简单来说,科学家们想知道神经网络学习过程中每一层的输出,其目的是为了检查学习成果是否正确,而从随机噪音到类似香蕉生成的实验表明,神经网络的可视化是可以实现的。这个和生成艺术品有什么关系?我们继续慢慢说。
科学家们立刻把这个发现应用在真实的神经网络学习中,然后发现事实上,神经网络学习结果的偏差情况还比较普遍。例如,下面是一个用于识别哑铃的神经网络。
这些的确看起来很像哑铃,但是其中没有一个哑铃的图像是完整的。这种情况下,其实网络并没有完全提炼哑铃的本质特征。可视化的方式可以帮助纠正这一类的训练事故,通过人为的调整指导神经网络应该放大哪些特征。
在此之前,所有的一切都只是为了解决问题,那如果让网络自己做出决定呢?可视化的目的不是为了纠正,而是为了观察呢?观察神经网络在不控制的情况下,自己演变出来的结果,那出来的图像又会是什么样子呢?
Google的技术人员给网络提供任意的一个图像或照片,让网络进行分析,然后选择一个网络层,增强某一个检测到的属性。神经网络的设计方式会让每一层都会处理不同层次的抽象特征,因此生成图像的特征复杂性取决于选择了增强哪一层。还记得前面提到的树木的例子吗?低层次的网络处理的是边缘,中层次的处理的是组件比如叶子,高层次的处理的是完整的事物。所以,如果增强较低的层次的检测属性,往往会产生笔画或简单的装饰图案,因为这些网络层对诸如边缘等基本特征比较敏感,参考下图。
如果选择了较高的层次,那些网络层会识别出图像中更复杂的特征,甚至是别的是整个对象。我们再次实践上面说的操作,告诉神经网络:“无论你在那一层发现了什么,我都想要生成更多的!”这就产生了一个反馈循环:如果云看起来有点像鸟,那神经网络会使它变得看起来更像一只鸟,参考下图。
这个产生了非常有意思的结果,即使是一个相对简单的神经网络,也可以用来过度解释图像,就像孩子们看到云会想象成一些随机的形状。下面这个神经网络主要是在动物的图像上进行的训练,所以很自然地将云朵的形状解析成了动物。由于这些信息存储在高层次的抽象中,所以在输出的结果中混合了有趣的动物特征。
当然,还可以用这个技术做更多有意思的事情,可以应用在任意的图像上。结果与图像类型有很大的差异,因为输入图像的特征会使得网络往一定的方向发展。例如,地平线的图像上会出现塔和宫殿,岩石和树木会转变成建筑物,而鸟和昆虫则会出现在叶子的图像上。
就这样,一个用于图像识别的系统,因为一个网络学习结果可视化的需求,打开了从单一进化图层了解事物的新视角。就像当年,毕加索将一个物体的多个剖面拼合并平铺在同一个平面时,全新的构图角度创造了立体主义,也带来了前所未有的冲击。如果忽略掉DeepDream背后的高性能计算机,其产生的作品无疑是一种新的艺术流派,你觉得呢?