跳到主要内容

卷积神经网络是什么

CNN 是什么?

卷积神经网络(Convolutional Neural Network,简称CNN)是一种专门用于处理具有类似网格结构的数据的深度学习模型,例如图像(2D网格的像素)或时间序列数据(1D网格的时间点)。CNN在图像识别、视频分析和图像生成等任务中取得了显著的成功。

CNN的主要特点:

  1. 局部感受野:传统的全连接层中,每个神经元都与前一层的所有神经元相连。而在CNN中,每个神经元只与输入数据的一个局部区域相连。这种连接模式模拟了视觉皮层的局部感受野,并使得CNN能够专注于输入数据的局部特征。

  2. 权重共享:在卷积层中,一个特定的滤波器(或卷积核)的权重在整个输入数据上都是共享的。这大大减少了模型的参数数量,使得CNN相对于全连接网络更加高效。

  3. 平移不变性:由于权重共享,CNN具有平移不变性,这意味着无论一个特征在输入数据的哪个位置,CNN都可以检测到它。

  4. 层次结构:CNN通常包含多个卷积层,每个层都可以检测不同的特征。较低的层可能会检测边缘和纹理,而较高的层可能会检测更复杂的特征,如物体的部分或整体。

CNN的主要组件:

  1. 卷积层(Convolutional Layer):这是CNN的核心组件,用于在输入数据上应用一组卷积滤波器,以检测不同的特征。

  2. 激活函数:例如ReLU,用于引入非线性。

  3. 池化层(Pooling Layer):用于降低数据的空间维度,同时保留重要的特征。常见的池化操作包括最大池化和平均池化。

  4. 全连接层(Fully Connected Layer):在CNN的末尾,全连接层用于将特征映射到最终的输出类别。

  5. 归一化层:例如批量归一化,用于稳定和加速训练。

感受野是什么?

感受野(Receptive Field,简称 RF)是神经科学和深度学习中的一个概念,特别是在卷积神经网络(Convolutional Neural Networks, CNN)中。它描述了一个神经元对输入数据的哪一部分做出反应。在深度学习中,感受野主要描述了输出特征图中的一个元素是由输入图像中的哪些像素点影响的。

例子

考虑一个简单的一维输入数据,长度为 7,我们用 xx 表示:

x=[x1,x2,x3,x4,x5,x6,x7]x = [x_1, x_2, x_3, x_4, x_5, x_6, x_7]

现在,我们对这个输入数据进行一维卷积操作,使用一个长度为 3 的卷积核 ww

w=[w1,w2,w3]w = [w_1, w_2, w_3]

当我们将 ww 应用于 xx 时,输出 yy 的第一个元素 y1y_1 是由 xx 的前三个元素决定的:

y1=x1w1+x2w2+x3w3y_1 = x_1 \cdot w_1 + x_2 \cdot w_2 + x_3 \cdot w_3

在这种情况下,我们说 y1y_1 的感受野是 xx 的前三个元素。

在二维图像中,感受野的概念是类似的,但是它涉及到一个区域,而不仅仅是连续的元素。

图形说明

为了更好地说明,我们可以考虑一个 5x5 的二维输入图像和一个 3x3 的卷积核。当我们在图像的左上角应用这个卷积核时,输出特征图的左上角元素是由输入图像的左上角 3x3 区域决定的。这个 3x3 区域就是该输出元素的感受野。

为了进一步说明这一点,我将为您生成一个图形来表示这种关系。

下面是一个图形表示,展示了一个 5x5 的输入图像和一个 3x3 的感受野:

在这个图中,深色的区域表示感受野,它是由3x3的区域组成的。当我们应用一个3x3的卷积核到输入图像的这个区域时,输出特征图的一个元素就是由这个感受野决定的。

随着我们在深度学习模型中加入更多的卷积层,感受野会变得更大,这意味着输出特征图中的一个元素可能会受到输入图像中更大区域的影响。

示例:简单的CNN结构

