深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)

深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第1张图片

一、上回说到的 AlexNet

请各位看官们参见博客之前的文章: 深度学习网络篇——AlexNet https://blog.csdn.net/weixin_43624538/article/details/83988998
1)AlexNet性能举世瞩目
top-1和top-5错误率分别为37.5%和17.0%。
2)由下面的原因,人们也对卷积网络空前关注:
1) 大量有标签的数据集ImageNet;
2)强有力的GPU计算,使训练复杂模型更容易实现
3)更好的归一化策略,如dropout

二、Why:ZFNet为什么有?

AlexNet如此优秀,随之提出了两个问题:
1)为什么能表现的这么好,
2) 怎么样能变得更好
纵然AlexNet好用,我们不清楚该模型的内部(仍然缺乏洞察力,认知十分有限)。
------从科学立场,模型的发展就是反复实验和减小误差了。
于是有了本篇论文……

**Visualizing And Understanding Convolutional Networks **

深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第2张图片

三、What:ZFNet做了什么?

1. 一个可视化技术来观察
------理解 中间特征层的功能
------理解 分类器层的操作
2. 到改进神经网络的结构的方法

四、How: ZFNet怎样做的?

1. 使用反卷积(Deconvnet),可视化特征图(feature map)
1)Ablation Study剥离的研究:以发现不同模型层的性能贡献。
2)Evolution 逐层的演变
3)Project 映射回输入像素空间
4)Sensitivity 敏感度分析
------为了得到场景的哪一部分对于分类很重要,我们将输入图像的不同部分遮住 ->(控制变量法)
2. Diagnostic Role发现规则:在AlexNet基准上找到更优模型架构。
------改变模型的一些参数(卷积核大小,步长等),发现在ImageNet数据集上超越其原先结果的架构
3. Other Database 其他数据集:模型推广至其他数据集。
------泛化能力,只需重新训练末端的softmax分类器,评估该模型在其他数据集上的分类效果。

五、ZFNet的成就

2013年ILSVRC的冠军(膜拜ing!)
捎带上介绍ILSVRC:
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第3张图片
1)随着深度学习的日益发展,机器视觉在ILSVRC的比赛成绩屡创佳绩,其错误率已经低于人类视觉,若再继续举办类似比赛已无意义。
2)LSVRC 2017 是比赛的最后一届。
3)正是因为ILSVRC 2012挑战赛上的AlexNet横空出世,使得全球范围内掀起了一波深度学习热潮。
4)这一年也被称作“深度学习元年”。此后,ILSVRC挑战赛的名次一直是衡量一个研究机构或企业技术水平的重要标尺。
------因此,即使ILSVRC挑战赛停办了,但其对深度学习的深远影响和巨大贡献,将永载史册。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第4张图片
让我们来跪拜大神!!!跪拜!!!
ZF:Matthew D.Zeiler 和 Rob Fergus (纽约大学)2013年撰写的论文:
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第5张图片

六、回顾 AlexNet

1. AlexNet每一层包括以下部分:
1)卷积层:前一层输出(第一层即:输入图像)与一组学习获得的特定核进行卷积运算产生
2)矫正层:对每个卷积结果都进行矫正运算,通过ReLU函数传递响应
3) [可选地]最大池化层:在局部邻域上的最大池化,获得降采样图
4) [可选地]局部对比操作,其对特征映射之间的响应进行归一化。使得输出特征平稳。
2.更多参阅(Krizhevsky等,2012)和(Jarrett等,2009)。
3.网络的最后几层是传统的全连接网络,最后的输出层是softmax分类器。
4.我们使用大量的N个标记图像构成的数据集来训练这些模型{x; y},其中标签yi是个离散变量,用于表示其真实的类别。
5.交叉熵损失函数用于比较^ yi和yi,适用于图像分类。
6.网络的参数(卷积层中的卷积核,全连接层中的权重矩阵和偏差)通过相对于整个网络中的参数反向传播损失的导数来训练,并通过随机梯度下降来更新参数。

七、ZFNet—通过反卷积网络实现可视化(Visualization with a Deconvnet)

1.深入了解卷积网络的操作,解释中间层中的特征活动。
2.一种新的方法,将这些中间层的特征活动映射回输入像素空间,显示什么输入会导致特定输出。
1) 反卷积网络-也称解卷积(Deconvolutional Network(deconvnet))执行此映射。
2) 反卷积网络可以被认为是一个与卷积网络模型使用相同组件(卷积核,池化核)的网络
3) 将输出的特征逆映射成输入信号。从而对已训练过的卷积网络的可视化探测。
3. 为了检查卷积网络,每个图层都附有一个反卷积层
1)首先,将输入图像呈现给卷积网络,并在整个层中计算特征。要检查给定的卷积网络激活,我们将图层中的所有其他激活设置为零,
2)将特征图作为输入,传递给附加的反卷积图层。
3)然后我们连续进行:(i)上池化/反池化(ii)矫正(iii)反卷积 以重建层中的活动,从而产生所选择的激活。
4)重复,直到达到输入像素空间。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第6张图片
Q:假如你想要查看Alexnet 的conv5提取到了什么东西
–我们就用conv5的特征图后面接反卷积网络
—然后通过:反池化、反激活、反卷积
----把本来一张1313大小的特征图(conv5大小为1313),逐层还原,
-----最后回到最开始,得到一张与原始输入图片一样大小的图片(227*227)。

