精选推荐
一文看懂 | 什么是卷积神经网络(CNN)?
2021-10-09
神经网络是一门重要的机器学习技术,它是目前最为火热的研究方向“深度学习”的基础。神经网络是一种模拟人脑神经网络以期能够实现类人智能的机器学习技术;卷积神经网络 CNN依旧是层级网络,只是层功能和形式做了变化,可以说是对传统神经网络的一个改进。本文所述的CNN由卷积层,激励层, 池化和全连接四种结构组成。
卷积神经网络利用卷积来提取图像中物体相关特征,一般认为像素距离越近的特征其相关性越大,距离越远的特征相其相关性越小。每个神经元不需要对全局图像感知,只需要对局部感知即可,然后在更高层将局部信息综合起来就得到了全局信息。这种更高层特征提取就需要多层卷积。当然,单一卷积核只能提取单一物体特征信息,如Sobel卷积核分成两个,分别可以提取x方向和y方向信息。但是现实世界中物体包含多种特征信息,比如猫有形状、颜色、纹理、尾巴等信息,因此要提取比较全面特征信息,需要多种卷积核才能实现。每种卷积核可以学习一种信息,多种卷积核学到多种信息的融合,对物体分类来说才能更精确。每个卷积核都会将图像生成另一幅图像,比如使用两个卷积核就可以生成两幅图像,这两幅图像可以看成一张图像上不同通道。如果要叠加不同通道特征信息汇总到一幅图像,可以简单地将对应卷积完成通道图像上对应点值相加。
神经网络中每个神经元节点接受上一层神经元输出值作为本神经元输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点输出和下层节点输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。如果不用激励函数,每一层节点输入都是上层输出的线性函数很容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,网络逼近能力就相当有限。因此引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入线性组合,而是几乎可以逼近任意函数)。
激励层把卷积层输出结果做非线性映射,采用激励函数一般为ReLU(The Rectified Linear Unit)函数,ReLU函数其实就是一个取最大值函数,特点是收敛快,求梯度简单,但较脆弱。其输入输出结构如下所示,公式表达可以用下式来表示:
可以用所有提取得的特征去训练分类器,由于训练数据量庞大,训练时间长,过度训练可能会出现过拟合问题。为了解决这些问题,采用划块统计方式,将每个区域块中特征值做统计计算,用最能代表这个块的特征值代表整个区块用于训练。这个特征值可能是平均值,也可能是最大值,这些统计特征不仅具有低得多的维度,还可以改善结果,降低训练时间,这种操作就叫做池化(Pooling)。
池化层夹在连续卷积层中间,池化操作就是图像降维,用于压缩数据和参数的量,减小过拟合。简而言之,池化层最主要作用就是压缩图像。池化区域越大,信息压缩就越多,从而产生更“苗条”的网络。但是若池化面积太大,丢失信息太多,会降低预测能力。
池化方法有Max Pooling和Average Pooling,而实际用较多的是Max Pooling。对于每个2*2窗口选出最大数作为输出矩阵的相应元素值,比如输入矩阵第一个2*2窗口中最大数是6,那么输出矩阵第一个元素就是6,如此类推。
全连接层一般在在神经网络最后,用于连接前一层所有输出,对每个输出分配权重后再汇总到一起。全连接层与通用神经网络类似,对每个输入都有连接,但是卷积层通常只是实现局部连接。在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积原因是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。全连接层将所有特征汇总,最后得到全局化的特征。
彭诗翰,FPGA工程师。本科毕业于美国佛蒙特大学并获得电子电气工程主修学士学位以及数学辅修学士学位,研究生获得美国东北大学电子电气与电脑工程硕士学位。拥有出色的项目管理能力,能够熟练运用Arduino、Matlab。