假设我们要处理的是28x28的灰度图像,一个简单的CNN结构可能如下:

  1. 卷积层:使用32个3x3的滤波器,激活函数为ReLU。
  2. 池化层:2x2的最大池化。
  3. 卷积层:使用64个3x3的滤波器,激活函数为ReLU。
  4. 池化层:2x2的最大池化。
  5. 全连接层:输出为10个类别。

这只是一个简单的示例,实际的CNN结构可能会更复杂,包括更多的层和其他组件。

总的来说,CNN是一种强大的深度学习模型,特别适合于处理图像和其他网格结构的数据。其设计灵感来源于生物视觉系统,特别是视觉皮层的结构和功能。

卷积是什么?

卷积是一种数学运算,广泛应用于信号处理、图像处理和深度学习中。在深度学习和图像处理中,卷积操作通常用于从输入数据(如图像)中提取特征。

数学描述

卷积操作可以在两个函数之间定义。对于两个函数 ffgg,它们的卷积在连续的情况下定义为:

(fg)(t)=f(τ)g(tτ)dτ(f \ast g)(t) = \int_{-\infty}^{\infty} f(\tau) g(t - \tau) d\tau

在离散的情况下,例如在图像处理中,卷积定义为:

(fg)(n)=m=f(m)g(nm)(f \ast g)(n) = \sum_{m=-\infty}^{\infty} f(m) g(n - m)

其中,ff 可以被视为输入信号或图像,而 gg 可以被视为卷积核或滤波器。

图形描述

为了直观地理解卷积,我们可以考虑一个简单的一维信号和一个卷积核。卷积操作可以被视为滤波器 gg 在信号 ff 上滑动,并在每个位置计算它们的点积。

下面是一个简单的一维信号和卷积核的图像,并展示卷积操作的结果。

如下图所示:

卷积表示

从左到右分别是:

  1. 函数 f(x)f(x):一个简单的正弦波。
  2. 函数 g(x)g(x):一个高斯函数,通常用作卷积核或滤波器。
  3. fgf \ast g:函数 ffgg 的卷积结果。

您可以看到,卷积结果是原始信号 ff 的“平滑”版本,这是由于高斯滤波器 gg 的效果。在图像处理中,这种操作可以用来模糊图像或消除噪声。

总的来说,卷积是一种将两个函数结合起来的方法,通常用于从一个函数(如图像或信号)中提取特征或应用某种效果。在深度学习中,卷积神经网络使用卷积操作来从输入数据中提取有用的特征,这些特征随后用于各种任务,如图像分类或物体检测。

平移不变性是什么?

CNN(卷积神经网络)中的平移不变性是指,当输入图像中的某个特征发生位置上的小幅度变化时,卷积神经网络仍然可以有效地识别该特征。这种性质使得CNN在图像识别任务中表现出色,因为它可以在图像的不同位置识别相同的特征。

为了理解平移不变性,我们首先需要了解卷积操作。

卷积操作

卷积操作是通过一个固定大小的滤波器(或称为卷积核)在输入图像上滑动,计算滤波器和图像局部区域的点积来实现的。数学上,卷积操作可以表示为:

(SK)(i,j)=mnS(im,jn)K(m,n)(S \ast K)(i, j) = \sum_{m} \sum_{n} S(i-m, j-n) K(m, n)

其中,SS 是输入图像,KK 是卷积核,(i,j)(i, j) 是输出特征图的位置。

这里的 mmnn 是卷积核 KK 的行和列的索引。这两个索引用于在卷积操作中遍历卷积核的所有元素。

为了更清楚地解释,让我们考虑一个简单的例子:

假设 KK 是一个 3×33 \times 3 的卷积核。那么,mmnn 的取值范围通常是从 -1 到 1。这意味着,当我们在输入图像 SS 上应用卷积核时,对于给定的位置 (i,j)(i, j),我们会考虑 SS 中以 (i,j)(i, j) 为中心的 3×33 \times 3 的邻域,并与卷积核 KK 进行点积运算。