八、ZFNet的算法小心机

1.上池化过程
众所周知,池化是不可逆的过程!但是我们可以近似可逆!(谁还不会个四舍五入啊~)
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第7张图片
所以在ZFNet的池化过程中,我们记录最大激活值的坐标位置。上池化的时候,只把池化过程中最大激活值所在的位置坐标的值激活,其它的值置为0,当然这个过程只是一种近似。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第8张图片
【上图解读】左边表示pooling过程,右边表示unpooling过程。
pooling是一个下采样的过程,本来是33大小,经过pooling后,就变成了11大小的图片了。而unpooling刚好与pooling过程相反,它是一个上采样的过程。
------pooling的一个反向运算, 借pooling中记录下最大值的位置坐标(0,1)。
在unpooling过程的时候,就把(0,1)这个像素点的位置填上去,其它的神经元激活值全部为0。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第9张图片
在max pooling的时候,我们不仅要得到最大值,同时记录最大值得坐标(-1,-1)。
在unpooling的时候,就直接把(-1-1)这个点的值填上去,其它的激活值全部为0。
【一个小对比:上采样(UnSampling)与上池化(UnPooling)】
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第10张图片
2.反激活 –> 矫正
在卷积网络中,使用relu非线性函数来修正特征图,从而确保特征图始终为非负的正值。为了在每一层获得有效的特征重建(也应该是正的),我们将重建的信号通过relu非线性函数。即:这个反激活过程和激活过程没有什么差别,都是直接采用relu函数。
3.反卷积
对于反卷积过程,采用卷积过程转置后的滤波器(参数一样,只不过把参数矩阵中 水平和垂直的方向翻转了一下)。应用于纠正过的特征图中(上步得到),而不是下面的层的输出。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第11张图片深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第12张图片
【反卷积为什么有效】
假设有如下卷积运算:
在这里插入图片描述
则有:
在这里插入图片描述
考虑反卷积,反卷积操作等价于:
在这里插入图片描述
从此处可以看出,反卷积并不能还原出原始输入,仅仅只是根据卷积核的信息,推算出最可能的激活输入图。
假设卷积核:
在这里插入图片描述
那么显然x11,x22相对来说是更重要的特征点(3,4相对较大),它们在计算y时会趋向于给出更大的贡献,反卷积正是考虑了这一点,根据卷积核的信息(即计算对应y时的贡献)来反推可能的输入激活图,得到的输入激活图可以反映出相对的激活程度。(输入图值越大证明这个点的贡献越高,反卷积认为这个点是最应该激活的,是最重要的特征点,因为只要这个点激活,再结合它的最大贡献,可以更大可能使输出图激活。)

有小伙伴在评论里面问了反卷积为什么可以得到2*2的矩阵,就拿张随便画的图写写怎么反卷积的(请不要嫌弃小编的字比较丑)~
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第13张图片

【ZFNet中反卷积具体步骤】
------从较高层向下投影,使用最大池化生成的“switch“。
------由于这些switch变换变量的设置,是输入图像所特有的。
------因此从单次激活获得的重建,类似于原始输入图像的一小块
------其结构根据它们对特征激活的贡献而加权。
------由于模型是有区别地训练的,因此它们隐含地显示输入图像的哪些部分是有区别的。
!!!请注意,这些重构图像不是从模型的样本采样生成,因为中间不涉及生成过程。!!!

可视化网络结构如下:
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第14张图片
【上图解读】附加到convnet层(右)的deconvnet层(左)。
网络的整个过程,从右边开始:输入图片-> 卷积-> Relu-> 最大池化->得到结果特征图-> 反池化-> Relu-> 反卷积。
深度学习网络篇——ZFNet(Part1 从AlexNet到ZFNet)_第15张图片
在deconvnet中unpooling的示意图,使用switch表格在池化过程中记录每个池区域(彩色区域)中本地最大值的位置。

下一篇文章将会给大家介绍ZFNet中的一些训练细节,还请大家多多关注!我们还是深度学习刚入门的小学生,有些理解不到位的地方还请大大们指出。蟹蟹大家~

你可能感兴趣的:(深度学习Deep,Learning)