卷积神经网络的可视化

t-SNE(数据降维)可视化技术(给她一个高维数据,根据数据的结构和关系自动进行内聚)
ConvNets逐渐的将不同的图片分类,我们可以将不同的图片嵌入到二维的空间,这样相似的图片就会在一起.有很多嵌入的方法,t-SNE 是很有名的一个。我们可以从ConvNet中抽取cnn codes(例如在AlexNet中是分离器前的4096维向量)代入 t-SNE 得到了二维分布的图片,图片间的距离也可以表现出在ConvNet中认为他们是否相似,下图就是一例,越近的图片在ConvNet的眼里他们长的越像。

相应的还有PCA(主成分分析)降维技术。

一、利用反卷积实现特征可视化

    理解卷积神经网络的工作原理,就需要理解CNN在每一层到底学到了什么点东西。为了理解其中的每一层内容,我们可以将提取到的特征,利用反卷积的方式,进行可视化。反卷积网络可以看做是卷积网络的逆过程。
    反卷积可视化以各层得到的特征图作为输入,进行反卷积,得到反卷积结果,用以验证显示各层提取到的特征图。举个例子:假如你想要查看Alexnet 的conv5提取到了什么东西,我们就用conv5的特征图后面接一个反卷积网络,然后通过:反池化、反激活、反卷积,这样的一个过程,把本来一张13*13大小的特征图(conv5大小为13*13),放大回去,最后得到一张与原始输入图片一样大小的图片(227*227)。
    反卷积网络是一个对称结构的网络。前半部分是池化,卷积过程,后半部分是反卷积,反池化过程。

1.反池化过程
池化是不可逆过程,但是我们在正向池化的过程记录最大激活值的坐标位置(采用Max Pooling)。在反池化的时候,将最大激活值的位置的坐标的值激活,其余的值置为0,这个过程是一个近似的过程,因为原始数据其他的位置是不一定为0的。
另外,因为只是记录了最大值的位置信息,其余位置用0填充,因此重构出的图像看起来会不连续,很像原始图像的某些碎片,这些碎片就是训练处高性能卷积网的关键(关键特征)
卷积神经网络的可视化_第1张图片
以上面的图片为例,上面的图片中左边表示pooling过程,右边表示unpooling过程。假设我们pooling块的大小是3*3,采用max pooling后,我们可以得到一个输出神经元其激活值为9,pooling是一个下采样的过程,本来是3*3大小,经过pooling后,就变成了1*1大小的图片了。而upooling刚好与pooling过程相反,它是一个上采样的过程,是pooling的一个反向运算,当我们由一个神经元要扩展到3*3个神经元的时候,我们需要借助于pooling过程中,记录下最大值所在的位置坐标(0,1),然后在unpooling过程的时候,就把(0,1)这个像素点的位置填上去,其它的神经元激活值全部为0。

2.反激活过程
在CNN前向传播过程,ReLU激活函数是用于保证每层输出的激活值都是正数。在反向的过程,我们同样需要保证每层的特征图为正值,也即是正向和方向,ReLU的工作原理一致,在对图像可视化中,我们如果采用Guided Backpropagation,升级版的ReLU在后向传播神经网络的时候,不仅阻断了负值的输入,还阻断了输入的梯度是负值的部分,即是保证了反向重构都是正向的影响。

3.反卷积过程
卷积我那个使用学习到的卷积核与上层输出做卷积,提取特征。为了实现逆过程,反卷积网络将使用相同的卷积核的转置作为核,与unpooling后的特征进行卷积运算
可视化的网络结构如下:
卷积神经网络的可视化_第2张图片

二、理解可视化

特征可视化的原理我们已经知道了,但是对于重建的可视化的图像怎们理解,怎么根据这些图像对神经网络做调整和分析?
我们利用上面的反卷积网络,对每一层的特征图进行查看:

1.特征可视化结果:

从上面各层的结果我们可以得出:CNN学到的特征越来越集中,并具有很强的辨别性。比如区别人脸,通过CNN学习,我们将会看到背景部分的激活度很小,且可视化的结果也可以看出我们忽略了背景的特征。其次,CNN学习特征有一个渐进,却也有点跳跃的过程:layer1,layer2学到的是边缘,颜色,亮度等底层的特征;layer3开始变得复杂,学到的是纹理的特征,Layer4则学到的是一些有区别性的特征,Layer5学到的特征是比较完整的,具有辨别性的关键特征。可以知道CNN学习到的特征逐渐抽象到更高级别上。

2.特征学习的过程
下面这个图分别表示网络epochs次数为:1、2、5、10、20、30、40、64的特征图:
这里写图片描述
我们可以看到有的层在迭代的过程有一些跳跃的现象,但是总的趋势来说是越变越复杂。
层与层之间来说,低层在训练的过程变化较小(梯度弥散),容易收敛,高层学习的特征则变化很大。
在实际训练网络的过程时,我们不要急于看结果,要等到网络完全收敛,因为在低层的迭代,基本变化很小,但是到后面迭代的变化就会很大。而且,只有所有层都收敛的时候,我们的分类模型才可以使用。
另外,对图片进行平移、缩放等,对低层的训练过程有一定的影响,但是对于高层结果的影响很小。表现出不同层特征向量所具有的不变性能力。

3.特征敏感性
当模型达到了预期的分类效果时,我们会猜想,分类器究竟使用了什么信息实现分类?是图像中具体位置的像素值还是图像中的上下文。
可以得知,当分类物体的关键位置被遮挡,分类器的性能就马上下降。也就是分类物体的关键特征会对CNN系统中神经元产生较强的刺激,当关键特征没有了,就会影响模型的分类,会转而识别其他的特征。
另外还有图片相关性也会对分类结果造成影响。

你可能感兴趣的:(机器学习,神经网络,可视化,深度学习)