卷积神经网络常用于图像识别和图像处理的领域
它在进行图像识别时有三个优势:
一是可以识别只占图像一小部分的某个特征图样,
二是可以识别在不同区域出现的同一种特征,
三是对图像做缩放而不影响识别的结果。
这三种性质分别是卷积和最大池化带来的。
卷积
假设有一个黑白图像(黑为1,白为0),和一个3×3的矩阵,卷积就是从左上角开始把矩阵和对应的图像部分一一相乘然后加和。
如图所示,图像左上角对角线为1的部分与该矩阵做内积就得到3.然后根据设定好的步长移动矩阵,入步长为1就移动一格。直到把整个图像卷积完成。
每个卷积矩阵实际上都有其作用,例如图中这个矩阵就可以侦测是否有仅对角线为1的部分,如果有则其卷积结果为3.
当然,卷积矩阵可以有不止一个,把所有这些卷积的结果合在一起,就称为feature map。
这种卷积的实现并不复杂,我们可以将图像展开成一列像素并输入神经网络,如图所示。
池化
池化就是把feature map上的一块以某种特定的方式选出一个值。比如最常用的最大池化就是选出该区域里最大的值
flatten
所谓flatten,就是把经过多次卷积和池化得到的结果,转化成一列然后输入神经网络。
下面举个例子来说明一下卷积和池化的过程。
假如有一个黑白的28×28的图片,输入到有25个3×3的卷积矩阵中,就可以得到25个26×26的feature map,在进行2×2的最大池化,就得到25个13×13的feature map。
再次输入到有50个3×3的卷积矩阵中,就可以得到50个11×11的feature map,不过这里注意实际上feature map增加了一维(×25)。再进行2×2的最大池化,就得到50个5×5的feature map。
what does CNN learn(deep dream)
我们要如何知道CNN学习了什么,有什么样的功能呢?
在训练网络时,我们都是让输入为常值,网络的参数为变量,然后利用梯度下降调整参数,使损失函数最小。
现在我们可以反过来,使(训练好的)参数固定,输入为变量,使得最后feature map的值最大。
这样做以后我们就可以得到前几个filter的特征图像如下图所示。比如,我们通过观察就可以粗略地看出第三个filter是检测某种斜线,低九个filter是检测短竖线。
我们可以对整个网络做同样的事,比如说对一个受写数字辨识的网络求它输出值最大的结果,得到的可能如图所示
虽然这看起来很不像数字,但这就是这个网络眼中最标准的数字。
我们当然也可以对它进行一定的改进。比如减少墨水的部分,以为一个数字的图片其中着墨的部分应该是不多的。
(图中公式有误,应该把+改-)
CNN的一些其他应用
风格迁移
下围棋
语音识别
自然语言分析