可视化和理解卷积神经网络
Contents
可视化和理解卷积神经网络
特征可视化、倒置、对抗样本
第一层:由许多卷积核组成,每个卷积核是11113,这些卷积核在输入图像上来回滑动,取图像块和卷积核权重的内积,这就是第一层的输出;可以把这个卷积核看成有3个通道的形状为11*11的图像,并且给定红色、绿色、蓝色的值,如图所示的第一层的可视化:
可以看到卷积核正在寻找什么,它们都在寻找有向边,比如明暗线条,从不同的角度和位置来观察输入图像,可以看到完全相反的颜色。
中间层:如果对中间的层进行相同的可视化,但是实际上它的解释性会差很多,第二层的权重经过卷积之后,这里有一些ReLU激活函数和一些其他的非线性激活函数,但不能从卷积核权重里面得到太多的信息,这里的做法是可以把卷积核平面展开成灰度图像;这些灰度图像显示了第二层某个卷积核的权重。
对于可视化中间层的特征,可以做一件每场有用的事情是可视化输入图像中什么类型的图像块可以最大限度地激活不同的特征、不同的神经元;这里的做法是选取AlexNet的卷积层,记住每一个激活量提供了1281313的三维数据,然后选择128个通道其中的一个,通过神经网络运行很多图像,对于每个图像记录它们的卷积特征,可以观察到那个特征映射图的部分已经被图像的数据集最大地激活,然后对这些最大化激活的图像块进行可视化。
最后一层:神经网络的最后一层通过大概1000个类的得分来得到数据集中每个类的得分,而在最后一层之前通常有一些完全连接的层,以AlexNet为例,用4096维的特征向量来表示图像,将其输入到最后一层来预测最终类的得分;可以用近邻算法可视化最后的结果。
从另一个角度来看最后一层到底发生了什么,通过降维的方法,比如PCA可以让你把像4096维的特征向量的高维表示压缩到二维空间,以便能更加直观地可视化这个特征空间;还有一种强大的算法叫t-SNE,即t-分布领域嵌入,它是人们经常在深度学习里面可视化特征的非线性降维方法,如下图的实例:
DeepDream和风格迁移
另一件可以做的基于梯度的图像优化是DeepDream,它的思想:提取输入图像通过神经网络运行到某一层,接着进行反向传播并且设置该层的梯度等于激活值,然后反向传播到图像并不断更新图像。
Deepdream的展示:
另一件可以做的非常有用的事情是特征反演,这让我们再次了解到神经网络的不同层可以捕获图像的哪些类型的元素。
我们需要做的是选取一张图像,通过神经网络运行该图像,记录其中一个图像的特征值,然后根据它的特征表示重构那个图像,基于重建图像的样子这将给我们一些关于在该特征向量中捕获的图像类型的信息,可以通过梯度上升和正则化来做到这点,与其最大化某些分值,不如最小化捕获到的特征向量之间的距离,并且在生成图像的特征之间尝试合成一个新的与之前计算过的图像特征相匹配的图像;这里用到了全变差正则化将左右相邻像素之间的差异拼凑成上下相邻以尝试增加生成图像中特殊的平滑度。
Author kong
LastMod 2022-04-07