CNN
仅供个人学习,不具参考价值!
Image Classification
- dimension长度表示能辨识多少种
如何把图像作为输入呢?巨大的向量 (内容为某一位置某一颜色的强度)
- channels: R G B三种颜色
参数很多,flexibility越大,但也增加了overfitting的风险(数学问题,为什么,后续详谈)
考虑到影像辨识的特性,我们不需要每一个Neuron都和input dimension都有一个weight,需要对影像辨识特性有一些观察
Observation 1
A neuron doesn’t have to see the whole image
每一个Neuron只在意自己Receptive field中发生的事情
如何确定Receptive field还是看你自己咯~
- 彼此之间可重叠
- 同一范围可以有多个不同Neuron来守卫
我也浮想联翩了~
yeah!!! 你可以任意设计Receptive fields,但是经典是这样的!
- 会看all channels (所以我们只看高*宽,称为kernel size,常见的kernel size就是3 * 3,原因后续详谈)
- 同一个Receptive Field会有一组Neuron去守备
- 我们希望Receptive Field之间有重叠,否则可能会miss交叠处的pattern,移动量stride(一般设1/2) - hyperparameter
- 超出范围,那就补值(padding)为0,当然有各种padding方法
Observation 2
是不是可以让不同Reception field的Neuron共享参数
- weight完全一致
- Two neurons with the same reception field wouldn’t share parameters
经典的共享方法:
Benefit of Convolutional Layer
因为convolutional layer是特别为影像设计的,所以虽然model bias较大,但在影像上就不是问题。
Another story based on filter
- feature map: 数字群,这个feature map可以看做是另一张图片,不过channel数对应的是filter数
Multiple Convolutional Layers
叠第2层,不过channel现在是64(前一个convoluntion layer的filter数)
filter的大小3*3会不会让network无法看到比较大范围的pattern呢?
不会!!!!oh my gosh!!! 原来在第二层映射的是原图像上很大的范围!3 * 3 → 5 * 5
Comparision of Two Stories
story1*用的一组参数就是story2中的filter
story1中不同的Neuron共用参数守备不同的范围,就是story2中 一个filter扫过整张图片-convolution
Observation 3
Pooling - Max Pooling
没有参数,没有要learn的东西,行为都已经规定好
每一组(大小自己决定)选一个代表,Max Pooling中就是选择最大的那个
把图片变小
Convolutional Layers + Pooling
几次convolution一次pooling
- 4 * 4 → 2 * 2
但对performance有伤害,可能也会丢掉细小的东西,所以今年流行有full convolution network
最终把影像中的矩阵拉直变成一个向量
Application: Playing Go
- 19*19 解析度的图片
- 48 channels in Alpha Go,这涉及围棋规则
Why CNN for Go playing???
pooling? 你还可以随意拿掉一个row或column吗?
To learn more …
CNN is not invariant to scaling and rotation
we need data augmentation就是截一小块出来放大/旋转,让CNN看
Spatial Transformer Layer可以解决这个问题,请自行参考