前言
本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。
代码及工具箱
本专栏的代码和工具函数已经上传到GitHub:1571859588/xiaobai_AI: 零基础入门人工智能 (github.com),可以找到对应课程的代码
正文
卷积层在神经网络中的应用
在上节课中,我们学到了卷积操作的基本概念。现在,让我们看看如何将卷积运算应用到神经网络中。
假设我们有一个8×8像素的灰度图像,我们用一个3×3的卷积核对其进行卷积处理,得到一个6×6的结果。执行这个卷积运算的层叫做卷积层。处理完卷积后,我们可以将得到的结果转换成一个数组,然后送入后面的全连接层进行进一步处理。
你可能会好奇卷积核中的数值是如何确定的。实际上,这些值在开始时是随机初始化的,就像神经网络中的其他权重一样。通过训练过程,这些卷积核的值会学习调整,以更好地捕捉图像中的特征,比如垂直边缘、水平边缘或其他模式。
简而言之,卷积层通过其卷积核学习到的值,能够自动提取图像的特征,并为后续的全连接层提供更有意义的输入数据。这个过程使得神经网络能够更有效地理解和分类图像内容。
通过训练,我们可以找到合适的卷积核来提取图像中的不同特征。那么,卷积层中的参数是如何学习的呢?答案和全连接层的神经元一样,是通过反向传播和梯度下降来学习的。
卷积层和其他层一样,通过反向传播过程,我们可以将误差从最后一层逐步传回到前面的层。假设我们的原始图像是4×4的大小,使用一个3×3的卷积核进行卷积,得到一个2×2的矩阵。然后,这个结果被送入全连接层,假设全连接层只有两个神经元,最终通过输出层(对于MNIST数据集,输出层有10个神经元,对应10个分类)得到预测结果。这是前向传播的过程。
在反向传播过程中,我们首先计算代价函数,然后使用链式法则将误差传回到全连接层的权重和偏置参数上。那么,如何将误差传回到卷积层呢?
虽然卷积层的操作看起来和全连接层不同,但实际上我们可以将其类比为普通神经元的操作。卷积过程涉及卷积核与图像中的小区域(比如3×3的区域)对应元素相乘后求和,这与普通神经元的加权求和过程非常相似。
因此,尽管卷积层在前向传播时处理数据的方式不同,但在反向传播时,我们仍然可以应用类似全连接层的方法来更新卷积层的参数。这样,卷积层就可以通过训练学习到最佳的卷积核,以有效地提取图像特征。
卷积层可以看作是多个普通神经元的组合,每个神经元都处理图像的一部分,并通过线性运算和激活函数得到输出。
举个例子:
想象一个3x3的图像作为输入,卷积核也是一个3x3的矩阵。我们将卷积核滑动到图像上,每次覆盖一个3x3的区域,并计算这个区域中所有像素点与卷积核对应元素相乘再相加的结果,再加上一个偏置项b。这个过程就相当于一个普通神经元的线性运算。
重复这个过程:
我们将卷积核在图像上滑动多次,每次都得到一个新的结果,这些结果分别对应不同的神经元。最终,我们将所有神经元的输出组合起来,并通过激活函数进行非线性变换,得到卷积层的最终输出。
卷积层就像一个特殊的“积木”,它由多个小积木(神经元)组成,每个小积木都处理图像的一部分,并提取其中的特定特征,例如边缘或纹理。
这些小积木的特别之处在于,它们使用相同的“图纸”(权重参数)来建造,这意味着它们提取特征的方式是一样的。无论图像中的特征出现在哪个位置,它们都会用同样的方法去识别。这就是所谓的“参数共享”,它使得卷积层能够用更少的积木建造出复杂的结构,就像乐高积木一样。
相比于普通的神经元,卷积层中的小积木的输出是二维的,而不是一维的。当需要将卷积层的输出送到其他层时,需要将这个二维的输出“压扁”成一维的向量。
卷积层之所以能够通过参数共享提取特征,是因为图像具有平移不变性。这意味着图像中的特定特征,例如垂直边缘,在不同的位置具有相同的表达方式。因此,一个卷积核可以提取图像中的所有垂直边缘,而不需要为每个位置单独设计一个卷积核。
卷积层通过多个卷积核提取图像的不同特征,例如边缘、纹理等。每个卷积核都对应一个神经元,其输出是图像中特定特征的响应。卷积层的最终输出是所有神经元输出的组合。
卷积层是卷积神经网络的核心组件,它能够有效地提取图像特征,并降低模型参数数量,从而降低训练难度和计算量。