具体来说,对于 KK 中的每一个元素 K(m,n)K(m, n),我们都会找到 SS 中与之对应的元素 S(im,jn)S(i-m, j-n),然后计算它们的乘积。最后,我们将所有这些乘积加起来,得到输出特征图在位置 (i,j)(i, j) 的值。

这就是为什么我们需要两个索引 mmnn:它们用于遍历卷积核的所有元素,并与输入图像的相应元素进行匹配。

平移不变性

假设我们有一个图像中的特征,无论这个特征在图像的哪个位置,只要它的形状和结构与卷积核匹配,卷积操作都会在相应的位置产生一个高响应。这意味着,无论特征在图像中的位置如何移动,只要它的结构不变,CNN都可以检测到它。

例如,考虑一个简单的卷积核,它是一个3x3的矩阵,用于检测垂直边缘。无论这个垂直边缘在图像中的哪个位置,卷积核都可以检测到它,这就是平移不变性的体现。

图形表示

为了更直观地理解,我们可以考虑以下示例:

简单地说,图像经过平移,相应的特征图上的表达也是平移的。下图只是一个为了说明这个问题的例子。输入图像的左下角有一个人脸,经过卷积,人脸的特征(眼睛,鼻子)也位于特征图的左下角。

假如人脸特征在图像的左上角,那么卷积后对应的特征也在特征图的左上角。

在神经网络中,卷积被定义为不同位置的特征检测器,也就意味着,无论目标出现在图像中的哪个位置,它都会检测到同样的这些特征,输出同样的响应。比如人脸被移动到了图像左下角,卷积核直到移动到左下角的位置才会检测到它的特征。

局部性

现在引用上述的第二个原则:局部性。

局部性(Locality)是卷积神经网络(CNN)中的一个核心概念,它指的是卷积操作只关注输入图像的一个小的局部区域,而不是整个图像。这种局部性质使得CNN能够在图像的任何位置检测到局部特征,从而实现平移不变性。

局部性的数学描述

考虑一个卷积核 KK 的大小为 F×FF \times F(例如,F=3F = 3 表示一个3x3的卷积核)。当我们在输入图像 SS 上应用这个卷积核时,对于图像上的任何一个位置 (i,j)(i, j),卷积操作只考虑一个大小为 F×FF \times F 的邻域,这个邻域的中心是 (i,j)(i, j)

数学上,这可以通过以下的卷积操作来表示:

(SK)(i,j)=m=F12F12n=F12F12S(im,jn)K(m,n)(S \ast K)(i, j) = \sum_{m=-\frac{F-1}{2}}^{\frac{F-1}{2}} \sum_{n=-\frac{F-1}{2}}^{\frac{F-1}{2}} S(i-m, j-n) K(m, n)

这里,mmnn 的取值范围确保了我们只考虑输入图像 SS 中的一个大小为 F×FF \times F 的局部区域。

局部性的图形描述

为了更直观地理解局部性,我们可以考虑以下示例:

假设我们有一个大的输入图像,并且我们想要在这个图像上应用一个3x3的卷积核。当我们将卷积核放在图像的一个特定位置时,我们只关注这个位置周围的3x3的邻域,而忽略了图像的其他部分。

如下图所示:

从左到右分别是:

  1. 原始图像。
  2. 使用红色矩形突出显示的图像中的一个3x3的局部区域。
  3. 这个3x3的局部区域的放大视图。

如您所见,当我们在图像上应用一个3x3的卷积核时,我们只关注红色矩形内的局部区域,而忽略了图像的其他部分。这就是卷积操作的局部性质。这种局部性使得CNN能够在图像的任何位置检测到局部特征,而不受特征在图像中的具体位置的影响。

三个通道的表示

图像一般包含三个通道/三种原色(红色、绿色和蓝色)。 实际上,图像不是二维张量,而是一个由高度、宽度和颜色组成的三维张量,比如包含 1024 * 1024 * 3 个像素。 前两个轴与像素的空间位置有关,而第三个轴可以看作每个像素的多维表示。

