一文理解Deep Dream

Introduce

2015年Google发布了一个很有意思的东西,叫做Deep Dream,网上瞬间掀起了Deep Dream的热潮,各种各样有着Deep Dream效果的图片漫天飞,就算你不知道Deep Dream这个名词,但是你有可能已经看过下面的图片了。

一文理解Deep Dream_第1张图片
deepdream0.png

这些图片充满着幻觉和梦境,所以这个算法被称为Deep Dream。这个算法的由来非常有意思,因为它是意外得到的效果。

我们知道神经网络在图像分类上取得了显著的进展,但是由于深度学习网络中参数太多了,导致这个算法是一个黑盒子,虽然能够达到良好的效果,但是人们仍然对其内部知之甚少,所以人们希望能够窥探一下网络里面的内部。

Reverse Neural Network

我们知道一个神经网络读入一张图片,通过多层网络,最后输出一个分类的结果,但是我们仅仅知道一个结果并不够,神经网络的一个挑战是要理解在没一层到底都发生了什么事。我们知道经过训练之后,每一层网络逐步提取越来越高级的图像特征,直到最后一层将这些特征比较做出分类的结果。比如前面几层也许在寻找边缘和拐角的特征,中间几层分析整体的轮廓特征,这样不断的增加层数就可以发展出越来越多的复杂特征,最后几层将这些特征要素组合起来形成完整的解释,这样到最后网络就会对非常复杂的东西,比如树叶,小猫等图片有了反应。

为了理解神经网络是如何学习的,我们必须要理解特征是如何被提取和识别的,如何我们分析一些特定层的输出,我们可以发现当它识别到了一些特定的模式,它就会将这些特征显著地增强,而且层数越高,识别的模式就越复杂。当我们分析这些神经元的时候,我们输入很多图片,然后去理解这些神经元到底检测出了什么特征是不现实的,因为很多特征人眼是很难识别的。一个更好的办法是将神经网络颠倒一下,不是输入一些图片去测试神经元提取的特征,而是我们选出一些神经元,看它能够模拟出最可能的图片是什么,将这些信息反向传回网络,每个神经元将会显示出它想增强的模式或者特征。

比如上面这些图片我们能够看出不同的神经元模拟出了不同的增强特征和模式,有一些是狗,有一些是蜗牛,还有一些是鱼。

Deep Dream

通过上面的过程我们会迫使神经网络在图片中产生一些本来不存在的东西,这也就产生了类似梦境和幻觉,其实上这些梦境强调了网络到底学习到了什么,这种技术给我们提供了一种对抽象层次的定性感受,虽然这和现实中的梦境没有太大的关系,这也就是Deep Dream的最早提出的灵感。

实际上Deep Dream在上面的基础上使用了更多的技术,如果我们将此算法反复地应用在自身的输出上,也就是不断地迭代,并在每次迭代后应用一些缩放,这样我们就能够不断地激活特征,得到无尽的新效果,比如最开始网络的一些神经元模拟出来了一张图中狗的轮廓,通过不断的迭代,网络就会越来越相信这是一只狗,图片中狗的样子也就会越来越明显。

上面我们简要的介绍了Deep Dream的理论基础,下一篇文章我们将介绍如何Deep Dream的实现技巧。

参考内容:

alanzucconi blog

google blog


欢迎访问我的博客

欢迎查看我的知乎专栏,深度炼丹

你可能感兴趣的:(一文理解Deep Dream)