卷积神经网络(Convolutional Neural Networks)
卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积网络在诸多应用领域都表现优异。“卷积神经网络’’ 一词表明该网络使用了卷积(convolution)这种数学运算。卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。
基本结构
层结构
1. Convolutional layer(卷积层--CONV)
由过滤器filters和激活函数构成。 一般要设置的超参数包括filters的数量、大小、步长,以及padding是“valid”还是“same”。所谓卷积其实相当于探测周围元素对中心点产生的影响。
概念
1.卷积
数学中用 “ * ” 表示卷积运算。
数学中卷积公式连续形式:
离散形式:
不同的是,数学上的卷积,要经过180度旋转,然后对应位置相乘并求和;而卷积神经网络中的卷积不需要经过旋转。
卷积运算:
2.滤波器(也叫卷积核,Filter)
卷积核(Convolutional Kernel)是卷积神经网络(Convolutional Neural Network,简称CNN)中的一种重要组件。它通常是一个小的矩阵或过滤器,用于在图像处理中进行特征提取。
卷积核通过滑动窗口的方式在输入图像上进行卷积操作,将图像上的每个像素点与卷积核进行对应位置的元素相乘,并求和得到卷积结果。卷积操作可以有效地提取图像的局部特征,例如边缘、纹理等。
卷积核的大小和形状可以根据需要进行设置。例如,一个3×3的卷积核可以检测图像中的边缘,而一个5×5的卷积核可以检测更大范围的特征。同时,卷积核的参数也可以通过训练得到,以使其能够更好地适应特定的任务。
在深度学习中,卷积核通常包含多个通道,即多个特征图。通过对每个通道进行卷积操作并将结果进行叠加,可以得到最终的特征图。
另外,滤波器的层数应与输入层的层数保持一致
3.填充(padding)
在卷积神经网络(CNN)中,Padding指的是在输入数据的边界周围添加额外的像素或边界值(通常是0)来扩展原始输入的尺寸。这样做可以保持输入和输出的尺寸一致或接近,并且可以在卷积层中保留更多的边界信息。
在进行卷积操作时,输入数据会经过滤波器进行卷积运算,通常会产生边缘信息丢失的问题。为了解决这个问题,我们可以通过填充(Padding)在输入数据的周围添加额外的像素。
所谓的valid padding 其实就是不进行填充,same padding 是在周围添加0.
4.步长(stride)
顾名思义,步长(stride)是指卷积操作中滑动过滤器的步长大小。步长决定了滤波器在输入数据上移动的距离。选择适当的步长取决于具体的任务和数据。较小的步长可以保留更多细节,但会增加计算成本。较大的步长可以减少计算负担,但可能会损失一些空间信息。
多通道
表示对应元素相加。
多个滤波器
也即是有几个过滤器,输出层就有几个通道
激活函数
常用ReLU 激活函数
总结
L层卷积层:
: filter的大小
表示通道数
表示 filter的大小
其中
若计算结果不是整数,则向下取整(2.52)。
若用表示 , 表示 则:
表示L层的输入,表示L层的输出,L+1层的输入,g(x)为激活函数,“ * ” 为卷积运算。
2. Pooling layer (池化层--POOL)
这里里面没有参数需要我们学习,因为这里里面的参数都是我们设置好了,要么是Maxpooling,要么是Averagepooling。 需要指定的超参数,包括是Max还是average,窗口大小以及步长。 通常,我们使用的比较多的是Maxpooling,而且一般取大小为(2,2)步长为2的filter,这样,经过pooling之后,输入的长宽都会缩小2倍,channels不变。
同样,计算输出大小的公式仍然适用
多通道层之间独立运算
3. Fully Connected layer(全连接层--FC)
这个前面没有讲,是因为这个就是我们最熟悉的家伙,就是我们之前学的神经网络中的那种最普通的层,就是一排神经元。因为这一层是每一个单元都和前一层的每一个单元相连接,所以称之为“全连接”。 这里要指定的超参数,无非就是神经元的数量,以及激活函数。
全连接层一般会把卷积输出的二维特征图转化为一维的一个向量,全连接层的每一个节点都与上一层的每个节点连接,是把前一层的输出特征都综合起来,所以该层的权值参数是最多的
对图像卷积操作后,接下来是先激活还是先池化,现在存在两种顺序:
- 卷积 -> 激活 -> 池化
- 卷积 -> 池化 -> 激活
先给出结论:
- 如果使用最大池化,两种顺序的结果是一样的。
- 如果使用平均池化,建议采用第1种顺序,即卷积 -> 激活 -> 池化