视觉感知
相同的图片经过不同的视觉系统,会得到适合自己生存环境的感知。
不同的观察角度,决定了图片的识别结果。
图像表达
画面识别的输入$x$是形状为(width, height, depth)的三维张量。其中每一个(width,height)的矩阵称为一个channel。
画面不变性:一个物体在channel中的位置不应该影响对该物体的识别结果。
为什么前馈神经网络不能完成任务?
输入图片是一个三维张量,但是很明显前馈神经网络很难识别不同位置的“相同”样本。
也即:应当使前馈神经网络在识别图片中的物体时,即使物体在不同位置也能顺利识别出来。
卷积神经网络:让权重在不同位置共享的神经网络
卷积神经网络的最基本的操作:
- 卷积
- 非线性(ReLu)
- Pooling池化
- 分类(全连接层)
卷积
使用局部区域去扫描整张图片
其中:红框表示filter或者kernel,隐藏层节点为kernel的线性组合。
那么,隐藏层节点$y_0$的表达式即为:
$$ y_0=x_0w_1+x_1w_2+x4w_3+x_5w_4+b_0 $$空间共享
不同的区域共享同一个“权重矩阵”和偏移量$b_0$。矩阵形式的输出表达:
经过一次feature detector后的隐藏层就可以看做是“卷积”的特征。处理Depth这一个维度:将三个channel看成三组不同的权重矩阵
特别的,针对$$ 2\cdot2\cdot3 $$(RGB)的kernel有:
也就是说,depth维是以被贯穿的方式处理的。
在实践中,Depth的数值与filter的个数相同。步长(Stride):
这个参数决定了filter滑动一次所跨越的像素数量。本文的例子中步长均为1。Zero padding
为了保证卷积后的图片尺寸不变,则需要在最外一层填充0,多filters
不同的filters对同一个图像抓取到的Feature Maps也会不同。
每一个不同的filter代表了每一个不同的操作,下图就展示了filter对用一张图片不同的处理结果。
非线性(ReLu)
回顾一下老朋友ReLU:Rectified Linear Unit
这个环节的主要作用就是把一些值为负数的像素点全部设置为0,
Pooling池化
- Max pooling
整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出output。那么为什么要有这个环节?卷积后的Feature Map中有对于识别物体不必要的冗余信息。
注:上图的步长设置为1
全连接层
卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。
小结:卷积神经网络的训练过程
- 随机初始化所有的filter、参数、权重
- 将训练图像作为输入,通过卷积->ReLu->池化(pooling)->全连接层的过程找到每个分类的概率。
- 在输出层计算总误差。
- 使用梯度下降反向传播更新所有filter、参数、权重的值。其中,权重按它们所占误差的比例更新;
再用一个例子查漏补缺
游戏截图如下:
一副图片由1024($32*32$)个像素组成。
第一个卷积层由6个$5*5$并且步长设置为1的filter生成,我们可以形象的理解为它的depth维度为6。注:下图将ReLu环节与卷积环节合二为一了,请读者心中有数。
紧接着针对每一个feature map使用$2*2$并且步长为2的max pooling。可以看到Pooling层的每一个像素对应Conv层的四个像素。
接下来是最难理解的第二次的卷积层和max pooling层的环节:
首先,观察第一层max pooling到第二层卷积的个数,为什么8个feature map经过filter的f卷积之后变成了16个feature map?
为了寻找答案,我们来观察下第二层feature maps的filter都是长成什么样的:
请大家仔细观察上图:我们会发现,第二层卷积层的filter的形状和所选择的第一层max pooling的feature map息息相关!也就是说,我们在做第二层的卷积时,只考察了第一层的局部特征!
第二层的max pooling与第一层同理,我就不再赘述了。
之后是全连接层,全连接层利用了所有的特征:
全连接层的全景图如下:
参考与引用