深度学习---卷积神经网络CNN概念及计算过程
一、卷积神经网络的介绍
1、简介:卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络的创始人是著名的计算机科学家Yann LeCun,目前在Facebook工作,他是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。
2、解决的问题:
分类问题、推荐系统、检测系统、自动驾驶汽车、分割数据监测、人脸识别
二、CPU与GPU
1、CPU中央处理器:解释计算机指令以及处理计算机软件中的数据,读取指令编译并执行。
2、GPU图形处理器:是图形结构的重要元件,是连接计算机和显示终端的纽带。
3、区别
GPU比CPU的计算速度快.CPU是串行,GPU是并行计算,除了图像处理也更多地参与到计算中。
三、卷积神经网络结构
输入层
卷积层(CONV)
**函数
池化层
全连接层
输出层
①数据输入层
数据预处理:去均值、归一化、PCA降维
②卷积计算层
两个关键操作:
局部关联:每一个神经元可看作一个滤波器
窗口滑动:filter对局部数据计算
(input*filter)+bias—>output
a.padding(填白)
目的:让数据参与计算更平均
为什么填0?占一个位置,0不具有意义
通过填白,可以输出我们想要的几个维度的数据
b.步长
计算公式:
[(n+2p-f)/s+1]
[(原始维度+2*填白-filter维度)/步长+1]
c.池化层
为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合
maxpooling:取区域内的最大值
avgpooling:去区域内的平均值
d.参数共享机制
神经元构成一个filter
filter是用来检测特征的,共享机制可以用较少的参数,训练出更好的模型,有效的避免过拟合
③CNN的结构组成
它的结构可以用:
X–>CONV(relu)–>MAXPOOL–>CONV(relu)–>FC(relu)–>FC(softmax)–>Y
来表示。
四、多维输入数据计算
size(img)=(N,C,W,H)
N:批处理(样本编号)C:0~9,RGB通道,维度 W:长和宽 H:深度
size(filter)=(FN,C,FW,FH)
FN:滤波器 C: 0~9,RGB通道,维度 FW:长和宽 FH:深度
五、卷积层的反向传播
前向传播的关系式为:out=x*w+b,而反向传播时则需求解出dw是什么?
反向传播的目的:更新参数w。因此要先算出dw。假设上一层会传过来一个梯度dj/dout(j对out的求导),根据链式求导法则,因此dw = dj/dout * dout/dw =dj/dw * x ,在计算机中方便为变量命名的缘故,将dj/dout记为dout,dj/dw记为dw,即图中的情况。
即dw=dout*x;将dout反向乘以x得到dw。
六、非线性映射函数
sigmoid,tanh,relu,leaky relu,elu,maxout
七、池化层的前向传播与后向传播
池化层(pooling):一般在卷积层+ Relu之后,它的作用是:
1、减小输入矩阵的大小(只是宽和高,而不是深度),提取主要特征。(不可否认的是,在池化后,特征会有一定的损失,所以,有些经典模型就去掉了池化这一层)。
它的目的是显而易见的,就是在后续操作时能降低运算。
2、一般采用mean_pooling(均值池化)和max_pooling(最大值池化),对于输入矩阵有translation(平移),rotation(旋转),能够保证特征的不变性。
mean_pooling 就是输入矩阵池化区域求均值,这里要注意的是池化窗口在输入矩阵滑动的步长跟stride有关,一般stride = 2
A、实现过程
池化层滤波器大小一般为(2 , 2),随着滤波器的移动,依次选择窗口内的最大值作为输出。
B.池化层的反向传播
CNN网络中一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第l+1层的feature map有16个梯度,那么第l层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的。
1、mean pooling
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下
2、max pooling
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id。
源码中有一个max_idx_的变量,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示
八、卷积神经网络优缺点
优点:
1、共享卷积核,对高维数据处理无压力;
2、无需手动选取特征,训练好权重,即得特征;
3、深层次的网络抽取图像信息丰富,表达效果好。
缺点:
1、需要调参,需要大样本量,训练最好要用GPU;
2、物理含义不明确。