深度学习小白——卷积神经网络可视化(二)

来源:互联网 发布:人工智能的细分领域 编辑:程序博客网 时间:2024/06/05 20:30

一、由卷积后的code得到原始图像

可以看出随着卷积网络的进行,越来越多的信息被扔掉了,能还原除的信息也就越少。


二、Deep Dream

google发明的起初是用来看神经网络各层在“看”什么,后来因为得到的图像很具有艺术感,所以成为了一个艺术图片生成器。

这是一段Deep dream的核心代码,其中make_step就是对输入图像进行不断的优化(前面提到过的过程),每次调用make_step就对图像做很小的更新,end参数是关于我们想要在哪一层“做梦”的约束,即从哪层开始反向传播。dst就是“做梦”的那一层,就是caffe中的blob,其包含data域和diff域(存储梯度值)。

此处objective函数把梯度设置成和激活值一样!,然后再反向传播,其目的就是加强所有神经元的激活值,无论什么使神经元激活,都想要增强这个激活

举个例子


如果把云彩图输入,卷积神经网络可能会认为其中有一些像狗的部分(因为ImageNet中有很多动物,所以对动物很敏感),所以在梯度信号中就想要朝着增强狗的特征的方向,于是一次次更新后,图片就会越来越像狗。这是在inception_4c/output层反向传播得到的结果,在其它层会出现不同的图像。

一个有意思的视频:https://www.youtube.com/watch?v=DgPaCWJL7XI


三、Neural Style

同样是用原始图像加上卷积神经网络用优化做出来的,可以把图像变成另外一种风格。


可以在这个网站上试:https://deepart.io/


原理:输入两张图片,一张取其内容,一张取其风格。首先输入内容图像,记录下其所有原始激活值。

然后输入风格图片,不过这次不是保留原始激活值,该作者发现了一个很好表现风格的统计信息,那就是Gram matrices(格拉姆矩阵)

举个例子,在VGG第一个卷积层,神经元维度为V.T=【224*224*64】,通过G=V.T*V,我们将得到一个【64*64】的gram matrices,它体现了成对的特征值的协方差在空间域上求和,这样跟踪了每一对特征是否在数据体内经常同时被激活。


这里为什么采用Gram matrices,我在知乎上找到一个答案:

“我是这样理解为什么用Gram 矩阵的:度量各个维度自己的特性以及各个维度之间的关系。

style transfer 当中,什么是风格,存在自己特性的才叫做风格。因此如何去度量这个自己的特性勒,自己的特点越突出,别人的越不突出最好。

这样我们知道:当同一个维度上面的值相乘的时候原来越小就变得更小,原来越大就变得越大;二不同维度上的关系也在相乘的表达当中表示出来。因此,最终能够在保证内容的情况下,进行风格的传输



作者:iker peng
链接:https://www.zhihu.com/question/49805962/answer/130549737
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




一般内容图像只用网络中的一层来进行优化,优化的是激活值,而风格图像要用很多层,去尽可能匹配某风格的gram matrices

如果只用风格图片,则会得到乱序的风格图片,因为所有的空间信息都没有重建。此处优化用LBFGS,因为我们只优化单张图,所以内存不是很紧张


四、“fool” ConvNets

Intriguing properties of neural networks, Szegedy et al., 2013]

13年的时候,上述科学家希望通过改变原始图像的梯度,然后反向传播,最后希望原图像能发生朝着我们希望的类别(鸵鸟)的转变。



但结果是,神经网络认为其是ostrich类,但我们人眼看却没有什么变化,即fool ConvNets

在卷积网络以前,也有类似的情况出现,2011年,一篇论文生成了一个与源图像HOG完全一样,但却看上去与另一个图片很相似的图片。


人们管这个叫做对抗样本adversarial examples

EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES
[Goodfellow, Shlens & Szegedy, 2014]

这篇论文的结论就是这种脆弱性的主要原因就是前向传播过程中用到函数的线性特性

图像是高维的,我们在训练卷积网络时,卷积网络只在一小空间里的效果很好,但最后我们在顶部放了一个线性函数,在那些小空间之外,我们就好像是完全随机地对空间进行了分割,因为那里我们没有训练过

就如这个图,这是一个两层的神经网络,在有数据点的部分都分类正确,但在没有数据的地方,线性函数泛化出的阴影呈现出非常奇怪的形状,就像随机散布的一样。


再举个logistic例子



通过对每个x进行微调(改变0.5)最后将这些改变线性叠加,最终输出就变成了2,分成class1的概率也从5%变到88%

而这仅仅是10维,考虑224*224维的图片,梯度告诉了接下来应该变化的方向,比如增加分类为鸵鸟的概率,于是就可以把这15万多个像素值每个都改变一点点,这就可以使得最终得分完全改变,让神经网络以为类别发生了改变,而外观却只改变了一点点。


实际上,这个问题不仅限于卷积网络,普通的线性分类器也有,但这是人们在认为设计卷积网络时发现的问题。这个问题也不仅针对图像,对其他模态也有类似问题。目前还没有很好的解决方案。



0 1
原创粉丝点击