CNN工作原理的直观解释

CNN是卷积神经网络的 简称,全称convolutional neural network ,是在ANN(人工神经网络)中演变而来的。
CNN的单元是神经元,如下一个简单的神经元包括了 树突(dendrites)、核心(nucleus)、轴突(axon)、轴突末梢(axon terminals)。其中树突用来感受外界刺激,集中于细胞的核心,然后经过轴突将冲动传于神经末梢,最后再传到下一神经元。

卷积神经网络的出现是受到了生物处理过程的启发,因为神经元之间的连接模式类似于动物的视觉皮层组织。
卷积神经网络也类似与我们的神经系统,它也是由成千上万个类似于神经元的东西组成。如下图的输入x0,类似于外界冲动的输入,w0是对应的感知树突,多个这样的树突感知冲动叠加在一起传入到细胞的中心,然后经过激活再传入到下一个这样的神经元,就这样使得冲动一级一级的往下传导。

 

                    

基本的当个神经元是以wx + b的形式组成,其中                    
 x0、x1、x2表示输入向量
w0、w1、w2为权重,几个输入则意味着有几个权重,即每个输入都被赋予一个权重
b为偏置bias
f为激活函数 。

全连接与局部连接:
全连接(左):每个神经元都与每个像素相连。
局部连接(右):每个神经元的权重个数都是卷积核的大小,这样就相当于每个神经元只与对应图片部分的像素相连接,这也称作局部感知。采用这种局部感知的原因在于图片中相邻区域具有更大的相关性,距离较远时相关性也较小。

两种连接方法的优劣:
全连接:网络复杂,计算消耗大,造成权重的数量大难以训练。
局部连接:计算消耗少,极大的减少了权重的数量,方便训练。

                         
 

CNN网络
CNN网络就是基于局部连接的,由前面所说的局部连接每个神经元可感受到的前一层神经元的数量是有限的,它的个数主要由滤波器的大小(卷积核大小)所决定的。滤波器的大小就是神经与的感受视野,简称感受视野。如下单个神经元的感受视野为4。

 

                                            

CNN的结构:如下图为一张CNN的结构图,最左边是数据输入层,对数据做一些 处理,比如去均值(把输入数据 各个维度都中心化为0)、 归一化(把所有的数据都归一到同样的 范围)等等 。
CONV:卷积计算层
RELU:激励层常见为sigmoid函数, 把数据压缩到指定范围
POOL : 池化层,简言之, 即取区域平均或最大
FC : 全连接层    

                                               
上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果
下面用一个直观的例子来解释CNN的工作原理(来源于知乎)。
首先CNN拿到一张如下图,它要做的就是识别这张图是什么呢,是X,还是O?   

                                                                               

我们人眼一看,很简单嘛,明显就是X啊,但是计算机不知道,它不明白什么是X。计算机要识别这张图,首先要使得CNN网络经过简单的训练,在训练中我们给这张图片加一个标签,也就是俗称的Label,Label=X,就告诉了计算机这张图代表的是X。它就记住了X的长相。
但是。。。但是实际应用中不是所有的X都写的那么的规范,比如大小形状有些如下所示:
                              

不认识了啊,怎么办?这就是CNN在识别中要解决的问题了,准确的说是在CNN的卷积计算层要完成的事情。 对比一下之前认识过的,是不是存在相似之处呢?这就是CNN的特征提取。 我们知道图片在计算机中是以像素的形式存储的,在计算机看来两张图片长成如下这般:

                                  

                                                                            其中1代表白色,-1代表黑色。

 对比上图(a)和(b)是否存在相似的特征?观察标准的x图,我们得出以下三组特征;
                             

                                             

从标准图中提出如下三个特征;

                      

从如上图提取的三个特征如下;

                                                      

特征在CNN中也被成为卷积核(filter),卷积核的别称也叫做滤波器、窗口。

