假如有一幅1000*1000的图像,如果把整幅图像作为向量,则向量的长度为1000000( 1 0 6 10^6 106)。在假如隐含层神经元的个数和输入一样,也是1000000;那么,输入层到隐含层的参数数据量有 1 0 12 10^{12} 1012。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。
CNN网络一共有5个层级结构:
- 输入层
- 卷积层
- 激活层
- 池化层
- 全连接FC层
卷积层
局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。
卷积层计算方法:
F
1
=
W
11
⋅
R
+
W
12
⋅
G
+
W
13
⋅
B
+
b
1
F
2
=
W
21
⋅
R
+
W
22
⋅
G
+
W
23
⋅
B
+
b
2
F
3
=
W
31
⋅
R
+
W
32
⋅
G
+
W
33
⋅
B
+
b
3
F
4
=
W
41
⋅
R
+
W
42
⋅
G
+
W
43
⋅
B
+
b
4
F_1 = W_{11} \cdot R +W_{12} \cdot G+W_{13} \cdot B+b_1\\ F_2 = W_{21} \cdot R +W_{22} \cdot G+W_{23} \cdot B+b_2\\ F_3 = W_{31} \cdot R +W_{32} \cdot G+W_{33} \cdot B+b_3\\ F_4 = W_{41} \cdot R +W_{42} \cdot G+W_{43} \cdot B+b_4
F1=W11⋅R+W12⋅G+W13⋅B+b1F2=W21⋅R+W22⋅G+W23⋅B+b2F3=W31⋅R+W32⋅G+W33⋅B+b3F4=W41⋅R+W42⋅G+W43⋅B+b4
其中,F表示每一张特征图,W表示卷积核
池化层
池化(Pooling):也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:
- Max Pooling:最大池化
- Average Pooling:平均池化
通过池化层,使得原本44的特征图压缩成了22,从而降低了特征维度。
虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的
输出层(全连接层)
经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性。
当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的: