在卷积神经网络中一般包含着三种不同类型的层,分别是之前讲过的卷积层,还有池化层,以及全连接层。它们各自有着不同的作用。

卷积层

卷积层我们刚讲过,这里就不赘述。它的优点是可以做到提取特征时对位置不敏感,比如人的头像出现在图片的左上,中间,还是右下,因为卷积计算中的Filter移动,使得它对位置不敏感。而且Filter的参数共享,让卷积神经网络比全连接神经网络参数大大下降。同时因为卷积层的Filter会匹配不同位置的数据,使得Filter中的weight值不容易过拟合。

池化层

池化层的英文是Pooling layer,我觉得翻译成“浓缩层”更贴切一些。Pooling的意思就是把输入矩阵的某一个小的区域里求得一个最大值。生成一个新的输出层。有时候也有求区域里的平均值的情况。不过绝大多数都是求区域里的最大值。

上图是一个4乘4的矩阵,做一个2乘2,步长为2的取max的pooling。一般pooling的步长都等于filter的行列数。步长也可以取其他值,比如1,这时生成的output的矩阵就是一个4+2-1乘4+2-1,3乘3的矩阵。
池化层还有一个和卷积层很不同的地方是,它是对每个channel都做同样的操作。经过池化层后,channel数目并不改变。不像卷积层的filter,filter的channel和要输入的channel数一样,但是输出只有一个channel。
池化层中并没有像weight值一样需要我们求解的参数。至于池化层filter的长宽,步长,都是模型训练前我们需要设置的。
一般池化层不做padding。
池化层起到一个对卷积层提取的feature 浓缩的作用,只取这个区域最关键的特征。 因为在求解网络参数的时候池化层并没有要求解的参数。它只是对卷积层的一个固定操作。所以一般情况下我们把卷积神经网络里的卷积层和后边跟着的池化层归为一层。

全连接层

在讲卷积层是你可能会有这样的困惑,我们的网络最终是要判断一副图片是否是猫,或者是手写数字的几这样的问题。我们怎么从多个channel的矩阵中得到我们想要的输出呢?
答案就是经过了卷积层,池化层之后,一般在卷积神经网络最后的几层我们都需要使用全连接层。全连接层就是之前我们讲的经典神经网络里竖着一排的神经元,其中每一个神经元和前层每个channel里的矩阵的每一个元素以weight值相连接。全连接层的神经元有自己的bias,z函数,a函数,就是之前经典神经网络里用到的那些。

最终输出也是如果对多分类选其一就用softmax函数,如果多分类多选我们一般就用多个logistic回归的loss function。
全连接层只用在最后,因为一般都后边的层经过卷积和pooling多层的汇聚,元素越来越少,应用全连接不会出现参数太多无法计算的问题。

各个层如何系统工作

卷积层是用来发现特征的,池化层是用来浓缩特征的,全连接层是在卷积神经网络里最后几层把特征和我们期待的输出建立联系的。一般一个或者多个卷积层会跟一个池化层。

建立一个卷积神经网络,就是就是怎么设计和组合这些卷积层,池化层,和全连接层,然后设置网络的超参数:层数,filter的大小,filter的个数,是否padding,stride大小。池化的区域大小,用max还是mean。

之前传统神经网络的我们的超参数就很多,现在加上卷积,又引入的很多超参数。使得自己从头调试一个卷积神经网络就比较麻烦,加上大数据量的输入,求解参数可能千万或者亿级别。使得训练和试错时间成本都很大,好在神经网络有迁移学习的特性。我们可以借鉴一些成功的卷积神经网络的参数设置,在它之上做一些修改来适应我们新的业务问题。
下一篇文章我们就看一下经典的卷积神经网络是什么样子的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: