在浅层神经网络中,我们一般采用fully connected layer(全连接层)进行层和层的连接。
即 Output=f(Wx+b) ,其中 f 是一个非线性函数。
从上面的表达式中,我们可以看出,这层的任何一个输出神经元都和全部的输入神经元相连。
随着网络的加深,如何加快训练速度变成了一个很现实的问题。我们采取了一种方法:CNNs来显著减少参数个数,从而加快了训练速度。
CNNs基于如下从认知心理学得到的一个现象:
人识别图像的,对信息进行最初级加工的神经元的任务是感知图像的一个局部是否有一个边缘(Edge)。
这句话里面值得借鉴的点是:“局部”。
在CNN中,局部被体现在了两个方面。
1.一个输出神经元不必和所有输入神经元相连:连接局部性
2. 连接到同一个输出神经元的输入神经元要在同一个局部:位置局部性。
于是就有如下的卷积函数。
yij=fks({xsi+di;sj+dj}0≤di,dj<k;Wks)
其中
xij 表示位于(i,j)处的输入
yij 表示位于(i,j)处的输出
s 表示跨度(stride)
Wks表示函数 fks 的参数
k (kernel size)表征感受野(receptive field)的大小(k×k)
感受野就是连接到特定输出神经元的输入神经元的统称。
从上面的式子可以看出,相邻的两个输出神经元对应的感受野的间隔为s,每一个输出神经元的感受野的大小为k
更需要指出的是, fks 和 i,j 无关,也就是对于不同的输出神经元,他们用的卷积函数是完全一样的,也就是对于不同的输出神经元,我们都同时用同一种参数。
总结一下,CNN减少参数的手段:
1. 连接局部性,一个输出神经元不用和所有的输入神经元相连
2. 空间局部性,与一个输出神经元连接的输入神经元空间位置上相邻
3. 参数一致性,所有的输出神经元共享同一套参数。