应用1:影像辨识
一张图片是一个三维的Tensor,一维是长,一维是宽,一维是channel (channel=3代表RGB的三种颜色,长和宽代表解析度,像素的数目)
模型的弹性越大,越容易过拟合。
观察一
图像中是否出现一些重要的pattern,这种pattern代表重要物件(例如鸟嘴,鸟眼,鸟爪)
一个neuron不需要去看整张图片,只需要看图片的一小部分,就足以去侦测一些关键的pattern有没有出现
第一个简化fully connected network的方式 : Receptive Filed (感受野)
Receptive Filed彼此之间可以是重叠的。
同一范围可以有多个不同的neuron。
最经典的安排方式:一般做影像辨识的时候会看所有的channel, 所以在描述一个Receptive Filed的时候,我们只讲它的宽高就行了,不用讲它的深度,因为它考虑的是全部的channel,宽高合起来叫Kernel Size, 一般Kernel Size不会设太大,3 x 3足够了,7x7,9x9就是蛮大的Kernel Size了。
一个Receptive Filed,一般会有一组一排neuron去守备它,
比如:64个或128个neuron去守备一个Receptive Filed的范围。
移动的量叫做Stride(一般设为Stride=1或2)因为我们希望Receptive Filed是有重叠的部分,为什么呢?假设Receptive Filed完全没有重叠,那有一个pattern正好出现在两个Receptive Filed的交界上面,就会变成没有任何neuron去侦测它,可能就会Miss掉这个pattern。
超出范围就去做Padding,padding就是补值,当做那个里面的值为0
观察二
同样的pattern出现在不同图片的不同区域里
第二个简化fully connected network的方式 :parameter sharing(共享参数)
不同的neuron,weight一样
两个相同receptive filed的neuron是不共享参数的
每一组Receptive Filed 都只有一组参数,这些参数叫做Filter.
Receptive Filed + parameter sharing = Convolution Layer
有用 Convolution Layer 的 neuron 就叫 Convolution Neural Network
CNN的Model的bias比较大,Model的bias大不一定是坏事
当Model的复杂度很高的时候,比较容易过拟合
Fully Connected Layer可以做各式各样的是事情,可以有各式各样的变化,但是它可能没有办法在任何特定的任务上做好
Convolution Layer是专门为影像设计的,虽然Model bias很大,但它仍可以做的很好,这个在影像上不是问题,但是在影像之外的任务,就要小心了,要看那些任务有没有影像用的特性。