CNN理论基础
CNN基本结构
图一 CNN基本结构
CNN卷积神经网络的构成,主要由输入层,卷积层,池化层,全连接层,输出层等。
(1)输入层:计算机将输入层理解为若干矩阵。在数据输入前,通常需要进行预处理操作,1.是为了防止输入数据单位不一样,网络收敛较慢。2.如果所选的激活函数有值域限制,必须将网络训练的目标数据映射到激活函数值域。
进行数据预处理的方式
1.去均值(将输入数据的各个维度中心化到0)
将数据的每一维特征都减去平均值。在numpy 中 X -= np.mean(X, axis = 0)
2.标准化(将输入数据的各个维度的幅度标准化到同样范围)
归一化数据,使数据在相同尺度。 在numpy 中 X /= np.std(X, axis = 0)
3.PCA \ 白化(用PCA降维,即去掉特征与特征之间的相关性;在PCA基础 上对转换后的数据每个特征轴上的幅度标准化为白化)首先均值化数据,然后求协方差矩阵。
(2)卷积层:对于一张输入图片, 将其转化为矩阵, 矩阵的元素为对应的像素值. 转换后得到的矩阵与卷积核(也称滤波器)矩阵进项卷积操作。在输入图片的矩阵中,找到一个尺寸和卷积核矩阵尺寸相同的矩阵,将两者对应位置的元素相乘相加得到的标量作为新矩阵(也称feature map)的一个元素,并放在对应位置上完成一次卷积操作。
图二 卷积操作
具体操作如下:假如输入矩阵A=[1 1 1 0 0;0 1 1 1 0;0 0 1 1 1;0 0 1 1 0;0 1 1 0 0];卷积核B=[1 0 1;0 1 0;1 0 1];则可以得到一个3×3的feacher map第一个元素是:1×1+0×1+1×1+0×0+1×1+0×1+0×1+0×0+1×1=4。以此类推得到矩阵
[4 3 4;2 4 3;2 3 4],如下图所示。
卷积核可以根据需要调整滑动的幅度,如果出现无法恰好到达边缘的情况可在输入矩阵的外层补上一层0,可根据需要设定补零的层数. 补零层称为 Zero Padding, 是一个可以设置的超参数, 但要根据卷积核的大小, 步幅, 输入矩阵的大小进行调整, 以使得卷积核恰好滑动到边缘。
如果输入的是一组矩阵,例如输入一组“RGB”。 这时卷积核也不再是一层的, 而要变成相应的深度.如果使用多个卷积核,各个卷积核产生的feachermap“相互叠加”得到一个新的矩阵。
(3)池化层:池化又叫下采样,池化过程也可以理解为存在着一个滑动核(也称滑动窗口),它的存在是为了降低数据量。常用的方式有:Max Pooling—最大值池化,Avearage pooling(也称 Mean Pooling)—均值池化。具体如下:
图三 max pooling
滑动核是2×2的矩阵,第一次池化与上图中feachermap的对应位置重合。取4个元素的最大值作为滑动核的第一个元素,再整体向右移动一个单位。完成一次max pooling操作。
图四 Average pooling
同样地,滑动核是2×2的矩阵,第一次池化与上图中feachermap的对应位置重合。取4个元素的平均值作为滑动核的第一个元素,再整体向右移动一个单位。完成一次Average pooling操作。
(4)全连接层:全连接层的目的是将网络学习到的特征映射到样本的标记空间中,将前面经过多次卷积后高度抽象化的特征进行整合,然后可以进行归一化,对各种分类情况都输出一个概率,之后的分类器(Classifier)可以根据全连接得到的概率进行分类。
(5)输出层:输出层主要准备做好最后目标结果的输出。使用Softmax激活函数来做图像识别的分类。
前向传播
输入:包括图片样本,CNN模型的层数和所有隐藏层的类型(卷积层+卷积层,或者卷积层+卷积层+池化层的组合等)。
对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。
对于池化层,要定义池化区域大小k和池化标准(MAX或Average)。
对于全连接层,要定义全连接层的激活函数(输出层除外)和各层的神经元个数(一种关于神经元的理解是每个矩阵的元素可以看成一个神经元)。
根据输入层的填充大小P,填充原始图片的边缘,得到输入张量
初始化所有隐藏层的参数W,b
for l=2 to L−1:
如果第l层是卷积层,则输出为al=ReLU(zl )=ReLU(a(l-1)*Wl+b^l )
如果第l层是池化层,则输出为al=pool(a(l-1) ),这里的pool指按照池化区域大小k和池化标准将输入张量缩小的过程
如果第l层是全连接层,则输出为al=σ(zl )=σ(W^l a(l-1)+bl )
对于输出层第L层: aL=softmax(zL )=softmax(W^L a(L-1)+bL )
接着,是反向传播,我写word文档的时候,公式用的是mathtype弄到博客里面还不太会,上截图了,需要源文档的欢迎私信博主啊(博主这有CNN,RNN,LSTM,transformer)。