为什么用cnn????
基于两个观察:
1.我们不需要看整张图片
所以我们只需要看一小部分
2.同样的pattern可能出现在图片的不同地方
所以neuron间可以共用参数,换句话说就是filter扫过整张图片
什么是卷积层????
把filter扫过一张图片这件事情就叫做convolution(卷积)
那什么叫做把filter扫过一张图片呢????
其实就是不同的Receptive Field Neuron可以公用参数
而这组共用的参数就叫做一个filter
pooling
池化就是把图片变小,目的是减少你的电脑的运算量,但是pooling对你的performance还是可能会有损害的。所以,如果你的硬件配置好的话,那你就可以不做pooling。
实际操作中就是把卷积层和池化层交替使用,就是比如说做两次卷积,之后来一次池化
这就是一个经典的影像辨识的network,当你卷积几次之后你经过一个flatten层,然后你再通过几个全连接层或者softmax,就得到你最终的结果。
那说alphago呢,其实全连接的网络可以做到,但是CNN可以做得更好。
而CNN呢,他是为影像设计的,所以一个问题,他跟影像没有什么共同的特性的话,你其实不该用cnn,那今天下围棋可以用CNN那意味着什么??
意味着围棋和影像有共通的特性。
-
Some patterns are much smaller than the whole image.
它第一层的layer,它的filter的大小就是5 * 5,显然在设计这个network的人觉得说棋盘上很多重要的pattern也许看5 * 5的范围就可以知道了 -
The same patterns appear in different rigions.
还有呢,CNN如果你让它在一种图片上,这图片上的物件都比较小,那么如果你给它把图像放大,那么它就垮掉了,他就不行了。恩,要解决这个问题呢,你可以尝试以下数据增强啦,就,你想要你的测试集有什么样的效果,那你就应该训练的时候把数据增强成什么样子,这样才会有一个比较好的效果。
cnn厉害的地方在于,它是根据影像的特性来限制模型的弹性。