CNN–卷积神经网络
全连接网络每层神经元按照线性一维分布
卷积神经网络每层神经元按照立体三维分布
一、基础认知
1.1 输入与输出
输入图像在计算机中表示为一大堆像素值。根据图片的分辨率和尺寸,将表示为一个 32 x 32 x 3 的数组(3 指代的是 RGB 值)
其中每个数字的值从 0 到 255 不等,描述了对应那一点的像素灰度
提供给计算机这一数组后,它将输出描述该图像属于某一特定分类的概率的数字
计算机通过寻找诸如边缘和曲线之类的低级特点来分类图片,继而通过一系列卷积层级建构出更为抽象的概念
1.2 生物学感知
CNN 是从视觉皮层的生物学上获得启发的。视觉皮层有小部分细胞对特定部分的视觉区域敏感。
大脑中的一些个体神经细胞只有在特定方向的边缘存在时才能做出反应(即放电)。
一些神经元只对垂直边缘兴奋,另一些对水平或对角边缘兴奋,这些神经元都以柱状结构的形式进行排列,而且一起工作才能产生视觉感知。
CNN :一个系统中的特定组件有特定任务的观点(寻找特定特征)
1.3 卷积原理
CNN 的第一层通常是卷积层。输入内容为一个 32 x 32 x 3 的像素值数组。
过滤器可以覆盖 5 x 5 的区域,被覆盖过的区域被称为感受野。
过滤器同样也是一个数组(其中的数字被称作权重或参数)。
重点在于过滤器的深度必须与输入内容的深度相同(这样才能确保可以进行数学运算),因此过滤器大小为 5 x 5 x 3。
图片来自于 Micheal Nielsen 的 「神经网络与深度学习( Neural Networks and Deep Learning)」一书,感谢并推荐阅读
1)筛选值在图像上滑动(卷积运算)时,过滤器中的值会与图像中的原始像素值相乘(又称为计算点积)
2)fitter遍历整个image,在每个位置进行卷积计算(对应位置相乘求和再加偏置项,执行ReLU)得到一个数字
3)该数字只是表示过滤器位于该点的情况,接下来在输入内容上的每一位置重复该过程。
4)输入内容上的每一特定位置都会产生一个数字。过滤器滑过所有位置后将得到一个 28 x 28 x 1 的数组,称激活映射(activation map)或特征映射(feature map)
(在一张 32 x 32 的输入图像,5 x 5 的过滤器能够覆盖到 784 个不同位置,映射为一个 28 x 28 的数组)
5)选用n个卷积核将得到那个激活映射
卷积计算中stride、zero padding
1.4 卷积工作方式
从高层次角度而言,每个过滤器可以被看成是特征标识符。特征指的是例如直边缘、原色、曲线。
所有图像都共有的一些最简单的特征。假设第一组过滤器是 7 x 7 x 3 的曲线检测器
作为曲线过滤器,它将有一个像素结构,在曲线形状旁时会产生更高的数值
即输入图像上某个形状看起来很像过滤器表示的曲线,那么所有点积加在一起将会得出一个很大的值
卷积层的输出是一个激活映射。因此,在这个带有一个过滤器卷积的例子里(当筛选值为曲线检测器),激活映射将会显示出图像里最像曲线的区域
(在这里,根据过滤器的筛选值不同,将对不同的输入做出不同程度的反应,考虑输出值大小代表的意义)
从宏观角度看,过滤器越多,激活映射的深度越大,能够提取的特征就越多,我们对输入内容的了解也就越多
二、整体结构
2.1 深入卷积网络
输入→卷积→ReLU→卷积→ReLU→池化→ReLU→卷积→ReLU→池化→全连接
基本结构:input----(CONV*n+Pool?)m----FNk----output
过滤器在第一个卷积层检测边缘和曲线一类的低级特征。而为了预测出图片内容的分类,网络需要识别更高级的特征
例如手、爪子与耳朵的区别。第一个卷积层的输出将会是一个 28 x 28 x 3 的数组(假设我们采用三个 5 x 5 x 3 的过滤器)
当我们进入另一卷积层时,第一个卷积层的输出便是第二个卷积层的输入
第一层的输入是原始图像,而第二卷积层的输入正是第一层输出的激活映射
第二个卷积层的输入大体描绘了低级特征在原始图片中的位置
在此基础上再采用一组过滤器(让它通过第 2 个卷积层),输出将是表示了更高级的特征的激活映射
这类特征可以是半圆(曲线和直线的组合)或四边形(几条直线的组合)
随着进入网络越深和经过更多卷积层后,将得到更为复杂特征的激活映射
在网络最后的可视化部分,可能会有一些过滤器会在看到手写笔迹或粉红物体等时激活
越深入网络,过滤器的感受野越大,意味着它们能够处理更大范围的原始输入内容(或者说它们可以对更大区域的像素空间产生反应)
2.2 完全连接层
检测高级特征之后,网络最后的完全连接层用于得到标准化的输出。
这一层处理输入内容(该输入可能是卷积层、ReLU 层或是池化层的输出)后会输出一个 N 维向量,N 是该程序必须选择的分类数量。
这个 N 维向量中的每一数字都代表某一特定类别的概率。
完全连接层观察上一层的输出(其表示了更高级特征的激活映射)并确定这些特征与哪一分类最为吻合
完全连接层观察高级特征和哪一分类最为吻合和拥有怎样的特定权重
当计算出权重与先前层之间的点积后,将得到不同分类的正确概率
三、训练
计算机通过一个名为反向传播的训练过程来调整过滤器值(或权重)
第一卷积层中的滤波器寻找边缘与曲线的,完全连接层观察激活图,每一层级的滤波器寻求需要的值
反向传播可分为四部分,分别是前向传导、损失函数、后向传导,以及权重更新
在前向传导中,选择一张 32×32×3 的数组训练图像并让它通过整个网络
在第一个训练样例上,由于所有的权重或者过滤器值都是随机初始化的,一个不偏向任何数字的输出
这样权重的网络无法寻找低级特征,或者说是不能做出任何合理的分类
接下来是反向传播的损失函数部分,损失函数有许多种定义方法,常见的一种是 MSE (均方误差)
我们想要预测标记(卷积网络的输出)与训练标记相同(意味着网络预测正确)
为了做到这一点,我们想要将损失最小化
将其视为微积分优化问题的话,寻找是哪部分输入(例子中的权重)直接导致了网络的损失(或错误),并修正它
接下来在网络中进行后向传导,测定出是哪部分权重导致了最大的损失,寻找调整方法并减少损失
一旦计算出该导数,将进行最后一步也就是权重更新。所有的过滤器的权重将会更新,以便它们顺着梯度方向改变
高学习速率意味着权重更新的动作更大,因此可能该模式将花费更少的时间收敛到最优权重
然而,学习速率过高会导致跳动过大,不够准确以致于达不到最优点
总的来说,前向传导、损失函数、后向传导、以及参数更新被称为一个学习周期
对每一训练图片,程序将重复固定数目的周期过程
一旦完成了最后训练样本上的参数更新,网络有望得到足够好的训练,即层级中的权重得到正确调整
四、测试
最后,为了检验 CNN 能否工作,我们准备不同的另一组图片与标记集(不能在训练和测试中使用相同的)并让它们通过这个 CNN。我们将输出与实际情况(ground truth )相比较,检验网络是否有效
五、影响模型的其他操作
5.1 stride–步幅
步幅控制着过滤器围绕输入内容进行卷积计算的方式。
过滤器通过每次移动一个stride的方式对输入内容进行卷积
步幅的设置通常要确保输出内容是一个整数而非分数。
通常情况下,步幅为1
步幅和卷积核的大小,共同决定了输入到输出的变化;每进行一次特征提取,图像都会变小
增加步幅:接受域重叠得更少并且得到更小的空间维度
5.2 padding–填充
根据卷积核的大小,在输入图像四周增加k-1/2个0,以此保护原图像的大小
尽可能多地保留原始输入内容的信息,就能更多的提取出那些低层的特征
zero padding = k-1/2
输出大小公式:o = (w-k+2p)/s +1 s=stride,p=padding,k means fitter
5.3 ReLU(修正线性单元)层
在每个卷积层之后,通常会立即应用一个非线性层(或激活层)。
其目的是给一个在卷积层中刚经过线性计算操作(只是数组元素依次(element wise)相乘与求和)的系统引入非线性特征。
ReLU 层效果很好,因为神经网络能够在准确度不发生明显改变的情况下把训练速度提高很多(由于计算效率增加)。
它同样能帮助减轻梯度消失的问题(由于梯度以指数方式在层中消失,导致网络较底层的训练速度非常慢)
ReLU 层对输入内容的所有值都应用了函数 f(x) = max(0, x)。用基本术语来说,这一层把所有的负激活(negative activation)都变为零。
这一层会增加模型乃至整个神经网络的非线性特征,而且不会影响卷积层的感受野。
5.4 池化层
在几个 ReLU 层之后,可以选择用一个池化层,也叫下采样层。
在这个类别中,也有几种可供选择的层,最受欢迎的就是最大池化( max-pooling)
它基本上采用了一个过滤器(通常是 2x2 的)和一个同样长度的步幅。
然后把它应用到输入内容上,输出过滤器卷积计算的每个子区域中的最大数字。
池化层还有其他选择,比如平均池化和 L2-norm 池化 。
直观推理:一旦我们知道了原始输入(有一个高激活值)中一个特定的特征,它与其它特征的相对位置就比它的绝对位置更重要。
这一层大幅减小了输入卷的空间维度(长度和宽度改变了,但深度没变)
两个主要目的:
第一个是权重参数的数目减少到了75%,因此降低了计算成本。
第二是它可以控制过拟合,这个术语是指一个模型与训练样本太过匹配了,以至于用于验证和检测组时无法产生出好的结果。
出现过拟合的表现是一个模型在训练集能达到 100% 或 99% 的准确度,而在测试数据上却只有50%
5.5 Dropout 层
Dropout 层在神经网络有了非常明确的功能。
训练之后,神经网络的权重与训练样本太过匹配以至于在处理新样本的时候表现平平。
Dropout 层将丢弃该层中一个随机的激活参数集,即在前向通过中将这些激活参数集设置为 0。
在某种程度上,这种机制强制网络变得更加冗余。该网络将能够为特定的样本提供合适的分类或输出,即使一些激活参数被丢弃。
此机制将保证神经网络不会对训练样本「过于匹配」,这将帮助缓解过拟合问题。
Dropout 层只能在训练中使用,而不能用于测试过程,这是很重要的一点。
六、小结
三大思想:局部感受野、权值共享、池化
卷积时使用的过滤器,是具有特异性的,一个过滤器只能学到一种特征
由卷积之后得到的隐藏层,权值和偏移值是共享的,这样能够减少模型参数的个数
池化,池化层通常接在卷积层后面。为了简化卷积层的输出。
池化层也在卷积层上架了一个窗口,但这个窗口比卷积层的窗口简单许多,不需要w,b这些参数,它只是对窗口范围内的神经元做简单的操作,如求和,求最大值,把求得的值作为池化层神经元的输入值
经过了卷积操作,模型从输入层学到的特征反映在卷积层上
max-pooling做的事就是去检测这个特征是否在窗口覆盖范围的区域内。
这也导致了,它会丢失这种特征所在的精准位置信息,所幸的是池化层可以保留相对位置信息。而后者相比而言比前者更重要。
池化层一个最大的好处:经过池化后,大大减少了我们学到的特征值,也就大大减少了后面网络层的参数(池化层的神经元数明显少于卷积层神经元数)
实验情况参见:cs231n中的卷积神经网络