卷积核各通道 分别与 数据对应通道 内积 + 相加(即,会降维)
参考博客:https://blog.csdn.net/sscc_learning/article/details/79814146
https://www.cnblogs.com/python-frog/p/9380290.html
提出
全链接网络需要的参数非常多
四个结构上的特性
局部不变性
像素与像素之间, 主要与其附近的像素有关, 与其距离较远的像素无关
统计平稳性
权重共享
平移不变性
对于物体的识别不依赖与它在图像中的位置
构成性
被识别的目标是由各个部分组成(池化, 下采样)
计算
特征图谱大小
N=(W-F+2p)/S+1
激活函数
Sigmiod:
Tanh:
PReLU:
卷积核计算
Step1: (W-F+2P)/S+1计算输出特征的大小
Step2: 核的每一层和原图做卷积计算
Step3:有两个和, 所以有两层
空洞卷积
增加卷积和的大小
池化
显著减少连接个数, 但每一个特征映射神经元个数并没有显著减少
计算
最大池化, 平均池化
作用
1.对微小平移的不变性
2.更大的接受域
CNN及其组件
batchsize/iteration/epoch的辨析
如果一个训练集有10000个样本,batchsize有100,那么iteration是100,epoch是1。如果batch太小,则会使梯度下降震荡,难以收敛;太大则会导致内存不够,达到相同的精度需要的epoch数会增加。并且其大小到一定程度将不会影响训练速度和精度。所以,选择合适的batch_siaze可以充分利用计算资源,并加快训练的速度。
卷积层
取一定大小的卷积核。同过stride和图像中的像素做内积。
如果越大,则说明图像中的那部分和这个卷积核代表的内容越一致。这个是CNN的核心,在CV领域有非常重大的意义。因为卷积核的性质面向的是特征,则即便图片内容平移,旋转,稍作压缩等都只有较少影响。
可以说CNN是对图像的内容做处理
激活层
引入非线性因素。因为数据集不总是线性可分的(如图6 、7示)。(其实每一个神经元都是一个小的分类器,可以从逻辑回归出发进行思考)。
常见的激活函数
ReLU
Sigmod:
值得一提的是,常用ReLU,相较于Sigmoid速度会快很多,尤其是梯度下降到 零点的时候,另一个拖慢Sigmoid的原因是,它要进行对数运算。
Pooling
即取一定大小像素,用均值或者最大值取代这块区域,以减小 特征向量维度,减小运算量,实现局部平均和抽样,使特征映射输出对平移,旋 转,比例放缩等形式变换的敏感度下降。池化层跟在卷积层之后,构成两次特征 提取结构,使得在对输入样本识别时网络有较好的畸变容忍能力。
Padding
有两种方式VALID和SAME,后者在stride的时候不够时用0填充,前者则舍弃多余的。
Dropout层
如果模型的参数太多,容易产生过拟合的现象。Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征.。
全连接层
CNN在全连接层之前提取的是局部特征。而全链接层则是将特征整合在一起。(这样的一个好处是降低位置带来的影响。但是,在需要位置的应用中全链接层则是不必要的。此外,全连接层之后便不再有卷积,因为图像已经变为一维。)
而多层的全链接层可以理解为先整合一部分,再将这一部分再整合:
输出层(softmax分类器)
它是逻辑回归在多分类问题上的推广,计算结果是返回一个概率。
优化算法
神经网络是模型,而训练过程就是拟合的过程。即在初始化的过程中正向传播模型的结果,然后用损失函数计算损失,再反向传播以优化(调整)参数以得到更为合适的模型。 而优化算法就是用来“优化”参数的。
最原始的优化算法是梯度下降,但是梯度下降不仅训练缓慢而且内存消耗大。
这里再提及几种不同的优化算法:
SDG: 每次训练一个样本。优点是速度快,不易陷入局部最优,缺点是参数方差大,不稳定收敛。
MBGD: 每次训练一批量的样本。即上述两种方法的折中。优点是收敛稳定,速度快。
Momentum:优化相关方向,弱化无关方向的震荡,以使收敛加速并且稳定。
NAG:可以预知参数,减小大幅震荡。
但是,优化还存在着问题:1.学习率的选择。 2.鞍点
Adagrad:自动调整学习率。但是,算法使学习率不断减小,以致速度过慢甚至停止学习(即梯度消失)。
AdaDelta:相较于上方算法,会限制学习率范围,不至停止。并且该算法不用设置初始默认学习率。
Adam:能计算每个参数的自适应学习率。在实际应用中,Adam方法效果良好。与其他自适应学习率算法相比,其收敛速度更快,学习效果更为有效,而且可以纠正其他优化技术中存在的问题,如学习率消失、收敛过慢或是高方差的参数更新导致损失函数波动较大等问题。
Batch Normalization
一种较好理解的说法是,给隐藏层的数据也进行标准化。数据在经过标准化之后能够进行更好的训练,尤其在激励层之前,如果数据不当可能导致经过激励函数之后,映射区间极端(即不同区间数据映射到大约相同的函数值),如图,则为无/有BN的激励层映射效果
并且,normalization还可以反向,即:自适应扩展参数和平移参数。
过程就是用均值和方差来标准化,并且辅以参数进行调整,如上所示。简单的理解就是,像输入层一样,给数据标准化,只不过这些都发生在隐藏层。
值得强调的是,BN层是加在激励层之前的。
CNN的优点
1)可以用来识别位移、缩放及其他形式扭曲不变性的二维图形。
CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的 特征抽取,而隐式地从训练数据中进行学习。有的分类方式几乎都是基于统计特 征的,这就意味着在进行分辨前必须提取某些特征。然而,显式的特征提取并不 容易,在一些应用问题中也并非总是可靠的。卷积神经网络,它避免了显式的特 征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基 于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知 器。它可以直接处理灰度图片,能够直接用于处理基于图像的分类。
2)同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也 是卷积网络相对于神经元彼此相连网络的一大优势。
3)卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方 面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网 络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征 提取和分类过程中数据重建的复杂度。
4)”局部连接、权重共享“可以减少网络的训练参数,使神经网络结构变得更 简单,适应性更强。
CNN的不足
1) 卷积层弊端
A.反向传播 Backpropagation, BP
反向传播算法是一种寻找在处理完一批数据后每个权重对 error 的贡献的方法。
很多好的优化算法(如SGD,ADAM等) 利用 BP 算法来计算梯度
虽然,BP 已经取得了很好的效果,但其不是一种十分高效的学习方法,因为 BP 算法需要大规模数据集的支持。
B.平移不变性 Translation invariance
当提到平移不变时,往往意味着,同一 目标发生轻微朝向或位置变化时, 可能并不会激活那些识别该目标的神经元。
2) Pooling 层弊端
Pooling 层会丢失大量的有价值信息,以及忽略局部与整体之间的关联性.
例如,如果描述一个面部检测,需要结合某些特征,如嘴巴mouth,2只眼睛 eyes,脸轮廓face oval 和鼻子 nose,才能说其是人脸. 但只要这 5 种特征出现, CNN 就很可能会判断为是人脸. 如:
这两张图片的 CNN 输出可能很相似,但却是很不好的。
经过多个 pooling 层之后,将丢失 object 的准确位置信息. 对于某些识别任务,如需要 high-level 局部的精确位置信息,是影响很大的。
提高泛化能力
1) · 正则化。
2). 使用更多强有力的规范化技术(尤其是弃权和卷积)来减小过度拟合,增加 神经网络层数。
3). 使用修正线性单元而不是S型神经元,来加速训练-依据经验,通常是3-5倍。 4). 使用GPU来计算。
5). 利用充分大的数据集,避免过拟合。
6). 使用正确的代价函数,避免学习减速。
7). 使用好的权重初始化,避免因为神经元饱和引起的学习减速。
