在普通神经网络中,每个神经元都和临近层的所有神经元相连接,这称为全连接(full-connected).
在识别MNIST手写体的程序中,普通神经网络有784(28x28)个输入神经元。通过官方的训练数据和测试数据,模型能达到大约98%的准确率。但是,这种全连接方式不适合用在真正的图像识别上。原因是它没有考虑图像的特殊结构。比如,它把相距远点像素和相距近的像素同等对待。实际上,相距近的像素,相关性更高。
中实际的图像识别中,常用的是卷积神经网络。卷积神经网络有3个重要的概念: loal receptive field, shared weights 和 pooling. 这几个概念翻译过来很别扭,就直接用英文。
1.loal receptive field
在普通神经网络中国年,输入层的每个神经元(像素)都会连接到每一个隐藏层神经元。
在卷积神经网络中,只把一个小区域到像素连接到第一个隐藏层的神经元。这个小区域被称为local receptive field.
就一MNIST的28x28图像为例,采用5x5的区域,则第一个隐藏层会有24x24个神经元。(默认stride length=1). 若图片大,可以用大一点的local receptive field会比较好。
然后我们把local receptive field 向右移动一个像素,用它连接二个隐藏神经元。
一直这样移动下去。那么28x28的输入图像,5x5的local receptive fields,就会在隐藏层生成24x24个神经元。
2.shared weights and biases (共享权重和偏移量)
上例中,隐藏层的每一个神经元都有1个偏移量和5x5个权重。
对与24x24个神经元,卷积网络使用相同的权重和偏移量。
对于第j行第k列的隐藏层神经元,它的输出值是:
这种方法可以理解为:第一个隐藏层的所有神经元检测到相通的特征(feature),不同的只是检测的位置不同。
- 特征(feature): 可以理解为能够导致神经元被激活(activate)的输入模式。它可能是图像的边框,或者某种形状的类别,等等。
假设我们能够分辨某一批权重和偏移量的含义,比如是垂直边框,那么,我们就能把这种特征的检测方法应用中图像的任何位置。
卷积网络还有个特性是适用于图像的平移不变性,即,把一张小猫的图像平移后,仍然是小猫。
- 一些定义:
1. feature map: 从输入层到隐藏层的映射。
2. shared weights: feature map的权重
3. shared bias: feature map的偏移量
4. shared weight shared bias能够定义一个kernal(或filter)
完整的卷积层,包含多个feature map.
上图有3个feature map, 每个feature map有5x5个shared weights,和1个 shared bias.
实际使用中,卷积网会有很多feature map。
shared weights biases能够大大加少参数的数量。下面比较普通神经网络和卷积网的区别。
A: 上例若用普通神经网络,第一个隐藏层选中30个神经元,则这一层需要有28x28*30 30 =23550个参数。
B: 若用卷积网,选20个feature map. 则需要的参数为20x(5x5 1) = 520.
3.pooling layer (池化层)
池化层的作用是简化卷积层的输出。
上图把2x2的输入区域池化成一个单元。池化有好多方法,比如max-pooling, mean-pooling等等。上图用的是max-pooling.也就是将输入区的4个值进行比较,选择最大的值。
将上面所有概念合并到一起,组成完整的卷积网络,如下图所示:
相关文章
卷积神经网络的python实现