卷积神经网络CNN
为什么CNN
Why CNN for Image?
CNN是为了简化neural network的架构。
图片信息有以下3个特性:
-
有些pattern不需要看整张图
-
有些pattern出现在图片不同位置
-
Subsampling对判断影像没有影响
CNN架构
Convolution —> Max Pooling —> Convolution —> Max Pooling
以上过程反复几层
然后—> Flatten —> Fully Connected Feedforward network —> output
Convolution处理第1和第2个特性,Max Pooling处理第3个特性。
Convolution有一组Filter,Those are the network parameters to be learned. 先把1个Filter放在图片的左上角,2组9个值做内积,再按Stride移动网格,再做内积,一直继续。最后得到feature map。Filter在每个网格里检测是否有某种pattern。
Convolution在每个Filter(小网格)里learn,每次移动距离stride。
色彩也是input的一个维度
Convolution v.s. Fully Connected
Convolution就是Fully Connected拿掉一些weight的结果
为什么这么说呢?
-
Filter每次只连接9个参数(less parameters)。
-
Filter处理后的neuron之间share weight。
-
Max pooling模拟subsampling
把output放一起,再4个4个合一起,在块里取平均或最大值。
最后一个6乘6的image输出2乘2的image,Each filter is a channel ,这个过程可以重复很多次。
为什么说Convolution就是Fully Connected拿掉一些weight的结果,因为feature map之后就是flatten,flatten以后就是Fully Connected的处理。
CNN in Keras
CNN学到了什么?
计算activation
计算第k个filter的degree of the activation。
-
找一张image x使某个filter的activation最大。
这些图片有明显的纹路texture,所以filter就是检测某种pattern。
-
找一张image x使某个neuron的activation最大。
图片不再像纹路,因为每个图代表一个neuron,也就是更大的pattern。
-
找一张image x使某个维度(vector)的activation最大。
这些图片为什么不像0-9的数字?
Deep Neural Networks are Easily Fooled
CNN跟人类学到的东西不一样。
有什么办法让这些图片更像数字?
所以要对x做一些control,就是告诉CNN哪些x不是数字。
比如说图里白点不是数字。
Deep Dream
给CNN加张图,CNN会在input图上夸大它所看到的东西
Deep Style
给CNN加张一种style的图,CNN会使input图的style靠近加进来的这张图。
[呐喊]
CNN下围棋
什么时候用CNN?
要有image那样特性的数据。
- Some patterns are much smaller than the whole image
-
The same patterns appear in different regions.
怎么理解下棋里的max pooling?
alpha Go原文里的解释:
第一个hidden layer外围pad 0使其从19乘19变23乘23,filter是5乘5,filter数是192,stride是1,activation fuction是rectifier,然后在第2-12层hidden layer pad 0使其从5乘5变21乘21,
再接下来用3乘3的filter。
其实Alpha Go没有用max pooling。
CNN用于语音
filter只在frequency上移动有作用,在time上移动不提供帮助。
CNN用于文本
输入一句话,先embedding处理,就是每个word用一个vector来表示,这些vector排一起就是一个image。filter只在时间序列上移动,不在embedding dimension上移动。因为在embedding方向上,每一个vector是独立的。