因此我们 通常把输入层 到 隐藏层的映射称为 特征映射(a feature map) , 卷积核共享的权值 w 叫做 shared weights .,b叫做 shared bias。 shared weights和 shared bias定义了一个核或者过滤器( a kernel or filter )
实际上我们在应用中会有很多特征图,分别检测不同 的特征:
上图有3个特征图,每个特征图 对应 5x5的 shared weights 和1个shared bias.。
为什么叫做卷积神经网络?
因为下面的公式里的包含卷积操作
用卷积符号可以把公式写成:
是卷积操作,
表示特征映射的输出响应,
表示特征映射的输入响应。
【Pooling layers】
池化层一般接在卷积层后面,用于简化卷积的输出结果。 其实就是把卷积层的输出结果进行压缩:
例如 上图就是使用 max-pooling 把四个神经元压缩为一个神经元:取最大的像素值,其它丢弃。( 当然也有其它的 pooling 例如 L2 pooling 是把 2x2的区域值 平方,求和,开根号 )。 上图 24x24 的特征图 经过 2x2的max-pooling 之后变成了 12 x 12的特征图。
对于3个特征图 先卷积后池化:
我们可以把 max-pooling看作去检测某个特征是否在输入图像的某个感受区域内出现过。 2x2的隐藏层神经元对应输出图像中的感受局域是 下图 黑色圆圈所圈部分:
我们的直觉是这样的: 一旦一个特征被检测到,它相对于其它特征的位置是精确的还是模糊的 差别并不大。 但是我们获得了很大的好处: 池化后特征数量大大减少了,之后的网络层需要的参数也就减少了。
【 综合在在一起 】
MNIST image识别 架构图:
接下来就可以用随机梯度下降和反向传播进行训练。不过由于不再是全链接,反向传播算法需要做一些修改。
总的来说 卷积神经网络 大大减少了网络参数,具备平移不变特性,多个卷积层连接在一起就是 一个个抽象度 逐次增加的 特征图。具体来讲假如要识别一只猫,最底层的检测初级特征(例如 垂直边,斜边等) 然后下一层会基于前一层的基础特征检测 抽象一点的特征 (例如 是否有 圆圈等),接着检测是否有 鼻子,眼睛等, 最后一层会检测是否是一个猫。