打个比方,滤波器就像一双眼睛,人类视角有限,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你会累,而且一下子接受全世界所有信息,你大脑接收不过来。当然,即便是看局部,针对局部里的信息人类双眼也是有偏重、偏好的。

到这为止我们提取了X字符的三个特征值,这一步是在识别之前的训练中要完成的,训练的目的就是训练卷积每一层的的滤波器,模型的训练是另外一堆繁杂的过程,本文不再展开讨论。 

CNN卷积计算
CNN的核心就是卷积计算,卷积计算过程也就是特征值的提取过程,在前面我们分析了卷积核的获取,这一步它们就要派上用场了,这些核就是用来做卷积计算的。

那么,什么是卷积?
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操    作,也是卷积神经网络的名字来源。概括一句话就是:对应位置相乘取平均。
非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。
                                                 

                          一个滤波器 + 一组固定权重的神经元,可理解为一个卷积层
下面继续讲怎么计算 取 feature里的(1,1)元素值,再取图像上蓝色框内的(1,1)元素值,二者相乘等于1。把这个结果1填入新的图中。
                                 

计算其他8个坐标处的值,9个覆盖的格子都计算完了会得到如下图;

                                               

再对上右图9个值求平均值,将值填入一张新的图中。

                    

这张图称之为 feature map (特征图),图中的蓝色为一个”窗口“,窗口的特性呢,就是要会滑动。上面是一个例子,一般窗口最开始是从图像的左上角,从左向右,从上到下的方式滑动。
下图左是一个直观的动态卷积计算图,步长stride=1。 窗口一步一步地按有规律的滑过整幅图像,经过一系列卷积对应相乘,求均值运算后,我们终于把一张完整的feature map填满了,得到一张新的特征图(下图B) 

                                                   

                                                     图A convSobel_卷积特征提取  gif                 

                                       、

                                           

                                                            图B 新生成的feature map

动态图gif数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。 feature map是每一个feature从原始图像中提取出来的“特征”。其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。
 一般的一个特征核提取图像的一种特征即产生一张feature map,一幅图片可能会有成千上万个这个样的特征核来提取各种不同的图像特征。 对这张X图来说,我们用的是3个feature,因此最终产生3个 feature map,至此卷积操作就计算完了。
                                                 

前面我们提到对于新生成的feature map其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。

那么对于map中的那些没有关联和匹配的地方我们是否可以去掉呢?答案是可以舍弃。这样既减少了数据,又使得操作更加方便,这就是前面说到的非线性激活层,该层用到最多的是RELU函数,  f(x)=max(0,x) 即,保留大于等于0的值,其余所有小于0的数值直接改写为0,如下图; 
                              

最终经过RELU函数之后就剩下大于0的值

                                                     
                                                    

pooling池化层
卷积操作后,我们得到了一张张有着不同值的feature map,尽管数据量比原图少了很多,但还是过于庞大(比较深度学习动不动就几十万张训练图片),因此接下来的池化操作就可以发挥作用了,它最大的目标就是减少数据量。

池化分为两种,Max Pooling 最大池化、Average Pooling平均池化。顾名思义,最大池化就是取最大值,平均池化就是取平均值。
拿最大池化举例:选择池化尺寸为3x3,因为选定一个3x3的窗口,在其内选出最大值更新进新的feature map,如下可观动态池化过程。 
                                               

                                                                                   Max-pooling.gif 
前面说了这么多,都是在为最后的输出做准备,CNN提取特征值的流程是从简单到复杂的过程,基层卷积提取基本的特征值比如边、角、曲线,随着卷积层的增加,对应的滤波器检测的特征就更加复杂,高层滤波器是用来检测低阶特征的组合情况(包括半圆、四边形等),如此积累,以检测原来越复杂的特征。最后一层滤波器按照训练CNN目的的不同,做了相应的激活,如可能是在检测到人脸时,手写字体等时候激活。