在实际应用中,图像通常表示为三维张量,其中三个维度分别是高度、宽度和颜色通道(例如,RGB图像有3个通道:红色、绿色和蓝色)。当我们在这样的图像上应用卷积时,我们需要考虑所有的颜色通道。

数学描述

对于一个三维的输入图像 SS 和一个三维的卷积核 KK,卷积操作可以表示为:

(SK)(i,j)=mncS(im,jn,c)K(m,n,c)(S \ast K)(i, j) = \sum_{m} \sum_{n} \sum_{c} S(i-m, j-n, c) K(m, n, c)

其中,iijj 是输出特征图的空间位置,而 cc 是颜色通道的索引。mmnn 遍历卷积核的空间维度,而 cc 遍历所有的颜色通道。

图形描述

考虑一个RGB图像和一个对应的三维卷积核。卷积操作可以被视为卷积核在图像的每个颜色通道上滑动,并在每个位置计算它们的点积。这意味着,对于图像的每个颜色通道,我们都会得到一个输出特征图,然后这些特征图会被叠加起来,形成最终的输出。

下面是一个三维的图像和卷积核,并展示卷积操作的结果。

如下图所示:

从左到右分别是:

  1. 输入图像:一个三维的图像,其中三个维度分别代表高度、宽度和颜色通道。
  2. 卷积核:一个三维的卷积核,用于在输入图像上进行卷积操作。
  3. 卷积输出:卷积操作的结果。这是通过将卷积核在输入图像的每个颜色通道上滑动并计算点积得到的。

您可以看到,卷积操作考虑了输入图像的所有颜色通道,并生成了一个新的三维输出。这种操作允许我们从图像的每个颜色通道中提取特征,并将这些特征结合起来,形成一个更丰富的特征表示。这是卷积神经网络在图像识别任务中表现出色的原因之一。

常见的 CNN 模型

以下是按时间年份排序的一些常见的 CNN 模型及其主要的改进点:

  1. LeNet-5 (1998) - Yann LeCun

    • 主要特点:早期的卷积神经网络,主要用于手写数字识别。
    • 改进:引入了卷积层和池化层的概念,为后续的深度学习模型奠定了基础。
  2. AlexNet (2012) - Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton

    • 主要特点:更深的网络结构,使用ReLU激活函数,以及Dropout技术。
    • 改进:相比LeNet,网络更深,能够处理更复杂的图像任务,首次在ImageNet竞赛中大幅度超越其他模型。
  3. VGG (2014) - Visual Geometry Group, University of Oxford

    • 主要特点:使用重复的结构(均为3x3的卷积和2x2的池化)来构建更深的网络。
    • 改进:通过简化网络结构的设计,使得网络更深,但参数并不多。
  4. GoogLeNet/Inception (2014) - Google

    • 主要特点:引入了Inception模块,使用多尺度的卷积核。
    • 改进:相比VGG,参数更少,但性能更好。通过Inception模块有效地增加了网络的宽度。
  5. ResNet (2015) - Microsoft Research

    • 主要特点:引入残差块(residual block)和跳跃连接(skip connection)。
    • 改进:解决了深度网络中的梯度消失问题,使得网络可以被训练得更深。
  6. DenseNet (2017) - Facebook AI Research

    • 主要特点:每个层都与前面的所有层有直接连接。
    • 改进:进一步增强了特征的传播,减少了梯度消失的问题,参数更少。
  7. MobileNet (2017) - Google

    • 主要特点:使用深度可分离的卷积来减少计算量。
    • 改进:为移动和嵌入式设备优化,使得模型更小,计算量更少,但仍保持良好的性能。

这些模型在其发布时都代表了当时的最先进技术,并在各自的领域中取得了显著的成果。每个模型都在前一个模型的基础上进行了改进,解决了某些特定的问题,或者优化了性能。

References