卷积神经网络
总结
卷积神经网络:Convolutional Neural Network(CNN),Network Architecture designed for Image
卷积神经网络主要用于图像分类。一张图片通过我们的卷积神经网络也就是Model计算出概率值,通过Cross entropy (交叉熵)归一化到0和1,概率最大的显示为1,其余显示为0。
Image Classification
模型结构
模型输出
y ^ \hat y y^的维度代表了类别个数。
模型输入
每张图片都使用 3-D tensor 表示。3 channels 表示每个像素上的RGB值。
Network的输入都是向量,所以需要将 3-D tensor 变换为一个向量。向量中的每个元素代表某个像素的某个R、G、B值。
全连接神经网络
全连接神经网络的参数很多,参数越多,模型的弹性越大,但也越容易过拟合。
下面讨论:图像分类任务是否需要全连接神经网络?
图像分类任务特性
特性一:神经元关心局部图片中关键特征而不是整张图片 - 感受野
在图像分类任务中,神经元的任务是找到一些关键的特征。根据图片中这些关键特征(critical patterns),可以判别出该图片中的物体。人其实也是使用同样的方法进行图像识别的。
例如:一只鸟的图片,找出图片的特征,比如:鸟嘴,眼睛,爪子等。
基于图片中一些特征识别图片这样的思路,图像分类任务中神经元并不需要知晓整张图片,每次只需要图片局部一小部分,就可以让识别某个关键特征的神经元识别出该局部是否含有该关键特征。
一张图片里的特征只占很小的部分,是不需要看整张图片的。这样处理起来,参数和计算量就少多了。
让一个神经元每次识别只考虑图片局部一小部分的范围,这个小部分的范围叫做 Receptive filed(感受野),用来表示网络内部的不同神经元对原图像的感受范围的大小。
把一个Receptive filed 的数据(3,3,3)拉直变成一个27维的向量,输入到神经元里,神经元为这个27维的向量分别添加27个weight再加上一个bias,就可以传入到下一层了。
不同神经元的感受野可以重叠,同一个感受野可以输入给不同的神经元。
神经元每次识别一个感受野,每个神经元需要以感受野的形式扫过整张图片。
问题一:不同的神经元可以使用不同大小的感受野吗?- 可以
有些关键特征在3x3的感受野中可以识别到,但有些关键特征可能在5x5的感受野中才可以识别到。所以不同的神经元需要使用不同大小的感受野。
问题二:神经元是否可以只关心部分channel?- 可以
在一般任务中CNN不这样考虑,但是有这样的做法存在。
问题三:感受野可以是长方形吗?- 可以
可根据对问题的理解,决定感受野使用什么尺寸。
问题四:感受野可以不连续吗?- 可以
例如:在某种情况下,关键特征出现在图片的左上角和右下角,可以使用左上角+右下角组成感受野。
感受野经典设计
卷积核(kernel size):感受野的高x宽,不考虑感受野深度。
步长(stride):感受野移动的距离(以像素个数为单位)。
界外补值(padding):超出边界的感受野,使用数值填补像素。
padding方式有很多中,例如:使用0、全部像素的均值,或者边界像素值等进行padding。
① all channels + kernel size(3x3)
② 同一个感受野,会输入给很多神经元(一般是64个或128个)。
③ 不同感受野,需要有重叠,以避免识别中遗漏在感受野的边界上的关键特征,
④ 感受野超过图片边界需要使用数值进行像素填补(padding)。
特性二: 关键特征可能出现在图片的不同位置 - 参数共享
**相同感受野的神经元间共享参数没有意义。**若感受野相同,那么输入相同,共享参数的神经元参数相同,那么有相同感受野并且共享参数的神经元的输出就相同。
参数共享-经典设计:filter
关于参数共享的说明
参数共享的概念,是从一个角度分析卷积操作引出filter,共享的参数叫filter,filter即CNN中的卷积层中的每个神经元。
下面会从另一个角度分析卷积操作:filter。
卷积层
filter中的数值表示模型的未知参数W,需要通过梯度下降进行学习才能得到。
假设这些参数已经计算出来了,并且考虑图片的channel=1即黑白图片,下面分析卷积操作。
每个filter卷积得到的结果称为特征图(feature map)。一个卷积层得到的卷积结果为特征图组。
特征图组的channel等于前一层的神经元个数,该特征图组输入的下一层filter的深度等于该特征图组的channel。
问题:感受野会导致CNN看不到大范围的关键特征吗?- 不会
假设卷积核尺寸为3x3,第一卷积层中一个数值对应原图片中3x3的区域。右下角蓝色特征图表示第二卷积层卷积操作结果的特征图,第三卷积层在该特征图上3x3感受野其实观察的是原图片的5x5的区域,红框-1对应原图左上角的3x3区域,红框-2对应原图片右下角的3x3区域,所以,卷积层数越多观察到的原图片的区域越大。
观点一 参数共享 Vs 观点二 filter
共享的参数就是filter。
参数共享就是filter扫过整张图片。
filter扫过整张图片的过程称为卷积。
特性三:下采样 - 池化 pooling
下采样不会改变图片中的物体,例如上图所示,将偶数列和偶数行像素删除,得到的图片仍然是鸟。
pooling 没有参数,不需要学习。
pooling 池化操作:将filter卷积得到的特征图,划分为很多相同大小的小区域(尺寸自定义),对每个区域只保留一个数值。
最大池化:每个区域只保留最大的数值。
平均池化:每个区域只保留其中所有数值的平均值。
实际使用时,一般是在卷积操作之后进行池化操作。例如:两次卷积操作之后接一次池化操作。
池化会丢失原始图片中的精细化的信息,所以现在的图像任务中,也有解决方案中不再使用池化操作。
池化操作的目的是减少特征数量,减小图片,从而减小运算量,如果计算资源充足,也可以放弃使用池化操作。
图像分类任务特性总结
receptive field + parameter sharing = convolutional layer
含有 convolutional layer 的神经网络就是卷积神经网络。
receptive field :神经元每次识别只关注图片局部,而不是整张图片。
parameter sharing:不同的特征出现在图片不同的区域。使用参数共享。
使用感受野、参数共享、池化都可以减少参数,降低神经网络弹性,所以CNN的Model Bias比较大。但是在图像相关任务中 model bias 大不是坏事,其他任务中若有图像相关任务的特性 model bias 大也不是坏事,可以考虑使用卷积神经网络,除此之外的任务,model bias 大可能导致欠拟合。
model bias 不是y=wx+b中的b,可以理解为参数越少,模型越简单,model bias越大。参数越多,模型越复杂,model bias越小。
model bias越小,模型越复杂,参数越多,越容易过拟合。
卷积神经网络结构
flatten 是将多维tensor转换为向量的过程。全连接神经网络的输入是向量。
卷积神经网络应用
围棋
Application:Playing Go
为什么围棋任务适合使用CNN?- 围棋任务拥有图像任务的特性
alpha go 论文中的网络架构使用CNN,但是没有使用池化技术。围棋任务中也不适合使用池化技术。
其他
需要分析任务是否拥有图像任务的特性,若当前任务拥有图像任务的特性,CNN模型偏置大不是问题,可以使用卷积神经网络,否则,CNN模型偏置大可能导致欠拟合,不能使用卷积神经网络。
CNN无法处理位移放大缩小旋转的图片 - 数据增强 or Spatial Transformer Layer
CNN可以识别一张图片中的物体,但该图片若经过位移、放大、缩小、旋转,CNN会认为是不同的图片,可能无法识别出图片中物体。
数据增强(data augmentation)
翻转(Flip)、旋转(Rotation)、缩放比例(Scale)、裁剪(Crop)、移位(Translation)、高斯噪声(Gaussian Noise)、高级增强技术(条件对抗神经网络(Conditional GANs)等)等。
参考:数据增强(Data Augmentation) - 于晨晨的文章 - 知乎