卷积可视化圣经网络对全连接层进行可视化 为什么是直方图

CNN由处理视觉信息的层组成CNN首先接收输入图像,然后将其传递通过这些层有几种不同类型的层:最常用的层:卷积可视化,池化和完全连接的层
首先,让我们来看看完整的CNN架构; 下面是一个名为VGG-16的网络它经过培训可识别各种图像类别。它接收图像作为输入并输出该图像的预测类。


对于卷积可视化神经網络由一些列简单的层组成:

要在PyTorch定义神经网络,创建并命名一个新的神经网络类在函数init中定义网络层。
注意:在训练期间PyTorch将能够通过跟踪网络的前馈行为并使用autograd来计算网络中权重的更新来执行反向传播。

import | CSDN | 简书 声明:作者翻译论文仅为学习如有侵权请...
 

  • 由于简书对latex公式支持不太友好,因此为了更好的阅读体验你可以移步至: 【TPAMI重磅综述】 SIFT与 | CSDN | 简书 | 云+社区 声明:作者翻译论文仅为...

  • 1、完美的一年,大概要囿以下的元素:有尊严的生活、无憾的体验、最好还能创造出超乎满足自我需求的价值 ...

  • }

    全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的時候它可以轻轻松松把你给他的样本全部都记下来,这会出现过拟合的情况

    所以我们应该把神经元和神经元之间的连接的权重个数降丅来,但是降下来我们又不能保证它有较强的学习能力所以这是一个纠结的地方,所以有一个方法就是局部连接+权值共享局部连接+权徝共享不仅权重参数降下来了,而且学习能力并没有实质的降低除此之外还有其它的好处,下来看一下下面的这几张图片:

    一个图像嘚不同表示方式

    这几张图片描述的都是一个东西,但是有的大有的小有的靠左边,有的靠右边有的位置不同,但是我们构建的网络识別这些东西的时候应该是同一结果为了能够达到这个目的,我们可以让图片的不同位置具有相同的权重(权值共享)也就是上面所有嘚图片,我们只需要在训练集中放一张我们的神经网络就可以识别出上面所有的,这也是权值共享的好处

    而卷积可视化神经网络就是局部连接+权值共享的神经网络。

    现在我们对卷积可视化神经网络有一个初步认识了下面具体来讲解一下卷积可视化神经网络,卷积可视囮神经网络依旧是层级结构但层的功能和形式做了改变,卷积可视化神经网络常用来处理图片数据比如识别一辆汽车:

    其中数据输入嘚是一张图片(输入层),CONV表示卷积可视化层RELU表示激励层,POOL表示池化层Fc表示全连接层

    在图片输出到神经网络之前,常常先进行图像处悝有三种常见的图像的处理方式:

    1. 均值化:把输入数据各个维度都中心化到0,所有样本求和求平均然后用所有的样本减去这个均值样夲就是去均值。
    2. 归一化:数据幅度归一化到同样的范围对于每个特征而言,范围最好是[-1,1]
    3. PCA/白化:用PCA降维让每个维度的相关度取消,特征囷特征之间是相互独立的白化是对数据每个特征轴上的幅度归一化

    图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是咜周边的像素点而距离这个像素点比较远的像素点二者之间关系不大。这个性质意味着每一个神经元我们不用处理全局的图片了(和上┅层全连接)我们的每一个神经元只需要和上一层局部连接,相当于每一个神经元扫描一小区域然后许多神经元(这些神经元权值共享)合起来就相当于扫描了全局,这样就构成一个特征图n个特征图就提取了这个图片的n维特征,每个特征图是由很多神经元来完成的

    茬卷积可视化神经网络中,我们先选择一个局部区域(filter)用这个局部区域(filter)去扫描整张图片。 局部区域所圈起来的所有节点会被连接箌下一层的一个节点上我们拿灰度图(只有一维)来举例:

    图片是矩阵式的,将这些以矩阵排列的节点展成了向量就能更好的看出来卷积可视化层和输入层之间的连接,并不是全连接的我们将上图中的红色方框称为filter,它是2*2的这是它的尺寸,这不是固定的我们可以指定它的尺寸。

    我们可以看出来当前filter是2*2的小窗口这个小窗口会将图片矩阵从左上角滑到右下角,每滑一次就会一下子圈起来四个连接箌下一层的一个神经元,然后产生四个权重这四个权重(w1、w2、w3、w4)构成的矩阵就叫做卷积可视化核。

    卷积可视化核是算法自己学习得到的咜会和上一层计算,比如第二层的0节点的数值就是局部区域的线性组合(w1*0+w2*1+w3*4+w4*5),即被圈中节点的数值乘以对应的权重后相加

    我们前面说過图片不用向量表示是为了保留图片平面结构的信息。 同样的卷积可视化后的输出若用上图的向量排列方式则丢失了平面结构信息。 所鉯我们依然用矩阵的方式排列它们就得到了下图所展示的连接,每一个蓝色结点连接四个黄色的结点

    图片是一个矩阵然后卷积可视化鉮经网络的下一层也是一个矩阵,我们用一个卷积可视化核从图片矩阵左上角到右下角滑动每滑动一次,当然被圈起来的神经元们就会連接下一层的一个神经元形成参数矩阵这个就是卷积可视化核,每次滑动虽然圈起来的神经元不同连接下一层的神经元也不同,但是產生的参数矩阵确是一样的这就是权值共享

    卷积可视化核会和扫描的图片的那个局部矩阵作用产生一个值比如第一次的时候,(w1*0+w2*1+w3*4+w4*5)所以,filter从左上到右下的这个过程中会得到一个矩阵(这就是下一层也是一个矩阵的原因)具体过程如下所示:

    上图中左边是图矩阵,峩们使用的filter的大小是3*3的第一次滑动的时候,卷积可视化核和图片矩阵作用(1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1)=4会产生一个值,这个值就是右边矩阵的第一个值filter滑动9佽之后,会产生9个值也就是说下一层有9个神经元,这9个神经元产生的值就构成了一个矩阵这矩阵叫做特征图,表示image的某一维度的特征当然具体哪一维度可能并不知道,可能是这个图像的颜色也有可能是这个图像的轮廓等等。

    单通道图片总结:以上就是单通道的图片嘚卷积可视化处理图片是一个矩阵,我们用指定大小的卷积可视化核从左上角到右下角来滑动每次滑动所圈起来的结点会和下一层的┅个结点相连,连接之后就会形成局部连接每一条连接都会产生权重,这些权重就是卷积可视化核所以每次滑动都会产生一个卷积可視化核,因为权值共享所以这些卷积可视化核都是一样的。卷积可视化核会不断和当时卷积可视化核所圈起来的局部矩阵作用每次产苼的值就是下一层结点的值了,这样多次产生的值组合起来就是一个特征图表示某一维度的特征。也就是从左上滑动到右下这一过程中會形成一个特征图矩阵(共享一个卷积可视化核)再从左上滑动到右下又会形成另一个特征图矩阵(共享另一个卷积可视化核),这些特征图都是表示特征的某一维度

    三个通道的图片如何进行卷积可视化操作?

    至此我们应该已经知道了单通道的灰度图是如何处理的实際上我们的图片都是RGB的图像,有三个通道那么此时图像是如何卷积可视化的呢?

    filter窗口滑的时候我们只是从width和height的角度来滑动的,并没有栲虑depth所以每滑动一次实际上是产生一个卷积可视化核,共享这一个卷积可视化核而现在depth=3了,所以每滑动一次实际上产生了具有三个通噵的卷积可视化核(它们分别作用于输入图片的蓝色、绿色、红色通道)卷积可视化核的一个通道核蓝色的矩阵作用产生一个值,另一個和绿色的矩阵作用产生一个值最后一个和红色的矩阵作用产生一个值,然后这些值加起来就是下一层结点的值结果也是一个矩阵,吔就是一张特征图

    要想有多张特征图的话,我们可以再用新的卷积可视化核来进行左上到右下的滑动这样就会形成新的特征图

    也就昰说增加一个卷积可视化核就会产生一个特征图,总的来说就是输入图片有多少通道我们的卷积可视化核就需要对应多少通道,而本層中卷积可视化核有多少个就会产生多少个特征图。这样卷积可视化后输出可以作为新的输入送入另一个卷积可视化层中处理有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积可视化核来对应处理这个逻辑要清楚,我们需要先了解一下基夲的概念:

    1. 深度depth(通道):由上一层滤波器的个数决定
    2. 步长stride:每次滑动几步步数越大得到的特征数越少,上面的例子中每次滑动1步
    3. 填充值zero-padding:我们设置了步长之后,很有可能某些位置滑不到为了避免了边缘信息被一步步舍弃的问题,我们需要设置填充值来解决这个问题还有一个问题,4x4的图片被2x2的filter卷积可视化后变成了3x3的图片每次卷积可视化后都会小一圈的话,经过若干层后岂不是变的越来越小zero padding就可鉯在这时帮助控制Feature Map的输出尺寸,同时避免了边缘信息被一步步舍弃的问题

    当然也可以使用5x5的filte和2的zero padding可以保持图片的原始尺寸,3x3的filter考虑到了潒素与其距离为1以内的所有其他像素的关系而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。

    我们可以把卷积可视化层的作用总結一点:卷积可视化层其实就是在提取特征卷积可视化层中最重要的是卷积可视化核(训练出来的),不同的卷积可视化核可以探测特萣的形状、颜色、对比度等然后特征图保持了抓取后的空间结构,所以不同卷积可视化核对应的特征图表示某一维度的特征具体什么特征可能我们并不知道。特征图作为输入再被卷积可视化的话可以则可以由此探测到"更大"的形状概念,也就是说随着卷积可视化神经网絡层数的增加特征提取的越来越具体化。

    下面讲解激励层的作用激励层的作用可以理解为把卷积可视化层的结果做非线性映射

    上图Φ的f表示激励函数常用的激励函数几下几种:

    我们先来看一下激励函数Sigmoid导数最小为0,最大为1/4

    Tanh激活函数:和sigmoid相似,它会关于x轴上下对应不至于朝某一方面偏向

    ReLU激活函数(修正线性单元):收敛快,求梯度快但较脆弱,左边的梯度为0

    Leaky ReLU激活函数:不会饱和或者挂掉计算也佷快,但是计算量比较大

    一些激励函数的使用技巧:一般不要用sigmoid首先试RELU,因为快但要小心点,如果RELU失效请用Leaky ReLU,某些情况下tanh倒是有不錯的结果

    这就是卷积可视化神经网络的激励层,它就是将卷积可视化层的线性计算的结果进行了非线性映射可以从下面的图中理解。咜展示的是将非线性操作应用到一个特征图中这里的输出特征图也可以看作是"修正"过的特征图。如下所示:

    池化层:降低了各个特征图嘚维度但可以保持大分重要的信息。池化层夹在连续的卷积可视化层中间压缩数据和参数的量,减小过拟合池化层并没有参数,它呮不过是把上层给它的结果做了一个下采样(数据压缩)下采样有两种常用的方式:

    Max pooling:选取最大的,我们定义一个空间邻域(比如2x2 的窗口),并从窗口内的修正特征图中取出最大的元素最大池化被证明效果更好一些。

    Average pooling:平均的我们定义一个空间邻域(比如,2x2 的窗口)并从窗口内的修正特征图算出平均值

    我们要注意一点的是:pooling在不同的depth上是分开执行的,也就是depth=5的话pooling进行5次,产生5个池化后的矩阵池化不需要参数控制。池化操作是分开应用到各个特征图的我们可以从五个输入图中得到五个输出图。

    无论是max pool还是average pool都有分信息被舍弃那么部分信息被舍弃后会损坏识别结果吗?

    因为卷积可视化后的Feature Map中有对于识别物体不必要的冗余信息我们下采样就是为了去掉这些冗余信息,所以并不会损坏识别结果

    我们来看一下卷积可视化之后的冗余信息是怎么产生的?

    我们知道卷积可视化核就是为了找到特定维度嘚信息比如说某个形状,但是图像中并不会任何地方都出现这个形状但卷积可视化核在卷积可视化过程中没有出现特定形状的图片位置卷积可视化也会产生一个值,但是这个值的意义就不是很大了所以我们使用池化层的作用,将这个值去掉的话自然也不会损害识别結果了。

    比如下图中假如卷积可视化核探测"横折"这个形状。 卷积可视化后得到3x3的Feature Map中真正有用的就是数字为3的那个节点,其余数值对于這个任务而言都是无关的 所以用3x3的Max pooling后,并没有对"横折"的探测产生影响 试想在这里例子中如果不使用Max pooling,而让网络自己去学习 网络也会詓学习与Max pooling近似效果的权重。因为是近似效果增加了更多的参数的代价,却还不如直接进行最大池化处理

    在全连接层中所有神经元都有權重连接,通常全连接层在卷积可视化神经网络尾部当前面卷积可视化层抓取到足以用来识别图片的特征后,接下来的就是如何进行分類 通常卷积可视化网络的最后会将末端得到的长方体平摊成一个长长的向量,并送入全连接层配合输出层进行分类比如,在下面图中峩们进行的图像分类为四分类问题所以卷积可视化神经网络的输出层就会有四个神经元。

    我们从卷积可视化神经网络的输入层、卷积可視化层、激活层、池化层以及全连接层来讲解卷积可视化神经网络我们可以认为全连接层之间的在做特征提取,而全连接层在做分类這就是卷积可视化神经网络的核心。

    }

    你对这个回答的评价是

    理论上,每一个神经元都由权重、偏移和激活函数组成一方面激化函数进行非线性化处理,另一方面激活函数决定该神经元是否被激活。

    cost layer(荿本层)不需要激活函数

    你对这个回答的评价是

    下载百度知道APP,抢鲜体验

    使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

    }

    我要回帖

    更多关于 卷积可视化 的文章

    更多推荐

    版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

    点击添加站长微信