深度学习是人工智能的一种实现方法。本章我们将考察作为深度学习的代表的卷积神经网络的数学结构。
5-1小恶魔来讲解卷积神经网络的结构
深度学习是重叠了很多层的隐藏层(中间层)的神经网络。这样的神经网络使隐藏层具有一定的结构,从而更加有效地进行学习。本节我们就来考察一下近年来备受关注的卷积神经网络的设计思想。
使网络具有结构
卷积神经网络是当下正流行的话题,尚且难以总结一般理论。这里,我们利用一个最简单的例题来考察一下卷积神经网络的思想。如下所示,这个例题是由前面考察过的例题整理而成的,它虽然简单,但是能够很好地帮助我们理解卷积神经网络的结构。
例题建立一个卷积神经网络,用来识别通过6×6像素的图像读取的手写数字1、2、3。图像的像素为单色二值。 |
首先,我们来介绍一下作为这个例题的解答的卷积神经网络的示例,如下页的图所示。
图中用圆圈将变量名圈起来的就是神经单元,从这个图中我们可以了解到卷积神经网络的特点。隐藏层由多个具有结构的层组成。具体来说,隐藏层是多个由卷积层和池化层构成的层组成的。它不仅“深”,而且含有内置的结构。
注:卷积层的英文是convolution layer。这里展示的是最原始的卷积神经网络,实际的网络更为复杂。
思路
人们是如何想到这样的结构的呢?如果我们了解了卷积神经网络的思路,就可以在各种领域中进行应用。这里我们也同样请第1章登场的“恶魔”来讲解。
在1-5节考察过的神经网络中,住在隐藏层的恶魔具有各自偏好的模式。恶魔对自己偏好的模式做出反应,输出层接收这些信息,从而使神经网络进行模式识别成为可能。
本节登场的恶魔与之前的恶魔性格稍微有点不同。虽然他们的共同点都是具有自己偏好的模式,但是相比第3章登场的恶魔坐着一动不动,这里的恶魔是活跃的,他们会积极地从图像中找出偏好的模式,我们称之为小恶魔。
为了让这些小恶魔能够活动,我们为其提供工作场所,那就是由卷积层与池化层构成的隐藏子层。我们为每个小恶魔准备一个隐藏子层作为工作场所。
提供能让小恶魔活动的工作场所(外侧的框)。这个隐 藏子层的编号为 1。
活跃的小恶魔积极地扫描图像,检查图像中是否含有自己偏好的模式。如果图像中含有较多偏好的模式,小恶魔就很兴奋,反之就不兴奋。此外,由于偏好的模式的大小比整个图像小,所以兴奋度被记录在多个神经单元中。
小恶魔扫描图像数据,根据检测到的偏好模式的多少而产生兴奋,其兴奋度会被记录在卷积层的神经单元中。神经单元名中F1的F为Filter的首字母,1为隐藏子层的编号。
注:一般用于扫描的过滤器的大小是5×5。这里为了使结果变简单,我们使用如图所示的3×3的大小。
活跃的小恶魔进一步整理自己的兴奋度,将兴奋度集中起来,整理后的兴奋度形成了池化层。
池化层的建立。小恶魔将扫描结果的兴奋度(等)进一步集中起来,整理为池化层的神经单元。池化层中浓缩了小恶魔所偏好的模式的信息。神经单元名中P1的P为Pooling的首字母,1为隐藏子层的编号。
因此,池化层的神经单元中浓缩了作为考察对象的图像中包含了多少小恶魔所偏好的模式这一信息。
1-5节介绍的恶魔每人有一个偏好模式,本节的小恶魔每人也只有一个偏好模式。因此,要识别数字1、2、3,就需要让多个小恶魔登场。这里我们比较随意地假定有3个小恶魔。输出层将这3个小恶魔的报告组合起来,得出整个神经网络的判定结果。
与第1章相同,输出层里也住着3个输出恶魔,这是为了对手写数字1、2、3分别产生较大反应。
输出层将3个小恶魔的报告进行汇总。为了分别对手写数字1、2、3产生较大反应,需要3个输出恶魔。
以上就是利用小恶魔来解答例题的方法。卷积神经网络就是按照这一思路建立神经网络的卷积层和池化层的。
如前所述,第1章登场的隐藏层的恶魔是静态的,他们只是观察数据然后做出反应。而本章的小恶魔是动态的,他们会积极地扫描图像,整理兴奋度并向上一层报告。由于这些小恶魔的性格特点,卷积神经网络产生了我们前面学习过的简单神经网络所没有的优点。
①对于复杂的模式识别问题,也可以用简洁的网络来处理。
②整体而言,因为神经单元的数量少了,所以计算比较轻松。
而卷积神经网络之所以在各种领域备受瞩目,也是得益于这样的性质。
此外,目前为止我们的讨论都是假定小恶魔住在神经网络的隐藏层。
和所有的科学理论一样,模型是否正确,取决于用它做出的预测是否能够很好地解释现实情况。众所周知,现在卷积神经网络已经有了一些显著的成果,例如能够识别出YouTube上的猫的图像等。
那么,神经网络是如何实现这里考察的小恶魔的活动的呢?我们将在下一节考察数学上的实现方法。
小恶魔的人数
在前面的说明中,登场的小恶魔一共有3人。这里的人数不是预先确定的。如果我们预估用5个模式能够区分图像,那么就需要有5个小恶魔。这样一来,我们就应当准备好5个由卷积层和池化层形成的隐藏子层。
如果图像变得复杂,卷积层和池化层形成的隐藏子层的数目也相应地增加。对于需要多少个隐藏子层等问题,往往需要进行反复试错来确定。
而且,在识别猫的图像的情况下,隐藏层的结构本身也需要变得更复杂。这就是深度学习的设计人员可以大展身手的地方。
5-2将小恶魔的工作翻译为卷积神经网络的语言
我们在5-1节考察了卷积神经网络的思路。通过设想能够寻找偏好模式的活跃的小恶魔,从而理解了卷积神经网络的设计思想。本节我们来看看如何将小恶魔的工作替换为数学计算。这里考察的例题与上一节相同。
例题建立一个神经网络,用来识别通过6×6像素的图像读取的手写数字1、2、3。图像像素为单色二值。 |
从数学角度来考察小恶魔的工作
下面我们从数学角度来考察5-1节的小恶魔的工作。首先我们请小恶魔S登场。假定这个小恶魔S喜欢如下的模式S。
注:模式的大小通常为5×5。这里为了使结果变简单,我们使用图中所示的小的3×3模式。
假设下面的图像“2”就是要考察的图像。我们将手写数字2作为它的正解。
图像“2”。从数学角度考察小恶魔处理这个图像的过程。
小恶魔S首先将偏好的模式S作为过滤器对图像进行扫描。我们将这个过滤器命名为过滤器S。接下来,我们实际用过滤器S扫描整个图像“2”。
各个图像下面的“相似度”表示过滤器S的灰色格子部分与扫描图像块的灰色格子部分吻合的地方的个数。这个值越大,就说明越符合小恶魔偏好的模式。
注:这个相似度是像素为单色二值(即0与1)时的情况,关于更一般的模式的相似度,我们将在附录C中讨论。
我们将这个相似度汇总一下,如下表所示。这就是根据过滤器S得到的卷积(convolution)的结果,称为特征映射(feature map)。
这就是在5-1节登场的小恶魔执行的扫描结果。
注:这样的过滤器的计算称为卷积。
卷积层中的神经单元将这一卷积的结果作为输入信息。各神经单元将对应的卷积的值加上特征映射固有的偏置作为加权输入(下图)。
卷积层的神经单元的加权输入。请注意偏置b是相同的。此外,小恶魔S在编号1的隐藏子层中活动。
卷积层的各个神经单元通过激活函数来处理加权输入,并将处理结果作为神经单元的输出。这样卷积层的处理就完成了。
卷积层神经单元通过激活函数将加权输入转换为输出
通过池化进行信息压缩
这个例题的卷积层神经单元数目比较少,因此可以简单地列出输出值。不过,在实际图像的情况下,卷积层神经单元的数目是十分庞大的。因此,就像5-1节提到的那样,需要进行信息压缩操作,然后将压缩结果放进池化层的神经单元中。
压缩的方法十分简单,只需要将卷积层神经单元划分为不重叠的2×2的区域,然后在各个区域中计算出代表值即可。本文中我们使用最有名的信息压缩方法最大池化(max pooling),具体来说就是将划分好的各区域的最大值提取出来。
最大池化的结果。池化层的输入和输出为相同的值。
注:池化操作通常在2×2的区域中进行,但也并非一定这样。
这样一来,一张图像的信息就被集中在紧凑的神经单元集合中了。
我们通过下面的例子来复习上述计算过程。
例利用前面所示的图像“2”和过滤器S来实际计算卷积层和池化层中神经单元的输入输出值。设特征映射的偏置为-1(阈值为1),激活函数为Sigmoid函数。
按照下图的顺序进行计算,如下所示。
注:池化层的输入和输出相同。为了简化,神经单元也用方框表示。
问题与前面例的一样,计算用过滤器S处理下边的图像“1”和“3”时卷积层和池化层中神经单元的输入输出值。
解按照与例相同的步骤,可以得到如下图所示的结果。
注:这里为了简化,神经单元也用方框表示。
从上面的例和问题可以了解到,数字“2”的图像的池化结果是由比数字“1”“3”的图像的池化结果大的值构成的。如果池化层神经单元的输出值较大,就表示原始图像中包含较多的过滤器S的模式。由此可知,过滤器S对手写数字“2”的检测发挥了作用。此外,做出判断的是输出层。与我们在第1~4章考察的神经网络一样,输出层将上一层(池化层)的信息组合起来,并根据这些信息得出整个网络的判断结论。
如上所示,我们将5-1节考察的小恶魔的工作通过数学思路表现了出来。然而,只有数学思路还不能进行计算。在下一节,为了能够实际进行计算,我们会将这些思路用数学式子表示出来。
5-3卷积神经网络的变量关系式
要确定一个卷积神经网络,就必须具体地确定过滤器以及权重、偏置。为此,我们需要用数学式来表示这些参数之间的关系。
确认各层的含义以及变量名、参数名
与前面一样,我们通过下面的例题进行讨论。
例题建立一个神经网络,用来识别通过6×6像素的图像读取的手写数字1、2、3。图像像素为单色二值。学习数据为96张图像。 |
在5-1节中,作为解答示例,我们展示了如下的卷积神经网络的图。
我们把确定这个卷积神经网络所需的变量、参数的符号及其含义汇总在下表中。
位置 | 符号 | 含义 |
输入层 | | 神经单元中输入的图像像素(i行j列)的值。与输出值相同 |
过滤器 | | 用于建立第k个特征映射的过滤器的i行j列的值。这里为了简化,考虑3×3大小的过滤器(通常采用5×5大小) |
卷积层 | | 卷积层第k个子层的i行j列的神经单元的加权输入 |
| 卷积层第k个子层的i行j列的神经单元的偏置。注意这些偏置在各特征映射中是相同的 | |
| 卷积层第k个子层的i行j列的神经单元的输出(激活函数的值) | |
池化层 | | 池化层第k个子层的i行j列的神经单元的输入。通常是前一层输出值的非线性函数值 |
| 池化层第k个子层的i行j列的神经单元的输出。与输入值 zij(P)k一致 | |
输出层 | | 从池化层第k个子层的i行j列的神经单元指向输出层第n个神经单元的箭头的权重 |
| 输出层第n个神经单元的加权输入 | |
| 输出层第n个神经单元的偏置 | |
| 输出层第n个神经单元的输出(激活函数的值) | |
学习数据 | | 正解为1时,t1=1,t2=0,t3=0正解为2时,t1=0,t2=1,t3=0正解为3时,t1=0,t2=0,t3=1 |
这些变量和参数的位置关系如下图所示。
注:图中的标记遵循3-1节的约定。
与神经网络不同的是,卷积神经网络中考虑的参数增加了过滤器这个新的成分。
接下来,我们会逐层考察在今后的计算中所需的参数和变量的关系式。虽然有些内容与5-1节、5-2节有所重复,但我们要从数学上一般化的角度来弄清楚。请读者对照着5-1节、5-2节阅读,并尝试理解数学式。
输入层
在例题中,输入数据是6×6像素的图像。这些像素值是直接代入到输入层的神经单元中的。这里我们用xij表示所读入的图像的i行j列位置的像素数据,并把这个符号用在输入层的变量名和神经单元名中。
输入层神经单元的位置与对应图像的像素位置一致。
在输入层的神经单元中,输入值和输出值相同。如果将输入层i行j列的神经单元的输出表示为,那么以下关系式成立(a的上标I为Input的首字母)。
过滤器和卷积层
就像5-1节、5-2节所考察的那样,小恶魔通过3×3大小的过滤器来扫描图像。现在,我们准备3种过滤器(5-1节)。此外,由于过滤器的数值是通过对学习数据进行学习而确定的,所以它们是模型的参数。如下图所示,这些值表示为,…(k=1,2,3)。
构成过滤器的数值是模型的参数。此外,F为Filter的首字母。
注:过滤器也称为核(kernel)。
过滤器的大小通常为5×5。本书中为简单起见,使用更为紧凑的3×3大小。此外,也不是必须准备3种过滤器。当计算结果与数据不一致时,我们需要更改这个数目。
现在,我们利用这些过滤器进行卷积处理(5-2节)。例如,将输入层从左上角开始的3×3区域与过滤器1的对应分量相乘,得到下面的卷积值(c为convolution的首字母)。
这就是5-2节中称为“相似度”的值。
依次滑动过滤器,用同样的方式计算求得卷积值。这样一来,我们就得到了使用过滤器1的卷积的结果。另外,关于这些数值的数学含义,请参照附录C。
一般地,使用过滤器k的卷积的结果可以如下表示。这里的i、j为输入层中与过滤器对应的区域的起始行列编号(i、j为4以下的自然数)。
这样得到的数值集合就形成特征映射。
我们给这些卷积值加上一个不依赖于i、j的数。
考虑以作为加权输入的神经单元,这种神经单元的集合形成卷积层的一个子层。
为卷积层共同的偏置。
激活函数为a(z),对于加权输入,神经单元的输出
可以如下表示。
式 (1)、式 (2) 中变量和参数的关系。图 中是构成卷积层第1个子层的神经单元集合。各个神经单元的加权输入为式 (1),输出为式 (2)。请注意它们具有共同的偏置。此外,这个图的标记遵循3-1节的约定。
问题试着写出卷积层第1个子层的1行2列的神经单元的加权输入与输出
的式子。激活函数为Sigmoid函数。
池化层
卷积神经网络中设置有用于压缩卷积层信息的池化层。在5-1节、5-2节中,我们把2×2个神经单元压缩为1个神经单元,这些压缩后的神经单元的集合就形成了池化层。
池化层的信息压缩方法。这里考察的卷积层由4×4个神经单元构成,分别使其中的2×2个为1组压缩为1个。
很多文献也和这里一样,将特征映射的2×2个神经单元压缩为1个神经单元。通过执行一次池化操作,特征映射的神经单元数目就缩减到了原先的四分之一。
注:如前所述,并非必须是2×2大小。
压缩的方法有很多种,比如较为有名的最大池化法,例如像下图这样,从4个神经单元的输出a11、a12、a21、a22中选出最大值作为代表。
例1下图左边为卷积层的输出值,右边为最大池化的结果。
从神经网络的观点来看,池化层也是神经单元的集合。不过,从计算方法可知,这些神经单元在数学上是非常简单的。通常的神经单元是从前一层的神经单元接收加权输入,而池化层的神经单元不存在权重和偏置的概念,也就是不具有模型参数。
此外,由于输入和输出是相同的值,所以也不存在激活函数的概念。从数学上来说,激活函数a(x)可以认为是恒等函数a(x)=x。这个特性与输出层的神经单元相似。
池化层由神经单元构成, 但它们与通常的神经单元不同。
以上讨论的池化层的性质可以用式子如下表示。这里,k为池化层的子层编号,i、j为整数,取值必须使得它们指定的参数有意义。
池化层的神经单元所接收的输入中没有权重和偏置的概念。激活函数可以认为是a(x)=x,例如
输出层
为了识别手写数字1、2、3,我们在输出层中准备了3个神经单元。与第3章和第4章中一样,它们接收来自下一层(池化层)的所有神经单元的箭头(即全连接)。这样就可以综合地考察池化层的神经单元的信息。
池化层的神经单元和输出层的神经单元是全连接。图中的神经单元名使用了输出变量名(共有12×3个箭头,这里省略)。
我们将这个图用式子来表示。输出层第n个神经单元(n=1,2,3)的加权输入可以如下表示。
这里,系数为输出层第n个神经单元给池化层神经单元的输出
(k=1,2,3;i=1,2;j=1,2)分配的权重,bn(O)为输出层第n个神经单元的偏置。
例2我们来具体地写出的式子。
上式中变量和参数的关系如下图所示。
为了写出而用到的变量和参数的关系的简略图。
我们来考虑输出层神经单元的输出,它们形成了整个卷积神经网络的输出。输出层第n个神经单元的输出值为,激活函数为a(z),则
(n=1,2,3)中最大值的下标n就是我们要判定的数字。
求代价函数Ct
现在我们考虑的神经网络中,输出层神经单元的3个输出为,对应的学习数据的正解分别记为t1、t2、t3(参考3-3节,以及本节开头的表)。于是,平方误差C可以如下表示。
注:系数1/2是为了简洁地进行导数计算,不同的文献可能会使用不同的系数,这个系数对结论没有影响。此外,关于平方误差,请参考2-12节、3-4节。
本文采用平方误差作为误差函数。正解变量t1在读取数字图 像“1”时为1,在其他情况下为0;正解变量t2在读取数字图像“2”时为1,在其他情况下为0;正解变量t3在读取数字图像“3”时为1,在其他情况下为0。
将输入第k个学习图像时的平方误差的值记为Ck,如下所示。
注:关于变量中附带的[k],请参考3-1节。
全体学习数据的平方误差的总和就是代价函数CT。因此,我们现在考虑的神经网络的代价函数CT可以如下求出。
注:96为例题中学习图像的数目。
这样我们就得到了作为计算的主角的代价函数Ct。数学上的目标是求出使代价函数Ct达到最小的参数,即求出使代价函数Ct达到最小的权重和偏置,以及卷积神经网络特有的过滤器的分量,如下图所示。
数学上的目标是实现参数的最优化。确定权重、偏置以及过滤器分量的原理与回归分析相同。使代价函数CT达到最小的参数是最优参数,而这样的思路就是最优化。
通过计算确认模型的有效性
前面我们已经多次提到过,要确认目前建立的卷积神经网络是否有助于数据分析,就要实际使用这个模型进行计算,看得到的结果是否能够很好地解释给定的数据。
下一节,为了确认前面讨论的内容,我们将使用Excel的最优化工具(求解器),直接将代价函数最小化,并求出使函数达到最小时的过滤器、权重和偏置。
备 注 L2池化
本节我们采用了最大池化作为池化的方法。最大池化具体来说就是使用 对象区域的最大值作为代表值的信息压缩方法。除了最大池化之外,还有其 他池化方法,如下所示。
名 称 说 明 最大池化 使用对象区域的最大值作为代表值的压缩方法 平均池化 使用对象区域的平均值作为代表值的压缩方法 L2 池化 例如,对于4个神经单元的输出值a1、a2、a3、a4,使用
作为代表值的压缩方法
5-4用Excel体验卷积神经网络
本节我们通过Excel来确认一下前面考察的卷积神经网络能否实际地发挥作用。
用Excel确定卷积神经网络
对于下面的例题,我们用Excel来确定卷积神经网络。
例题对于在5-3节的例题中考察的卷积神经网络,确定它的过滤器、权重和偏置。学习数据的96张图像实例收录在附录B中。 |
注:代价函数使用平方误差C的总和,激活函数使用Sigmoid函数,池化方法使用最大池化。
接下来,我们逐个步骤地进行计算。
①读入学习用的图像数据
为了让卷积神经网络进行学习,需要用到学习数据。因此,我们将图像读入到工作表中,如下图所示。
如上图所示,将数字图像保存在工作表中。
由于图像是单色二值图像,我们将图像的灰色部分设置为1,白色部分设置为0,将正解代入到变量t1、t2、t3中。学习图像为数字1时t1=1,图像为数字2时t2=1,图像为数字3时t3=1,其他情况下变量值为0。
此外,学习用的图像数据全部存放在计算用的工作表中,如下图所示。
注:如图中P列、Q列所示,图像最右边的2列像素缩小了显示宽度。
②设置参数的初始值
我们来设置过滤器、权重和偏置的初始值。这里使用了标准正态分布随机数(2-1节)。
注:当求解器的执行结果不收敛时,要修改初始值。
③从第1张图像开始计算各种变量的值
根据当前的过滤器、权重和偏置,对于第1张图像,计算出各个神经单元的加权输入值、输出值和平方误差C的值。计算时利用5-3节的关系式。
④复制步骤③中建立的各个函数到所有数据中
将处理第1张图像时嵌入的各个函数复制到其他图像数据中,直到最后一个图像实例(该例题中为第96张)为止。
将处理第1张图像时嵌入的各个函数复制到所有学习数据中(96张图像)。
⑤算出代价函数Ct的值
利用5-3节的式(7)求出代价函数Ct的值。
⑥利用求解器执行最优化
利用Excel的标准插件求解器,计算出代价函数CT的最小值。如下图所示,设置单元格地址,并运行求解器。
测试
为了确认步骤⑥中得到的过滤器、权重和偏置确定的卷积神经网络是否能正确地工作,我们试着输入新的数据,例如下边的图像。卷积神经网络的判断结果是数字“1”,这与人类的直观感受一致。
这个例子中输入了与字母I相似的数字1的图像。尽管如此,判定结果也是1。
5-5卷积神经网络和误差反向传播法
第4章我们考察了多层神经网络的误差反向传播法的结构及其计算方法。本节我们来考察卷积神经网络的误差反向传播法的结构。其实它在数学上的结构与误差反向传播法相同。我们通过下面这个之前考察过的具体例子进行讨论。
例题建立一个神经网络,用来识别通过6×6像素的图像读取的手写数字1、2、3。过滤器共有3种,其大小为3×3。图像像素为单色二值,学习数据为96张图像。 |
确认关系式
对于这个例题,我们建立了如下图所示的卷积神经网络并进行了讲解。接下来,我们来汇总一下前面考察过的关于这个网络的关系式。
注:神经单元的名称使用了输出变量名。
●卷积层
k为卷积层的子层编号,i、j(i,j=1,2,3,4)为扫描的起始行、列的编号,有以下关系式成立(5-3节式(1)、式(2))。a(z)表示激活函数。
●池化层
k为池化层的子层编号(k=1,2,3),i、j为该子层中神经单元的行、列编号(i,j=1,2),有以下关系式成立(这里是最大池化的情况,参考5-3节式(3))。
注:Max函数输出()内最大项的值。
●输出层
n为输出层神经单元的编号(n=1,2,3)(5-3节式(4)、式(5)),有以下关系式成立。a(z)表示激活函数。
●平方误差
t1、t2、t3为表示学习数据正解的变量,C为表示平方误差的变量,有以下关系式成立(5-3节式(6))。
梯度下降法是基础
第4章中应用了梯度下降法来确定神经网络的参数。同样地,在确定卷积神经网络的参数时,梯度下降法也是基础。以CT为代价函数,梯度下降法的基本式可以如下表示(2-10节)。
式子右边的括号中为代价函数CT的梯度。如式(5)所示,这里以关于过滤器的偏导数、关于权重的偏导数,以及关于偏置的偏导数作为分量(共69个分量)。
代价函数CT的梯度
正如第4章中考察的那样,这个梯度的偏导数计算非常麻烦。因此,人们想出了误差反向传播法,具体来说就是将梯度分量的偏导数计算控制到最小限度,并通过递推关系式进行计算。
省略变量符号中附带的图像编号
从式(5)可以看出,代价函数CT是梯度计算的目标。把从学习数据的
第k张图像得到的平方误差式(4)的值记为Ck,代价函数CT可以如下求出。
从式(6)中也可以看出,代价函数CT是从学习数据的各个图像得到的平方误差式(4)的和。我们在4-1节考察过,求代价函数CT的偏导数时,先对式(4)求偏导数,然后代入图像实例,并对所有学习数据求和就可以了。因此,从现在开始,我们考虑以式(4)为对象的代价函数的计算。
例1求式(5)右边的梯度分量时,如果先求式(6)的CT再求偏导数,就会浪费不少工夫。首先计算式(4)的平方误差C的偏导数,然后将图像实例代入式中,算出
[k=1,2,…,96(96为全部图像的数目)],最后对全部数据进行求和就可以了。这样极大地减少了偏导数的计算次数。
之后我们将按照例1的方法进行计算。因此,除了必要的情况之外,不再将图像编号表现在关系式中。
符号δj(l)的导入及偏导数的关系
与第4章一样,我们在误差反向传播法中导入名为神经单元误差的δ符号。现在我们考察的例题中,神经单元误差δ有两种:一种是的形式,表示卷积层第k个子层的i行j列的神经单元误差;另一种是
的形式,表示输出层第n个神经单元的误差。与第4章一样,这些δ符号是通过关于加权输入
、
(式(1)、式(3))的偏导数来定义的。
例2(卷积层第1个子层的1行1列的神经单元的误差)
(输出层第1个神经单元的误差)
例2的变量的位置关系(神经单元的表示请参考3-1节)。
与第4章的神经网络的情况一样,平方误差C关于参数的偏导数可以通过这些神经单元误差δ简洁地表示。接下来,我们来考察这个事实。
用δj(l)表示关于输出层神经单元的梯度分量
利用式(3)、式(7)和偏导数链式法则(2-8节),我们可以进行下面的例3、例4的计算。
例3
例4
例3的变量和参数的关系图。
我们可以将例3、例4一般化为如下的式(8)。这里,n为输出层的神经单元编号,k为池化层的子层编号,i、j为过滤器的行、列编号(i,j=1,2)。
用δj(l)表示关于卷积层神经单元的梯度分量
下面我们来考察关于卷积层神经单元的梯度分量。这里取过滤器分量w1(F)11的偏导数作为例子。首先,根据式(1),有
利用这些式子,可以得到下式。
根据链式法则,有
把δ的定义式(7)和式(9)代入式(10)中,得到
式(11)的右边第一项和最后一项的变量关系图。
我们可以很容易地将式(11)扩展到过滤器的其他分量。设k为过滤器的编号(这里与卷积层的编号相同),i、j为过滤器的行、列编号(i、j=1,2,3),将上式进行一般化,如下所示。
注:这是像素数为6×6、过滤器大小为3×3时的关系式。在其他情况下,需要根据实际情况对该式进行相应的改变。
此外,代价函数关于卷积层神经单元的偏置的偏导数可以如下求得。卷积层各个子层的所有神经单元的偏置都是相同的,例如对于第一个特征映射来说,可以得到下面的关系式。这与式(12)是一样的。
式(13)可以如下进行推广,其中k为卷积层的子层编号。简而言之,代价函数关于卷积层神经单元的偏置的偏导数,就是卷积层各个子层的所有神经单元误差的总和。
注:这是像素数为6×6、过滤器大小为3×3时的式子。在其他情况下,需要根据实际情况对该式进行相应的改变。
像这样,由式(8)、式(12)和式(14)可知,如果能求出神经单元误差δ,就可以求出式(5)的所有梯度分量。因此我们的下一个课题就是计算由式(7)定义的神经单元误差δ。
计算输出层的δ
与简单的神经网络(4-3节)的情况一样,计算神经单元误差δ也是利用数列的递推关系式(2-2节)。首先求出输出层的神经单元误差δ,接着通过递推关系式反向地求出卷积层的神经单元误差δ。
下面我们先来求输出层的神经单元误差δ。激活函数为a(z),n为该层的神经单元编号,根据定义式(7),有
根据式(4),有
将式(16)代入到式(15)中,就得到了输出层的神经单元误差δ。
建立关于卷积层神经单元误差δ的“反向”递推关系式
与神经网络的情况一样(4-3节),接下来要做的就是建立“反向”递推关系式。我们以δ11(F)1为例进行考察。根据偏导数的链式法则,有
式(18)的右边的变量关系图。
把式(18)中的公因式提取出来,就可以像下面这样进行简化。
根据式(3),有
再根据式(2),有
根据式(21)中的,可得
此外,由于在进行池化时形成一个区块,所以
的偏导数可以如下表示。
由于也可以记为
,把δ的定义式(7)以及式(20)~(23)
代入式(19),可得
其他的神经单元误差也可以用同样的方式进行计算,因此上式可以推广如下。
这里,k、i、j等的含义与前面相同。此外,i′、j′表示卷积层i行j列的神经单元连接的池化层神经单元的位置。
例5
例5中出现的变量的关系。
这样我们就得到了输出层和卷积层中定义的神经单元误差δ的关系式(也就是递推关系式)。输出层的神经单元误差δ已经根据式(17)得到了,因此利用关系式(25),即使不进行导数计算,也可以求得卷积层的神经单元误差δ。这就是卷积神经网络的误差反向传播法的结构。
误差反向传播法的结构。只要求出输出层的神经单元误差δ,就可以简单地求出卷积层的神经单元误差δ。
问题证明例5的关系式。 解与式(24)的证明一样,如下所示。 这样就得到了例5的式子。 |
5-6用Excel体验卷积神经网络的误差反向传播法
与第4章中考察的神经网络一样,在卷积神经网络中也可以利用误差反向传播法。下面我们利用前面考察过的以下例题,用Excel实际地进行计算。
注:计算步骤与4-4节相同。
例题对于5-5节中考察的卷积神经网络,我们来确定它的过滤器、权重、偏置的值。学习数据的96张图像实例收录在附录B中。激活函数使用Sigmoid函数。 |
作为解答示例的神经网络请参考5-1节,变量和参数的关系式请参考5-5节。现在,我们来进行具体的计算。
①读入学习用的图像数据
为了让卷积神经网络进行学习,需要用到学习数据。因此,与5-4节的步骤①同样地读入图像数据。
②设置过滤器分量、权重和偏置的初始值
现在的过滤器分量、权重和偏置当然是未知的,需要以初始值为出发点来求出。因此,我们利用正态分布随机数(2-1节)来设置初始值。
此外还要设置小的正数作为学习率η。
备 注 学习率η的设置
就像第4章中考察的那样,在设置学习率η时需要进行反复试错。如果η过小,则代价函数Ct不能迅速地达到最小值,也可能掉进意料之外的极小值处。反之,如果η过大,则存在代价函数Ct不收敛的风险。我们的目标是 将代价函数Ct最小化,为了使 Ct的值变得充分小,需要尝试各种不同的值来计算。
③算出神经单元的输出值以及平方误差C
对于第1张图像,利用当前给出的过滤器分量、权重和偏置的值来求出各个神经单元的加权输入、激活函数的值以及平方误差C。
④根据误差反向传播法计算各层的神经单元误差δ
首先,计算输出层的神经单元误差(5-5节式(17))。接着,根据“反向”递推关系式计算
(5-5节式(25))。
⑤根据神经单元误差计算平方误差C的偏导数
根据步骤④中求出的δ,计算平方误差C关于过滤器、权重和偏置的偏导数。
⑥计算代价函数Ct及其梯度▽Ct
到目前为止,我们以第1张图像作为学习数据的代表进行了考察。我们的目标是把前面的计算结果对全部数据加起来,得到代价函数CT及其梯度值。因此,必须把前面建立的工作表复制到全部学习数据的96张图像上。
对96张图像复制完毕之后,将平方误差C,以及步骤⑤中求得的平方误差C关于参数的偏导数加起来,这样就算出了代价函数的值和梯度(5-5节式(6))。
⑦根据⑥中求出的梯度,更新权重和偏置的值
利用梯度下降法的基本式(5-5节式(5)),更新过滤器、权重和偏置(2-10节)。为此,在上述⑥的工作表下面建立新的工作表,计算出更新值。
⑧反复进行③~⑦的操作
利用⑦中算出的新的权重w和偏置b,再次执行从③开始的处理。把这样算出的第2次处理的块状区域复制49份到下面,进行50次计算。
把从60行到120行的块状区域复制49份到下面。
通过以上步骤,计算就结束了。我们来看看代价函数CT的值。
代价函数Ct=0.497
由于学习数据由96张图像构成,每张图像平均为0.005。根据平方误差的函数(5-5节式(4)),每张图像的最大误差为3/2=1.5,因此可以说以上步骤算出的是一个很好的结果。
用新的数字来测试
我们创建的神经网络是用于识别手写数字1、2、3的。我们来确认一下实际上它能否正确识别数字。下面的Excel工作表是利用步骤⑧中得到的参数并输入右边的图像进行计算的例子。判定结果为数字“3”。
备 注 跟踪代价函数CT的值
跟踪50次代价函数的计算结果,就可以实际理解梯度下降法的含义。 从逻辑上看,代价函数 Ct 的值当然是随着每次迭代而减小。第 4 章中我们已经考察过,梯度下降法的优点就是减小的速度是最快的。
不过,用计算机执行误差反向传播法时,也存在代价函数Ct不减小的情况。就像第4章中考察的那样,可以认为原因是学习率和初始值不合适。在这种情况下,可以修改学习率和初始值重新进行计算。