机器学习入门
序
此文章为机器学习入门的学习内容
1、监督机器学习
在大多数监督学习应用中,最终目标是开发一个微调的预测函数 h(x)(有时称为“假设”)。“学习”包括使用复杂的数学算法来优化这个函数,这样,给定某个领域的输入数据 x(例如,房屋的平方英尺),它将准确地预测一些有趣的值 h(x)(例如,市场价格对于所说的房子)。
实际上,x 几乎总是代表多个数据点。因此,例如,房价预测器可能不仅会考虑建筑面积 (x1),还会考虑卧室数量 (x2)、浴室数量 (x3)、楼层数 (x4)、建造年份 (x5)、邮政编码 ( x6), 等等。确定要使用的输入是 ML 设计的重要部分。然而,为了便于解释,假设单个输入值是最简单的。
假设我们的简单预测器具有以下形式:
其中和
是常数。我们的目标是找到 的完美值
并使
我们的预测器尽可能好地工作。
优化预测器h(x)
是使用训练示例完成的。对于每个训练示例,我们都有一个输入值x_train
,其对应的输出y
是事先已知的。y
对于每个示例,我们发现已知的正确值和我们的预测值之间的差异h(x_train)
。通过足够的训练示例,这些差异为我们提供了一种有用的方法来衡量h(x)
. 然后,我们可以h(x)
通过调整 和 的值来调整,使其
“错误更少”。重复此过程,直到系统收敛于 和 的最佳[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3KWUUpLI-1671942319070)(https://uploads.toptal.io/blog/image/445/toptal-blog-image-1407508999266.png)]值
。通过这种方式,预测器得到训练,并准备好进行一些真实世界的预测。
有了这个理解,让我们给我们的机器我们上面给出的数据并让它学习。首先,我们必须h(x)
用一些合理的和值来初始化我们的预测器
。现在,当放置在我们的训练集上时,我们的预测器看起来像这样:
如果我们向这个预测变量询问年薪 60,000 美元的员工的满意度,它将预测评分为 27:
很明显,这是一个糟糕的猜测,而且这台机器知道的不多。
现在让我们为这个预测器提供我们训练集中的所有薪水,并注意由此产生的预测满意度评级与相应员工的实际满意度评级之间的差异。如果我们执行一点数学魔法(我将在本文后面描述),我们可以非常确定地计算出 13.12和 0.61 的值将为
我们提供更好的预测器。
如果我们重复这个过程,比如 1,500 次,我们的预测器最终将如下所示:
此时,如果我们重复这个过程,我们会发现和
不再有任何可观的变化,因此我们看到系统已经收敛了。如果我们没有犯任何错误,这意味着我们已经找到了最佳预测变量。因此,如果我们现在再次向机器询问年薪 60,000 美元的员工的满意度,它会预测评分约为 60。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4mP0KpF-1671942319075)(https://bs-uploads.toptal.io/blackfish-uploads/public-files/machine-learning-tutorial-bb894b633f22bf5bc0946652a1acd9bf.webp)]
1.1 回归:关于复杂性的说明
上面的例子在技术上是一个简单的单变量线性回归问题,实际上可以通过推导一个简单的正规方程并完全跳过这个“调整”过程来解决。但是,请考虑如下所示的预测器:
此函数接受四个维度的输入,并具有各种多项式项。推导此函数的正规方程是一项重大挑战。许多现代机器学习问题需要数千甚至数百万维的数据来使用数百个系数来构建预测。预测生物体的基因组将如何表达或 50 年后的气候会是什么样子都是此类复杂问题的例子。
许多现代 ML 问题需要数千甚至数百万维的数据来使用数百个系数来构建预测。
幸运的是,面对这种复杂性,ML 系统采用的迭代方法更具弹性。机器学习系统不是使用蛮力,而是“感觉”到答案的方式。对于大问题,这种方法效果更好。虽然这并不意味着 ML 可以解决所有任意复杂的问题——它不能——但它确实是一个非常灵活和强大的工具。
1.2 梯度下降:最小化“错误”
在上面的例子中,我们如何确保每一步都变得更好,而
不是更糟?答案在于我们的“错误测量”以及一点微积分。(这就是前面提到的“数学魔法”。)
错误度量被称为成本函数(又名损失函数)。输入
代表我们在预测器中使用的所有系数。在我们的例子中,
确实是对
和
。
为我们提供了预测器错误性的数学度量,即它使用
和
的给定值时。
成本函数的选择是 ML 程序的另一个重要部分。在不同的情况下,“错误”可能意味着非常不同的事情。在我们的员工满意度示例中,公认的标准是线性最小二乘函数:
使用最小二乘法,错误猜测的惩罚随着猜测与正确答案之间的差异呈二次方上升,因此它是一种非常“严格”的错误衡量标准。成本函数计算所有训练示例的平均惩罚。
现在我们看到我们的目标是为我们的预测器h(x)
找到和
并且使我们的成本函数
尽可能小。我们呼吁微积分的力量来实现这一目标。
本质上我们所做的是采用的梯度,它是
(one over
and one over
) 的一对导数。
对于 和
的每个不同值,梯度都会不同,并且定义了“山坡的坡度”,特别是,对于这些特定
的 s,“哪条路是向下的”。例如,当我们将 的当前值代入
梯度时,它可能会告诉我们,我们加一点
,减一点
,瞧!我们已经完成了一轮学习算法。我们更新的预测器 h(x) =
+
x 将返回比以前更好的预测。我们的机器现在更智能了。这种在计算当前梯度和根据结果更新 s 之间交替进行的过程
称为梯度下降。
1.3 机器学习中的分类问题
在有监督的 ML 下,两个主要的子类别是:
- 回归机器学习系统——预测值落在连续光谱中某处的系统。这些系统帮助我们解决“多少?”的问题。或“多少?”
- 分类机器学习系统——我们寻求是或否预测的系统,例如“这个肿瘤是癌性的吗?”、“这个饼干符合我们的质量标准吗?”等等。
事实证明,底层的机器学习理论或多或少是相同的。主要区别在于预测器h(x)
的设计和成本函数的设计。
到目前为止,我们的示例都集中在回归问题上,所以现在让我们看一下分类示例。
以下是曲奇质量测试研究的结果,其中训练示例都被标记为y = 1
蓝色的“好曲奇”( ) 或红色的“坏曲奇”( y = 0
)。
在分类中,回归预测器不是很有用。我们通常需要的是一个预测值介于 0 和 1 之间的预测器。在曲奇质量分类器中,预测值为 1 表示非常自信地猜测曲奇是完美的,令人垂涎三尺。预测为 0 表示该曲奇对曲奇行业来说是一个尴尬的高度置信度。落在这个范围内的值表示信心较低,因此我们可能会设计我们的系统,使得 0.6 的预测意味着“伙计,这是一个艰难的决定,但我会同意,是的,你可以卖掉那块饼干,”而一个值正好在中间,0.5,可能代表完全的不确定性。这并不总是如何在分类器中分布置信度,但这是一种非常常见的设计,并且可以用于我们的说明目的。
事实证明,有一个很好的函数可以很好地捕捉到这种行为。它称为sigmoid 函数, g(z)
,它看起来像这样:
z
是我们输入和系数的某种表示,例如:
这样我们的预测器就变成了:
请注意,sigmoid 函数将我们的输出转换为 0 到 1 之间的范围。
成本函数设计背后的逻辑在分类上也是不同的。我们再次问“猜测错误意味着什么?” 这次有一个很好的经验法则,如果正确猜测是 0 而我们猜测是 1,那么我们就完全错了——反之亦然。由于您的错误不会比完全错误的多,因此在这种情况下的惩罚是巨大的。或者,如果正确猜测为 0 而我们猜测为 0,则每次发生这种情况时,我们的成本函数不应增加任何成本。如果猜测是正确的,但我们不是完全有信心(例如,,y = 1
但是h(x) = 0.8
),这应该有一个小成本,如果我们的猜测是错误的,但我们不是完全有信心(例如,y = 1
但是h(x) = 0.3
),这应该来付出了一些巨大的代价,但没有我们完全错了那么多。
此行为由日志功能捕获,例如:
同样,成本函数为我们提供了所有训练示例的平均成本。即成本函数
是所有训练样本损失 cost 的平均。
所以这里我们已经描述了预测变量h(x)
和成本函数在回归和分类之间有何不同,但梯度下降仍然可以正常工作。
2、无监督机器学习
无监督机器学习通常负责寻找数据中的关系。此过程中没有使用训练示例。相反,系统会获得一组数据,并负责寻找其中的模式和相关性。一个很好的例子是在社交网络数据中识别关系密切的朋友群体。
用于执行此操作的机器学习算法与用于监督学习的算法非常不同,该主题值得一提。然而,在此期间,如果要细细品味,可以看看k-means等聚类算法,以及主成分分析等降维系统。您还可以阅读我们关于半监督图像分类的文章。
3、神经网络
3.1 感知器:早期的深度学习算法
最早的监督训练算法之一是感知器,它是一种基本的神经网络构建块。
假设我们在平面上有n个点,标记为“0”和“1”。我们得到了一个新点,我们想猜测它的标签(这类似于上面的“狗”和“不是狗”场景)。我们该怎么做呢?
一种方法可能是查看最近的邻居并返回该点的标签。但一种稍微更智能的方法是选择一条能最好地分隔标记数据的线并将其用作分类器。
在这种情况下,每条输入数据都将表示为向量x = ( x_1, x_2 ) 并且我们的函数将类似于“如果在线下方为 ‘0’,如果在线上方为 ‘1’”。
为了在数学上表示这一点,让我们的分隔符由权重向量w和垂直偏移量(或偏差)b定义。然后,我们的函数会将输入和权重与加权和传递函数结合起来:
然后将此传递函数的结果输入激活函数以生成标签。在上面的例子中,我们的激活函数是一个阈值截止值(例如,如果大于某个值则为 1):
3.1.1 训练感知器
感知器的训练包括为其提供多个训练样本并计算每个训练样本的输出。在每个样本之后,调整权重w以最小化输出误差,定义为**期望(目标)和实际输出之间的差异。还有其他误差函数,如均方误差,但训练的基本原理保持不变。
3.1.2 单感知器的缺点
深度学习的单一感知器方法有一个主要缺点:它只能学习线性可分函数。这个缺点有多大?以相对简单的函数 XOR 为例,注意它不能用线性分隔符分类(注意下面失败的尝试):
为了解决这个问题,我们需要使用多层感知器,也称为前馈神经网络:实际上,我们将把这些感知器组合在一起,以创建更强大的学习机制。
3.2 用于深度学习的前馈神经网络
神经网络实际上只是感知器的组合,以不同的方式连接并在不同的激活函数上运行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dTd7SV2w-1671942319084)(https://uploads.toptal.io/blog/image/333/toptal-blog-image-1395721488746.png)]
对于初学者,我们将看看前馈神经网络,它具有以下属性:
- 输入、输出和一个或多个隐藏层。上图显示了一个具有 3 个单元输入层、4 个单元隐藏层和一个具有 2 个单元的输出层的网络(术语单元和神经元可以互换)。
- 每个单元都是一个单独的感知器,就像上面描述的那样。
- 输入层的单元作为隐藏层单元的输入,而隐藏层单元作为输出层的输入。
- 两个神经元之间的每个连接都有一个权重w(类似于感知器权重)。
- 第 t 层的每个单元通常连接到前一层 t - 1 的每个单元(尽管您可以通过将它们的权重设置为 0 来断开它们)。
- 为了处理输入数据,您将输入向量“钳制”到输入层,将向量的值设置为每个输入单元的“输出”。在这种特殊情况下,网络可以处理 3 维输入向量(因为有 3 个输入单元)。例如,如果您的输入向量是 [7, 1, 2],那么您可以将顶部输入单元的输出设置为 7,中间单元设置为 1,依此类推。然后使用每个隐藏单元的加权和传递函数(因此称为前向传播)将这些值向前传播到隐藏单元,然后计算它们的输出(激活函数),输出的类型是4维向量(因为下一层有4个输入单元)。例如,[5, 2, 1, 0]。
- 输出层以与隐藏层相同的方式计算它的输出。输出层的结果就是网络的输出。
3.2.1 非线性激活函数
一堆线性函数的线性组合仍然只是一个线性函数,因此大多数神经网络使用非线性激活函数。
正因为如此,大多数神经网络都使用非线性激活函数,如logistic、tanh、binary或rectifier。没有它们,网络只能学习其输入的线性组合函数。
3.2.2 反向传播
用于多层感知器监督训练的最常见深度学习算法称为反向传播。基本程序:
-
提供训练样本并通过网络向前传播。
-
计算输出误差,通常是均方误差:
其中t是目标值,y是实际的网络输出。其他误差计算也是可以接受的,但 MSE 是一个不错的选择。
-
使用称为随机梯度下降的方法将网络误差最小化。
梯度下降是通用的,但在神经网络的情况下,这将是训练误差随输入参数变化的图表。每个权重的最佳值是误差达到全局最小值的值。在训练阶段,权重以小步骤更新(在每个训练样本或几个样本的小批量之后),这样它们总是试图达到全局最小值——但这不是一件容易的事,因为你经常以局部最小值结束,就像右边的那个。例如,如果权重值为 0.6,则需要将其更改为 0.4。
该图代表最简单的情况,其中误差取决于单个参数。然而,网络误差取决于每个网络权重,误差函数要复杂得多。
值得庆幸的是,反向传播提供了一种根据输出误差更新两个神经元之间每个权重的方法。推导本身相当复杂,但是给定节点的权重更新具有以下(简单)形式:
其中E是输出误差,w_i是输入i到神经元的权重。
本质上,目标是相对于权重i沿梯度方向移动。当然,关键术语是误差的导数,它并不总是很容易计算:对于大型网络中间的随机隐藏节点的随机权重,您如何找到这个导数?
答案:通过反向传播。错误首先在公式非常简单的输出单元计算(基于目标值和预测值之间的差异),然后以一种巧妙的方式通过网络传播回来,使我们能够在训练期间有效地更新我们的权重和(希望)达到最低限度。
3.2.3 隐藏层
隐藏层特别令人感兴趣。通过万能逼近定理,可以训练具有有限数量神经元的单个隐藏层网络来逼近任意随机函数。换句话说,单个隐藏层足以学习任何功能。也就是说,我们通常在使用多个隐藏层(即更深的网络)的实践中学得更好。
隐藏层是网络存储训练数据的内部抽象表示的地方。
隐藏层是网络存储训练数据的内部抽象表示的地方,类似于人脑(大大简化的类比)具有真实世界的内部表示的方式。在本教程中,我们将继续探讨使用隐藏层的不同方法。
一个神经网络可以有多个隐藏层:在这种情况下,更高层在前一层之上“构建”新的抽象。正如我们之前提到的,您通常可以通过更大的网络在实践中更好地学习。
然而,增加隐藏层的数量会导致两个已知问题:
- 梯度消失:随着我们添加越来越多的隐藏层,反向传播在将信息传递到较低层时变得越来越无用。实际上,随着信息被传回,梯度开始消失并且相对于网络的权重变小。
- 过度拟合:也许是机器学习中的核心问题。简而言之,过度拟合描述了过于紧密地拟合训练数据的现象,可能是假设过于复杂。在这种情况下,您的学习器最终会很好地拟合训练数据,但在实际示例中的表现会差很多。
让我们看看一些深度学习算法来解决这些问题。
3.3 自编码器
自动编码器通常是前馈神经网络,旨在学习数据集的压缩分布式表示(编码)。
从概念上讲,网络被训练来“重新创建”输入,即输入和目标数据是相同的。换句话说:您正在尝试输出与输入相同的内容,但以某种方式进行了压缩。这是一个令人困惑的方法,所以让我们看一个例子。
压缩输入:灰度图像
假设训练数据由 28x28 灰度图像组成,每个像素的值被限制在一个输入层神经元(即输入层将有 784 个神经元)。然后,输出层将具有与输入层相同数量的单元 (784),并且每个输出单元的目标值将是图像一个像素的灰度值。
这种架构背后的直觉是,网络不会学习训练数据与其标签之间的“映射”,而是学习数据本身的内部结构和特征。(因此,隐藏层也称为特征检测器。)通常,隐藏单元的数量小于输入/输出层,这迫使网络只学习最重要的特征并实现降维。
我们希望中间的一些小节点在概念层面上学习数据,从而产生紧凑的表示。
实际上,我们希望中间的一些小节点真正在概念层面上学习数据,产生一个紧凑的表示,以某种方式捕获我们输入的核心特征。
流感病
为了进一步演示自动编码器,让我们再看一个应用程序。
在这种情况下,我们将使用一个包含流感症状的简单数据集(该想法来自这篇博文)。
以下是数据集的分解方式:
- 有六个二进制输入特征。
- 前三个是疾病的症状。比如1 0 0 0 0 0表示这个病人发烧,而0 1 0 0 0 0表示咳嗽,1 1 0 0 0 0表示咳嗽和发烧等。
- 最后三个特征是“反”症状;当患者有其中之一时,他或她生病的可能性就会降低。例如,0 0 0 1 0 0表示该患者接种了流感疫苗。可以组合两组特征:0 1 0 1 0 0表示接种疫苗的患者咳嗽,等等。
如果患者具有前三个特征中的至少两个,我们将认为他或她生病了;如果他或她具有后三个特征中的至少两个,我们将认为他或她是健康的(关系断开有利于健康患者),例如:
- 111000、101000、110000、011000、011100 = 生病
- 000111、001110、000101、000011、000110 = 健康
我们将训练一个具有六个输入和六个输出单元但只有两个隐藏单元的自动编码器(使用反向传播) 。
经过数百次迭代后,我们观察到当每个“生病”样本被呈现给机器学习网络时,两个隐藏单元之一(每个“生病”样本的相同单元)总是表现出比其他。相反,当呈现“健康”样本时,另一个隐藏单元具有更高的激活。
本质上,我们的两个隐藏单元已经学习了流感症状数据集的紧凑表示。为了了解这与学习有何关系,我们回到过度拟合的问题。通过训练我们的网络来学习数据的紧凑表示,我们更喜欢更简单的表示,而不是过度拟合训练数据的高度复杂的假设。
在某种程度上,通过支持这些更简单的表示,我们正试图在更真实的意义上学习数据。
3.4 受限玻尔兹曼机
受限玻尔兹曼机(RBM),这是一种生成随机神经网络,可以在其输入集上学习概率分布。
RBM 由隐藏层、可见层和偏置层组成。与前馈网络不同,可见层和隐藏层之间的连接是无向的(值可以在可见到隐藏和隐藏到可见的方向上传播)并且是完全连接的(给定层的每个单元连接到下一个单元中的每个单元——如果我们允许任何层中的任何单元连接到任何其他层,那么我们将拥有玻尔兹曼(而不是受限玻尔兹曼)机)。
标准的 RBM 具有二进制隐藏和可见单元:即在伯努利分布下单元激活为 0 或 1 ,但也有其他非线性的变体。
虽然研究人员了解 RBM 已有一段时间了,但最近引入的对比发散无监督训练算法重新引起了人们的兴趣。
对比发散
单步对比发散算法 (CD-1) 的工作原理如下:
-
正相:
- 输入样本 v 被钳位到输入层。
- v 以类似于前馈网络的方式传播到隐藏层。隐藏层激活的结果是 h 。
-
负相:
- 将 h 传播回可见层,结果为 v’(可见层和隐藏层之间的连接是无向的,允许在两个方向上移动)。
- 使用激活结果 h’ 将新的 v’ 传播回隐藏层。
-
权重更新:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksoRRZ7F-1671942319085)(https://uploads.toptal.io/blog/image/350/toptal-blog-image-1395939562020.58.50_PM.png)]
其中a是学习率,v、v’、h、h’ 和 w 是向量。
该算法背后的直觉是正相( h 给定 v )反映了网络对真实世界数据的内部表示。同时,负阶段表示尝试根据此内部表示(给定 h 的 v’)重新创建数据。主要目标是使生成的数据尽可能接近现实世界,这反映在权重更新公式中。
换句话说,网络对如何表示输入数据有一些感知,因此它会尝试根据这种感知来再现数据。如果它的再现不够接近现实,它会进行调整并重试。
4、深度网络
我们现在已经证明了自动编码器和 RBM 的隐藏层可以作为有效的特征检测器;但我们很少能直接使用这些功能。事实上,上面的数据集与其说是规则,不如说是例外。相反,我们需要找到一些方法来间接使用这些检测到的特征。
幸运的是,人们发现这些结构可以堆叠起来形成深度网络。这些网络可以贪婪地训练,一次一层,以帮助克服与经典反向传播相关的梯度消失和过度拟合问题。
由此产生的结构通常非常强大,产生令人印象深刻的结果。以谷歌著名的“猫”论文为例,他们使用特殊类型的深度自动编码器来“学习”基于未标记数据的人脸和猫脸检测。
让我们仔细看看。
4.1 堆叠自编码器 SAE
顾名思义,该网络由多个堆叠的自动编码器组成。
自动编码器 t 的隐藏层充当自动编码器 t + 1的输入层。第一个自动编码器的输入层是整个网络的输入层。贪婪的逐层训练过程是这样的:
- 使用反向传播方法和所有可用的训练数据单独训练第一个自动编码器(t=1,或上图中的红色连接,但有一个额外的输出层)。
- 训练第二个自动编码器t=2(绿色连接)。由于 t=2 的输入层是t=1的隐藏层,我们不再对t=1的输出层感兴趣,我们将其从网络中移除。训练首先将输入样本钳位到t=1的输入层,然后向前传播到t=2的输出层。接下来,使用反向传播更新t=2的权重(输入隐藏和隐藏输出)。t=2使用所有训练样本,类似于t=1。
- 对所有层重复前面的过程(即,删除前面自动编码器的输出层,用另一个自动编码器替换它,并使用反向传播进行训练)。
- 步骤 1-3 称为预训练,并使权重正确初始化。但是,输入数据和输出标签之间没有映射。例如,如果网络被训练来识别手写数字的图像,它仍然不可能将来自最后一个特征检测器(即最后一个自动编码器的隐藏层)的单元映射到图像的数字类型。在这种情况下,最常见的解决方案是将一个或多个全连接层添加到最后一层(蓝色连接)。整个网络现在可以看作是一个多层感知器,并使用反向传播进行训练(这一步也称为微调)。
那么,堆叠式自动编码器就是提供一种有效的预训练方法来初始化网络的权重,从而为您提供一个复杂的多层感知器,可以进行训练(或微调)。
简单地说,就是多个自编码器的叠加,只不过每个自编码器的输出层抛弃掉,被下一个自编码器代替,但是每次都是在叠加前的每个自编码器进行训练,调整隐藏层的参数。这个过程就好像在依次的学习低维的特征,我们不需要标签结果,只需要输出层能够从隐藏层的低维特征恢复输入层的原始数据。为什么不一次的全部训练,是因为这样可以避免隐藏层层数过多导致的梯度消失的问题(个人理解)。
4.2 深度信念网络 DBN
与自动编码器一样,我们也可以堆叠玻尔兹曼机来创建一个称为*深度信念网络 (DBN)*的类。
在这种情况下,RBM t 的隐藏层充当 RBM t+1 的可见层。第一个 RBM 的输入层是整个网络的输入层,greedy layer-wise pre-training 的工作原理是这样的:
- 使用所有训练样本的对比散度训练第一个 RBM t=1 。
- 训练第二个 RBM t=2。由于 t=2 的可见层是 t=1 的隐藏层,训练开始时将输入样本钳位到t=1*的可见层,然后向前传播到 t=1的隐藏层。然后,该数据用于启动 t=2 的对比发散训练。
- 对所有层重复前面的过程。
- 与堆叠自动编码器类似,在预训练之后,可以通过将一个或多个完全连接的层连接到最终的 RBM 隐藏层来扩展网络。这形成了一个多层感知器,然后可以使用反向传播对其进行微调。
这个过程类似于堆叠自动编码器的过程,但是自动编码器被 RBM 取代,反向传播被对比发散算法取代。
4.3 卷积神经网络 CNN
作为最终的深度学习架构,让我们来看看卷积网络,这是一类特别有趣和特殊的前馈网络,非常适合图像识别。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQHz0PYG-1671942319086)(C:\Users\10555\AppData\Roaming\Typora\typora-user-images\image-20221224155024841.png)]
在我们查看卷积网络的实际结构之前,我们首先定义一个图像过滤器,或者一个具有相关权重的正方形区域。滤镜应用于整个输入图像,您通常会应用多个滤镜。例如,您可以对给定的输入图像应用四个 6x6 过滤器。然后,坐标为 1,1 的输出像素是左上角为 1,1 的 6x6 正方形输入像素与滤波器权重(也是 6x6 正方形)的加权和。输出像素 2,1 是左上角 2,1 等输入方块的结果。
综上所述,这些网络由以下属性定义:
- 卷积层对输入应用多个过滤器。例如,图像的第一个卷积层可能有四个 6x6 滤波器。在图像上应用一个过滤器的结果称为特征图(FM),特征图的数量等于过滤器的数量。如果前一层也是卷积层,则过滤器将应用于所有具有不同权重的 FM,因此每个输入 FM 都连接到每个输出 FM。图像共享权重背后的直觉是,无论其位置如何,都会检测到特征,而过滤器的多样性允许它们中的每一个检测不同的特征集。
- 子采样层减少了输入的大小。例如,如果输入由 32x32 的图像组成,并且该层的子采样区域为 2x2,则输出值将为 16x16 图像,这意味着输入图像的 4 个像素(每个 2x2 正方形)组合成一个输出像素。子采样有多种方法,但最流行的是最大池化、平均池化和随机池化。
- 最后一个子采样(或卷积)层通常连接到一个或多个全连接层,最后一个表示目标数据。
- 训练是使用修改后的反向传播进行的,该反向传播将子采样层考虑在内,并根据应用该过滤器的所有值更新卷积过滤器的权重。