CNN卷积神经网络笔记
来源:CS231n,知乎。
网址:
https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit
https://study.163.com/course/courseMain.htm?courseId=1003223001
1.卷积神经网络的结构
(1) 数据输入层/ Input layer
(2) 卷积计算层/ CONV layer
(3) 激励层 / Activation layer
(4) 池化层 / Pooling layer
(5) 全连接层 / FC layer
(6) Batch Normalization层(可能有)
(图片来源:CS231n)
2. 数据处理方式
(1) 去均值 :把输入数据各个维度都中心化到0
(2) 归一化 :幅度归一化到同样的范围
(3) PCA/白化 :白化是对数据每个特征轴上的幅度归一化
3.卷积层
3.1 概述
卷积层的参数是有一些可学习的滤波器集合构成的。每个滤波器在空间上(宽度和高度)都比较小,但是深度和输入数据一致。举例来说,卷积神经网络第一层的一个典型的滤波器的尺寸可以是5x5x3(宽高都是5像素,深度是3是因为图像应为颜色通道,所以有3的深度)。在前向传播的时候,让每个滤波器都在输入数据的宽度和高度上滑动(更精确地说是卷积),然后计算整个滤波器和输入数据任一处的内积。当滤波器沿着输入数据的宽度和高度滑过后,会生成一个2维的**图(activation
map),**图给出了在每个空间位置处滤波器的反应。直观地来说,网络会让滤波器学习到当它看到某些类型的视觉特征时就**,具体的视觉特征可能是某些方位上的边界,或者在第一层上某些颜色的斑点,甚至可以是网络更高层上的蜂巢状或者车轮状图案。
3.2 局部关联
让每个神经元只与输入数据的一个局部区域连接。如图
(假设输入数据体尺寸为[32x32x3](比如CIFAR-10的RGB图像),如果感受野(或滤波器尺寸)是5x5,那么卷积层中的每个神经元会有输入数据体中[5x5x3]区域的权重,共5x5x3=75个权重(还要加一个偏差参数)。注意这个连接在深度维度上的大小必须为3,和输入数据体的深度一致。)
3.3 卷积核的参数
3个超参数控制着输出数据体的尺寸:深度(depth),步长(stride)和零填充(zero-padding)。
深度:如下图所示,深度为5,这里的深度指的是沿着深度方向排列、感受野相同的神经元集合称为深度列。
步长:在滑动滤波器的时候,必须指定步长。当步长为1,滤波器每次移动1个像素。当步长为2(或者不常用的3,或者更多,这些在实际中很少使用),滤波器滑动时每次移动2个像素。
零填充:零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)。
三者的关系:假设输入数组空间是正方形,输出数据体在空间上的尺寸可以通过输入数据体尺寸(W),卷积层中神经元的感受野尺寸(F),步长(S)和零填充的数量(P)的函数来计算。输出数据体的空间尺寸为(W-F
+2P)/S+1。比如输入是7x7,滤波器是3x3,步长为1,填充为0,那么就能得到一个5x5的输出。如果步长为2,输出就是3x3。
3.4 参数共享
(1) 假设每个神经元连接数据窗的权重是固定的
(2) 固定每个神经元连接权重, 可以看做模板 ,每个神经元只关注一个特性。
(3) 一组固定的权重和不同窗口内数据做内积: 卷积
(4) 参数大大减少
参数共享的假设是有道理的:如果在图像某些地方探测到一个水平的边界是很重要的,那么在其他一些地方也会同样是有用的,这是因为图像结构具有平移不变性。所以在卷积层的输出数据体的不同位置中,就没有必要重新学习去探测一个水平边界了。
4.激励层
把卷积层输出结果做非线性映射
4.1 常见的激励函数:
(1)Sigmoid
(2)Tanh(双曲正切)
(3)ReLU
(4)Leaky ReLU
(5)ELU
(6)Maxout
(2)Tanh(双曲正切)
(3)ReLU
(4)Leaky ReLU
(5)ELU
(6)Maxout
4.2 选择**函数
(1)
CNN慎用sigmoid!
慎用sigmoid!
慎用sigmoid!
(2)
首先试RELU, 因为快。
(3)
如果2失效,
请用Leaky ReLU或者Maxout
(4)
某些情况下tanh倒是有不错的结果,
但是很少
5.池化层
通常,在连续的卷积层之间会周期性地插入一个汇聚层。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。汇聚层使用MAX操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸2x2的滤波器,以步长为2来对每个深度切片进行降采样,将其中75%的**信息都丢掉。
5.1 不使用池化层
很多人不喜欢汇聚操作,认为可以不使用它。比如在Striving
for Simplicity: The All Convolutional Net一文中,提出使用一种只有重复的卷积层组成的结构,抛弃汇聚层。通过在卷积层中使用更大的步长来降低数据体的尺寸。有发现认为,在训练一个良好的生成模型时,弃用汇聚层也是很重要的。比如变化自编码器(VAEs:variational autoencoders)和生成性对抗网络(GANs:generative
adversarial networks)。现在看起来,未来的卷积网络结构中,可能会很少使用甚至不使用汇聚层。
6.全连接层
两层之间所有神经元都有权重连接 ,通常全连接层在卷积神经网络尾部 。
7.典型的CNN结构
INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC