CNN基础知识

本文详细探讨了CNN在图像分类的优势,解释了为何使用卷积层及其权值共享的重要性,分析了卷积步长的作用以及Pooling的目的。还讨论了激活函数特别是ReLU的使用,以及解决ReLU神经元死亡的策略。最后提到了CNN在深度学习面试中常问的问题,包括CNN在不同领域的应用和其捕捉局部与整体关系的能力。
摘要由CSDN通过智能技术生成

字节跳动的面试题就涉及了这方面内容,突然发现这些方面其实自己很欠缺
涉及到很多问题,慢慢更新

CNN在图像分类上有什么优势

对于比较相似的图片来说,分类的特征不能很好地提高。所以瓶颈在于特征的选择上。CNN可以自动提取特征,减少计算量。

为什么使用卷积层

在生物上说,人的视觉系统的信息处理是分级的。从低级的V1去提取边缘特征,V2区提取形状或者目标,再到更高层,整个目标,目标的行为,也就是说高层的特征是底层特征的组合,从底层到高层的特征表示越来越抽象,越来越能表现语义或者意图。抽象层面越高,存在的可能猜测就越少,就越利于分类。
那怎么一层一层的提取边缘语义呢,那就可以选择卷积。
卷积的本质是提取图像不同频段的特征
在这里插入图片描述
在这里插入图片描述
input layer和conv layer卷积之后,经过激活函数之后可以看到:当input layer和conv layer排列一样时会输出3,像素的排列方式其实就是图片中的形状,如果图像中的形状和filter中形状相似的话,输出值就大,不像就小。因此,卷积的操作建立了神经网络与图像边缘的联系。CNN经过训练之后,filter就是图像的边缘,纹理之类的特征,卷积层在自动提取图片中的特征。除此之外,卷积有一种局部连接的思想,它对图像一块一块的处理可以减低参数的数量。
为何要使用权值共享:如果每个filter只对应图片一部分的话,这个神经元学到的内容就不能应用到其他神经元,如果物体换了出现的位置,按照局部连接的思想,其他区域相同的物体是无法被正确识别的。这是就提出了权重共享,这样就是的模型的准确率不受物体位置的影响,看起来就像同一个filter划过整个图片,这样同时会保留相对的空间信息。一个filter不能提取所有特征,因此要生成多个不同的filter来对图片进行卷积。CNN对于分级结构的模拟是通过卷积层的层层叠加实现的,卷积层的不断叠加会使得提取到的特征越来越复杂,最终完成对图片的分类。

卷积为什么要有步长

一般认为人对外界的认知是从局部到全局的,图像之间的联系也是局部的像素联系较为紧密,距离较远的像素相关性则较弱。因而每个神经元没有必要对全局图像进行感知,只需要对局部感知,然后在更高层将局部信息综合起来得到全局信息。步长的存在是为了使filter滑动,这样就可以在整张图片中任何位置都能提取出这个特征,得到相对的空间信息。关于步长的选择,当stride=1时,它是逐个像素挨个提取,当stride!=1时,可以看成它在下采样相当于固定点的pool,降维的同时忽略掉部分特征,可以减少过拟合。

为什么要有Pooling

Pooling层会损失细节,损失细节可以减少无关的信息,这样可以减少参数和计算量,同时降维防止过拟合,它是一个特征选择,信息过滤的过程,它损失了一些特征,这些特征可能是视觉上的冗余性,同时降低了对计算性能的要求,随着现在运算速度的提高,pooling层使用的越来越少。
他有什么性质呢:他可以在一定程度上提高空间不变性
对于图像来说,重要的是单独区域的特征,以及特征之间的相对位置,pooling(以MAX Pooling为例),对局部感受野取其极大值,如果图像在尺度上发生了变化,有一定概率在尺度变化后对应的感受野取到的极大值不变,这样就可以使特征图不变,同样也增加了一定的平移不变性。对于形状不变性,实际上,在图像识别中,重要的不是显著特征的绝对位置而是相对的位置,所以为了避免把过多的位置信息编码进去,卷积和池化的操作都可以对局部的纹理进行模糊化,这样也就使图像有了一定的形状的不变性。
特征提取的误差来自两个方面:

  1. 领域大小受限
  2. 卷积层权值参数误差

主流的pooling层的主要区别

  • average pooling
    它能减小领域大小受限的误差,更多的保留图像的背景信息
  • max pooling
    它能减少卷积层权值参数误差,更多地保留纹理信息。
    这里附上知乎的链接为什么 VGG、resnet 等都是用 max_pooling 而不是 mean_pooling?
    某大佬说,Stride为1的Pooling,目前看到的都是Avg。作用是增加感受野,空间上传递信息。Stride不为1的Pooling的作用主要是降维,减少计算量。
    1.Max Pooling的作用是筛选,在一定区域内有一个符合特征,即认为存在,将这个信息保留下来。而Avg Pooling则是提取共性。CNN中相邻元素的感受野接近,假如目标存在,那么对他们的影响都应该存在。使用Avg Pooling可以增强相同之处,减弱差异,将目标相关的信息更好的保留下来。在Resnet中,两个Pooling的不同可能就是这个原因。
    2.从空间上来讲,Avg是线性的,而Max则可以认为是非线性的。Max Pooling在空间中的作用有点类似ReLU(不知道以后会不会有类似PReLU的Pooling函数,比如从大到小加权平均什么的)

为什么使用激活函数

如果不使用激活函数,每一层的输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性函数,与只有一个隐藏层效果相当,这种情况就是多层感知机(MLP)。引入激活函数之后,深层神经网络有了意义,它不再是线性函数,他可以逼近任意函数。

为什么使用relu

  • 采用sigmoid等函数,反向传播求误差梯度时,求导计算量很大( f ′ ( z ) = f ( z ) ( 1 − f ( z ) ) f'(z)=f(z)(1-f(z)) f(z)=f(z)(1f(z))),而relu求导非常容易。
  • 深层网络,sigmoid反向传播时容易出现梯度消失。
    后层梯度饱和,但是前面几层梯度很小,这样在SGD的过程中,前面基层的参数几乎没有改变。
  • relu会使一部分神经元输出为0,这样造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
    由于深度网络中对于非线性的依赖没有那么高,稀疏特征并不需要网络具有很强的处理线性不可分机制,所以使用简单速度快的线性激活函数可能更为合适。

使用relu存在梯度过大导致神经元死亡

假设某曾网络权重为W,输入为x,输出为z,经过Relu激活为a。
前向传播公式:
在这里插入图片描述
设损失函数为L,反向传播公式为:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值