从元件角度简单理解CNN

从元件的角度简单理解CNN

文章目录

  • 从元件的角度简单理解CNN
  • 写在前面
  • CNN整体结构
    • 卷积+线性整流(CONV+RELU) 部分
      • CONV卷积部分
      • RELU线性整流部分
    • 池化(POOL) 部分
    • 全连接(FC) 部分
      • BP神经网络
  • CNN的训练
    • 误差反向传递
      • 全连接层的反向传播
      • 池化层的反向传播
        • 最大值池化的反向传播
        • 平均值池化的反向传播
      • 卷积层的反向传播
  • 总结

写在前面

本文旨在帮助想要初步了解卷积神经网络(CNN)工作原理的小白能对其整体结构有一个大致的认识。文中多有谬误之处,望读者朋友们谅解。

CNN整体结构

个人认为,下面这张图足以展示CNN各层结构的作用了。

从元件角度简单理解CNN_第1张图片
这个 CNN 是相当经典的“卷积池化+全连接”结构,下面来简单解释一下这个网络各层结构的作用:

卷积+线性整流(CONV+RELU) 部分

这个部分的主要功能是特征融合

CONV卷积部分

卷积核的作用是特征映射(feature map)。下图是对卷积过程的展示,可以看到对于通过卷积后的矩阵,该矩阵上的每个都可以一度程度上反映原矩阵上某个区域的特征。而这个区域的大小是由卷积核的大小决定的。
从元件角度简单理解CNN_第2张图片
如果要控制卷积后矩阵的大小,就需要调整卷积核移动的步长(stride),同时视情况对原矩阵使用填充(padding)。下图的卷积过程就使用了填充,一般填充值为 0 。
从元件角度简单理解CNN_第3张图片
由此也可以顺便引出感受野(Receptive Field)这个比较重要的基本概念。在 CNN 中,感受野的定义是卷积神经网络每一层输出的特征映射上每个像素点输入图片上映射的区域大小。如下图:

从元件角度简单理解CNN_第4张图片

RELU线性整流部分

RELU作为基本的激活函数,函数图像如下:从元件角度简单理解CNN_第5张图片
那么,为什么需要用到激活函数呢?

简单举个例子,在二维平面空间中,如果不使用激活函数,使用任意个系数 a 与偏置 b 对一个任意坐标(x,y)进行多次线性变换,最终变换总能用一个系数 a‘ 与偏置 b’ 表示。

如果没有非线性部分参与运算,无论做多少次线性变换,最终都会塌缩为一次线性变换。而激活函数,就是这个变换的非线性部分,使得神经网络可以通过改变参数拟合不同的曲面。

池化(POOL) 部分

池化(pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样(down sample)。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。
池化层具有控制过拟合的作用,但最大值池化会对原图像的梯度造成负面影响。由于神经网络是在可导元件的基础上进行设计的,其学习过程就是利用梯度信息进行对输入数据进行拟合的过程。若图像梯度发生变化,可能会对神经网络的学习过程造成影响。

在输入 CNN 最后的全连接层之前,我们再来回顾一下开头摆出的这张图:
从元件角度简单理解CNN_第6张图片
可以看到,位置越浅的特征图展现的特征具体而复杂,越深的特征图展现的特征图越抽象而简洁。而抽象特征图更能表示出图片中物体的特征,同时也只需要更少的参数。这时我们再把最深层得到的特征图输入全连接层。

全连接(FC) 部分

全连接层由一个BP神经网络构成,也是最经典的神经网络模型。

BP神经网络

BP神经网络由神经多个神经元组成,神经元结构如下:

从元件角度简单理解CNN_第7张图片
需要注意的一点是,BP神经网络中的输入输出值都需要进行归一化,一般使用sigmod函数。
从元件角度简单理解CNN_第8张图片
上图是一个典型的BP神经网络的结构。对于多分类 CNN 模型,输入为先前得到的特征图,输出的数量为需要分类的数量,输出值为输入图片对于每个分类的置信度(Confidence)。最终通过比较置信度,可以得到图片最有可能的类别。

CNN的训练

对于模型训练时的前向传播,这里不再赘述。相信大家更好奇的是卷积层与池化层如何做到反向传播,所以在这里简单介绍一下。

误差反向传递

全连接层的反向传播

全连接层的反向传播,通过链式法则对每一层参数进行更新
在这里插入图片描述

通过对误差进行求导,利用链式法则可以得到每个神经元中的每个参数对输出误差的影响,并利用该值对这些参数进行修正。

池化层的反向传播

根据池化尺寸对特征图的尺寸进行还原,即进行上采样(up sample),然后分为两种情况:

最大值池化的反向传播

除了前向传播记录下来的最大值处继承上层梯度外,其他位置都置零。过程如图所示:
从元件角度简单理解CNN_第9张图片

平均值池化的反向传播

设池化尺寸为 k,将梯度平均分成 k*k 份,传递到前面对应区域内即可。过程如下:
从元件角度简单理解CNN_第10张图片
需要注意不是将梯度直接复制而是均分,否则反向传播后的特征图梯度将会是原来的 k 倍。
同时由于池化层没有激活函数,可以直接令其激活函数的导数为1。

卷积层的反向传播

对含有卷积的式子求导时,需要将原卷积核旋转180度(rot180),并在周围补零,即可得到上一层的梯度误差。过程如下:从元件角度简单理解CNN_第11张图片
然后根据求出的误差求导,对卷积核中每个参数进行修正。

总结

本文对卷积神经网络的各个元件的原理以及训练过程中反向传播的过程进行了简单的介绍,相信通过这篇文章,刚刚接触神经网络的同学能够对 CNN 有一个更加清晰的认识。

本人以后会发布一些关于机器学习模型算法,自动控制算法的其他文章,也会聊一聊自己做的一些小项目,希望读者朋友们能够喜欢。

你可能感兴趣的:(神经网络简单理解,神经网络,深度学习)