回到刚才的例子,采用三个特征核,原图片尺寸为9X9,在一系列的卷积、relu、池化操作后,得到尺寸被压缩为2X2的三张特征图。这三张特征图表征了图像的最高级的特征,在全连接层用作分类使用。 

                                                     
                                                    

 全连接层
得到了2X2的特征图后,对其应用全连接网络,再全连接层中有一个非常重要的函数----Softmax,它是一个分类函数,输出的是每个对应类别的概率值。
比如: 【0.5,0.03,0.89,0.97,0.42,0.15】就表示有6个类别,并且属于第四个类别的概率值0.97最大,因此判定属于第四个类别。
注意:本例中因为只有两个类别X和O,而且数据量到此已经非常少了,因此直接将三个特征图改变维度直接变成一维的数据。(相当于全连接层的每个参数(权重)均为1)

                                                                                     

假设对一张看起来并不标准的图进行分类。如下(左),对于进行一系列操作后,假设得到的概率值如下所示:对于进行一系列操作后,假设得到的概率值如(右)

                       

 0.9表示极其大可能是X,因此对应到X的黄色线条比对应到O的绿色线条要粗很多很多。我们对结果进行统计分析后可判断这张图片里的字母为X。 
更复杂全连接可参考: https://blog.csdn.net/m0_37407756/article/details/80904580

Get 更多
http://neuralnetworksanddeeplearning.com/
雨石 卷积神经网络:http://blog.csdn.net/stdcoutzyx/article/details/41596663
cs231n 卷积神经网络:http://cs231n.github.io/convolutional-networks/
七月在线寒老师讲的5月dl班第4次课CNN与常用框架视频,已经剪切部分放在七月在线官网:julyedu.com
七月在线5月深度学习班:https://www.julyedu.com/course/getDetail/37
七月在线5月深度学习班课程笔记——No.4《CNN与常用框架》:
http://blog.csdn.net/joycewyj/article/details/51792477 深度学习与计算机视觉系列(10)_细说卷积神经网络:http://blog.csdn.net/han_xiaoyang/article/details/50542880
图像卷积与滤波的一些知识点:http://blog.csdn.net/zouxy09/article/details/49080029
CNN、RNN、DNN内部网络结构区别:https://www.zhihu.com/question/34681168
神经网络与深度学习简史:1 感知机和BP算法、4 深度学习的伟大复兴
在线制作gif 动图:http://www.tuyitu.com/photoshop/gif.htm

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ResNet是一种深度残差网络,它通过引入"跳跃连接"的方式解决了深层网络训练时的梯度消失和表达能力有限的问题。下面我将通过图形和算式来说明ResNet的工作原理。 首先,我们使用一个基本的卷积神经网络(CNN)架构作为基准模型(即无跳跃连接)。该模型由多个卷积层和非线性激活函数组成。然后,我们引入残差学习的概念,通过添加"跳跃连接"来构建ResNet。 图形上,我们可以将ResNet表示为一个由多个残差块组成的深层网络。每个残差块都有一个主要的路径和一个"跳跃连接"。主要路径由两个卷积层、批量归一化和激活函数组成,而"跳跃连接"直接将输入连接到输出,以避免信息的丢失。 算式上,对于第l层的输入x,我们可以计算出该层的输出h(x)。然后,我们可以将输出与输入相加,得到一个残差:r(x) = h(x) - x。最后,通过将残差与输入相加,得到l+1层的输出:y = x + r(x)。 通过引入"跳跃连接",ResNet能够学习残差函数而不是原始映射函数,这样可以更容易地优化深层网络。此外,"跳跃连接"还有助于信息的传递和梯度的流动,减少了梯度消失的问题。 总的来说,ResNet的工作原理是在深层网络中引入"跳跃连接",以便学习残差函数并解决深层网络训练时的梯度消失和表达能力有限的问题。它通过图形和算式直观地描述了这一原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值