深入学习卷积神经网络中卷积层和池化层的意义(一)

为什么要使用卷积呢?

在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量,需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用,有时多了,有时少了,有时选择的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。

如果有人说,任何特征都是从图像中提取的,那如果把整副图像作为特征来训练神经网络不就行了,那肯定不会有任何信息丢失!那先不说一幅图像有多少冗余信息,单说着信息量就超级多。。。

假如有一幅1000*1000的图像,如果把整幅图像作为向量,则向量的长度为1000000(10^6)。在假如隐含层神经元的个数和输入一样,也是1000000;那么,输入层到隐含层的参数数据量有10^12,妈呀,什么样的机器能训练这样的网络呢。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。于是,牛逼的卷积来了。接下来看看卷积都干了些啥。

CNN卷积神经网络层级结构

深入学习卷积神经网络中卷积层和池化层的意义(一)

CNN网络一共有5个层级结构:
  •  输入层
  •  卷积层
  •  激活层
  •  池化层
  •  全连接FC层

1 输入层

与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的输入层中预处理方式有:
  •  去均值
  •  归一化
  •  PCA/SVD降维等

2 卷积层

局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。 (后面详解)

深入学习卷积神经网络中卷积层和池化层的意义(一)

深入学习卷积神经网络中卷积层和池化层的意义(一)

3 激励层

所谓激励,实际上是对卷积层的输出结果做一次非线性映射。

如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。

常用的激励函数有:
  •  Sigmoid函数
  •  Tanh函数
  •  ReLU
  •  Leaky ReLU
  •  ELU
  •  Maxout

激励层建议:首先ReLU,因为迭代速度快,但是有可能效果不加。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。

4 池化层

池化(Pooling):也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。

主要有:
  •  Max Pooling:最大池化
  •  Average Pooling:平均池化

深入学习卷积神经网络中卷积层和池化层的意义(一)

通过池化层,使得原本4*4的特征图压缩成了2*2,从而降低了特征维度。
深入学习卷积神经网络中卷积层和池化层的意义(一)

虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

5 输出层(全连接层)

经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性。

当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

深入学习卷积神经网络中卷积层和池化层的意义(一)

未完待续.......

本文转自:博客园 - 战争热诚,转载此文目的在于传递更多信息,版权归原作者所有。