卷积神经网络主要用于图像分类。一张图片通过我们的卷积神经网络也就是Model计算出概率值,通过Cross entropy (交叉熵)归一化到0和1,概率最大的显示为1,其余显示为0。 那么一张图片是怎么输入到Model里面的呢?我们知道图片是一个三维的tensor(张量),张量可以理解为超过二维的矩阵。以下图举例我们可以写成(100,100,3)的形式,我们需要把这样的图片转化成一维的形式,也就是一个巨大的向量。这个巨大的向量才可以输入到我们的Model里。 Model怎么分辨图片里是什么动物呢?我们人是怎么分辨的,机器就是怎么分辨的。我们一般找图片的特征,比如:鸟嘴,眼睛,爪子等,机器也是这样的。我们深入思考一下,一张图片里的特征只占很小的部分,是不需要看整张图片的。这样处理起来,参数和计算量就少多了。 我们让一个神经元只考虑一小部分的范围,这个小部分的范围叫做Receptive filed(感受野),用来表示网络内部的不同位置的神经元对原图像的感受范围的大小。把一个Receptive filed 的数据(3,3,3)拉直变成一个27维的向量,输入到神经元里,神经元为这个27维的向量分别添加27个weight再加上一个bias,就可以传入到下一层了。 通常为了让感受野覆盖全部的图片我们会设置stride=2 或者 stride= 1,超出图片的部分使用padding,最经典的kernel size 是3*3。每一个Receptive filed 使用一连串的neurons来守护,比如64,128 第二个观察是,特征会出现在一张图片的不同区域,以下图为例:鸟嘴出现在左上角,左上角的Receptive filed含有侦测鸟嘴的neuron,第二张图的中间也含有侦察鸟嘴的neuron,我们不就有很多重复的neuron了嘛? 我们要做的就是share parameters(共享参数),让检测鸟嘴的neuron拥有相同的weight和bias. 注意喽,此时的拥有相同参数的neuron不能出现在同一个receptive field。为什么呢?在同一个 receptive field 就是有相同的输入,参数完全一样,那输出也完全一样了。 我们把参数相同的neuron叫做一个filter. 把我们前面介绍的综合到一起,Fully Connected Layer 就是输入一张图片,拉直展平,直接放到Model里面,具有灵活性。在此基础上,我们做了一点点改进,加入了Receptive Filed 每次只侦察图片的一小部分,然后我们有做了一点点改进,让相同功能的neuron参数也相同,也就是参数共享。基于这两个小小改进的网络层叫做Convolutional Layer(卷积层),含有Convolutional Layer(卷积层)的网络叫做Convolutional Neural Network(CNN,卷积神经网络)。
把一张图片做subsampling(下采样),就是生成图像对应的缩略图。如何实现下采样呢? 我们引入了pooling. Pooling 可以通过下面两张图来说明。 Max Pooling 就是留下每组数据最大的那个数。当然还有Mean Pooling等。 Pooling存在的理由主要是减少运算量。 下面就是一般cnn会用到的网络层。