第1章我们考察了什么是神经网络以及它的设计思想。本章我们来考察在数学上是怎样确定神经网络的。
3-1神经网络的参数和变量
第1章我们考察了神经网络的思想和工作原理。不过,要在数学上实际地确定其权重和偏置,必须将神经网络的思想用具体的式子表示出来。作为准备,本节我们来弄清权重与偏置的变量名的标记方法。
参数和变量
从数学上看,神经网络是一种用于数据分析的模型,这个模型是由权重和偏置确定的(1-4节)。像权重和偏置这种确定数学模型的常数称为模型的参数。
除了参数以外,数据分析的模型还需要值根据数据而变化的变量,但是参数和变量都用拉丁字母或希腊字母标记,这会引起混乱。而区分用于代入数据值的变量和用于确定模型的参数,对于逻辑的理解是不可或缺的。让我们通过以下例子来看一下。
例1在一元线性回归分析模型中,截距和回归系数是模型的参数,自变量和因变量是代入数据值的变量(2-12节)。
回归方程的常数p、q为参数。代入数据值的x、y为变量。
例2在神经网络中,当输入为x1、x2、x3时,神经单元将它们如下整合为加权输入z,通过激活函数a(z)来处理(1-3节)。
此时,权重w1、w2、w3与偏置b为参数,输入x1、x2、x3、加权输入z1、神经单元的输出a1为变量,变量的值根据学习数据的学习实例而变化。
神经网络中用到的参数和变量数量庞大
在实际进行神经网络的计算时,往往会被数量庞大的参数和变量所困扰。构成神经网络的神经单元的数量非常大,相应地表示偏置、权重、输入、输出的变量的数目也变得非常庞大。因此,参数和变量的表示需要统一标准。本节我们就来进行这一工作。
注:到目前为止的表示方法都没有考虑统一性。
神经网络领域现在还处于发展的早期阶段,还没有确立标准的表示方法。下面我们将介绍一下多数文献中采用的表示方法,并将其应用在本书中。
神经网络中用到的变量名和参数名
本书主要考察阶层型神经网络(1-4节)。这个网络按层区分神经单元,通过这些神经单元处理信号,并从输出层得到结果。
下面我们就来确认一下这个神经网络中的变量和参数的表示方法。
首先,我们对层进行编号,如下图所示,最左边的输入层为层1,隐藏层(中间层)为层2、层3……最右边的输出层为层l(这里的l指last的首字母,表示层的总数)。
进行以上准备后,我们将如下表所示来表示变量和参数。
符号 |
含义 |
|
表示输入层(层1)的第i个神经单元的输入的变量。由于输入层的神经单元的输入和输出为同一值,所以也是表示输出的变量。此外,这个变量名也作为神经单元的名称使用 |
|
从层l-1的第i个神经单元指向层l的第j个神经单元的箭头的权重。请注意i和j的顺序。这是神经网络的参数 |
|
表示层l的第j个神经单元的加权输入的变量 |
|
层l的第j个神经单元的偏置。这是神经网络的参数 |
|
层l的第j个神经单元的输出变量。此外,这个变量名也作为神经单元的名称使用 |
表格中各符号的含义如下图所示。
下面让我们利用第1章考察过的例题来确认一下上表中的变量名和参数名的含义。
例题建立一个神经网络,用来识别通过4×3像素的图像读取的手写数字0和1,其中像素是单色二值。
注:这是1-4节考察过的例题。下图是解答示例。
解
输入层相关的变量名
输入层为神经网络的数据入口,如果表示输入层的输入的变量名依次为x1,x2,…,由于输入层中神经单元的输入和输出为同一值,那么它们也是输出的变量名。本书中神经单元的名称也使用输入变量名x1,x2,…来表示。
输入层的神经单元的输入的变量名依次为x1,x2,…,x12,它们也是输出的变量名。在例题中,它们表示代入像素值的变量。
隐藏层、输出层相关的参数名与变量名
这里我们截取神经网络的一部分,并按照前面表格中的约定标注变量名和参数名,如下图所示。
下表列举了图中几个符号的具体含义。
变量值的表示方法
在前面讲解变量名的表格中,为变量,它们的值根据学习数据的学习实例而变化。通过例题来说明的话,若具体地给出了学习数据的一个图像,则
就变成了数值,而不是变量。
例4在例题中,假设给出了下面的图像作为学习实例。在将这个图像输入到神经网络中时,求隐藏层(层2)的第1个神经单元的加权输入的值。
根据前面的变量名的一般约定,加权输入可以如下表示。
由于读取图像后,输入层的x1,x2,…,x12的值就确定了,所以加权输入的值可以像下面这样确定。
这样一来,加权输入z1(2)的具体值就可以通过式(2)给出。这就是例4的解答。
注:权重(等)和偏置
为参数,它们都是常数。在不清楚变量和常数的关系时,请参考2-12节的回归分析的相关内容(参考本节末尾的备注)。
从例4中可以知道,我们需要区分变量的符号与它们的值的符号。在后面计算代价函数时,这一点非常重要。在给定学习数据的第k个学习实例时,各个变量的值可以如下表示。
注:这种表示方法是以C语言等编程语言的数组变量的表示方法为依据的。
例5在例4中,假设输入图像为学习数据的第7张图像。这时,根据(3)的约定,输入层的变量的值以及加权输入的值可以如下表示。
以上为例5的解答。它们的关系如下图所示。
将第7个图像输入神经网络时变量值的表示方法。
例6在例题中,输出层(层3)的第j个神经单元的加权输入为,输出变量为
,在将学习数据的第1张图像作为图像实例输入时,输出层(层3)的第j个神经单元的加权输入的值为
,输出值为
,如下图所示。
本书中使用的神经单元符号和变量名
到目前为止,本书中的示意图都是将参数和变量写在一个神经单元的周围,这就导致图看起来非常吃力。因此,之后我们将根据情况使用如下所示的标有参数和变量的神经单元示意图。
利用这种整合了参数和变量的示意图,就可以简洁地表示两个神经单元的关系,如下所示。
3-2神经网络的变量的关系式
要确定神经网络,就必须在数学上确定其权重和偏置,为此需要用具体的式子来表示神经单元的变量的关系。我们利用上一节的约定来实际尝试一下。
与上一节一样,我们通过第1章考察过的如下例题来展开讨论。
例题建立一个神经网络,用来识别通过4×3像素的图像读取的手写数字0和1,其中像素是单色二值。 |
注:变量和参数根据3-1节的约定来命名。
例题的解答示例的神经网络的简略图。神经单元名使用的是输出变量名。
输入层的关系式
输入层(层1)神经网络的信息入口。这个层的第i个神经单元的输入与输出为同一值xi(i=1,2,…,12)。下面,我们将变量名的约定(3-1节)推广并应用到输入层。将
定义为层l的第j个神经单元的输出值,由于输入层为层1(即l=1),
所以前面的xi可以如下表示。
这个表示方法在后面的误差反向传播法中会用到。
隐藏层的关系式
我们来写出例题中的隐藏层(层2)相关的变量、参数之间的关系式。以a(z)作为激活函数,根据1-4节,变量和参数的关系可以表示为如下式子。
输出层的关系式
下面我们来写出例题中的输出层(层3)相关的变量、参数之间的关系。与式(1)一样,如下所示。
从以上的式(1)、式(2)可以知道,在理解关系式时要常常回想起神经网络,这一点十分重要。否则,这些关系式看起来就像是蚂蚁的队列,无法看出其深意。
备 注 神经网络的变量的矩阵表示如果将式 (1)、式 (2) 用矩阵(2-5 节)来表示的话,就很容易看清式子的整体关系。下面我们就试着将式 (1)、式 (2) 用矩阵来表示。
计算机编程语言中都会有矩阵计算工具,所以将关系式变形为矩阵形式会有助于编程。另外,用矩阵表示关系式,还具有容易推广到一般情形的好处,因为式子的全部关系变得很清楚。
3-3学习数据和正解
在神经网络进行学习时,为了估计神经网络算出的预测值是否恰当,需要与正解进行对照。本节我们就来考察正解的表示方法。
回归分析的学习数据和正解
利用事先提供的数据(学习数据)来确定权重和偏置,这在神经网络中称为学习(1-7节)。学习的逻辑非常简单,使得神经网络算出的预测值与学习数据的正解的总体误差达到最小即可。
不过,第一次听到“预测值”“正解”时,可能难以想象它们的关系,这种情况下可以利用回归分析。下面我们来考察一下下面的例1。
例1如右表所示,已知3名学生的数学成绩和理科成绩。以数学成绩为自变量,求用于分析这些数据的线性回归方程。 |
|
注:这个问题的解答请参考下一节。此外,关于回归分析的内容请参考2-12节。
解回归分析的学习数据是例1的表中的全部数据。数学成绩和理科成绩分别用x、y表示,线性回归方程如下所示。
y=px+q(p、q为常数)(1)
我们以第1个学生为例来考察。这个学生的数学成绩为7分,利用式(1)对理科成绩进行预测,如下所示。
7p+q
这就是第1个学生的理科成绩的预测值。因为这个学生的实际理科成绩为8分,所以这个8分就是预测值对应的正解。
一般地,将第k个学生的数学成绩和理科成绩分别表示为(k=1,2,3),则
为预测值,
为正解,二者的关系如下图所示。
神经网络的学习数据和正解
在回归分析的情况下,如上所示,由于全部数据都整合在表格里,所以预测值和正解的关系很容易理解。而在神经网络的情况下,则通常无法将预测值和正解整合在一张表里。
例如,我们来考虑下面的例2,该例题在前两节也出现过。
例2建立一个神经网络,用来识别通过4×3像素的图像读取的手写数字0和1,其中像素是单色二值。
解这里以下面的3张图像作为学习实例。我们可以判断出数字依次是0、1、0,但刚刚建立好的神经网络则无法做出判断。
因此,需要将图像的含义,也就是正解教给神经网络,如下所示。
那么,如何将这些正解教给神经网络呢?这个问题不像前面的回归分析的例子那样简单,需要想点办法来解决。
正解的表示
神经网络的预测值用输出层神经单元的输出变量来表示。以例2的神经网络为例,它的输出层的神经单元如下图所示(3-1节、3-2节)。
我们希望输出层的第1个神经单元a1(3)对手写数字0产生较强反应,第2个神经单元a2(3)对手写数字1产生较强反应(1-4节)。使用Sigmoid函数作为激活函数时,预测的值如下表所示。
如上表所示,输出变量有2个,分别为。而例2的正解只有1个,为0或1。那么如何将1个正解和2个输出变量对应起来呢?对于这个问题,解决方法是准备2个变量t1、t2作为正解变量,分别对应输出层的2个神经单元。
对照输出层神经单元的输出变量定义变量t1、t2,如下所示。
下图所示为2个图像实例的各变量值。
以上就是神经网络的正解的表示方法。通过这样的方式来定义正解,就可以像下面这样表示神经网络算出的预测值和正解的平方误差(2-12节)。
其中,系数1/2是为了方便后面的计算。
备 注 交叉熵本书使用上述式 (2) 的平方误差作为实际数据和理论值的误差指标。虽然这个指标容易理解,但由于存在计算收敛时间长的情况,所以也有难点。为了克服这个缺陷,人们提出了各种各样的误差指标,其中特别有名的一个指标就是交叉熵。交叉熵将上述误差函数 (2) 替换为下式。
上式中,n 为数据的规模。利用这个交叉熵和 Sigmoid 函数,可以消除 Sigmoid 函数的冗长性,提高梯度下降法的计算速度。 此外,交叉熵来源于信息论中熵的思想。
3-4神经网络的代价函数
向神经网络提供学习数据,并确定符合学习数据的权重和偏置,这个过程称为学习。这在数学上一般称为最优化,最优化的目标函数是代价函数。本节我们就来看一下代价函数的相关内容。
表示模型准确度的代价函数
用于数据分析的数学模型是由参数确定的。在神经网络中,权重和偏置就是这样的参数。通过调整这些参数,使模型的输出符合实际的数据(在神经网络中就是学习数据),从而确定数学模型,这个过程在数学上称为最优化(2-12节),在神经网络的世界中则称为学习(1-7节)。
不过,参数是怎样确定的呢?其原理非常简单,具体方法就是,对于全部数据,使得从数学模型得出的理论值(本书中称为预测值)与实际值的误差达到最小。
在数学中,用模型参数表示的总体误差的函数称为代价函数,此外也可以称为损失函数、目的函数、误差函数等。如前所述(2-12节),本书采用“代价函数”这个名称。
回归分析的回顾
我们可以使用2-12节考察的回归分析来理解最优化的含义和代价函数。这里我们通过下面的例1来回顾一下回归分析。
例1如右表所示,已知3名学生的数学成绩和理科成绩。根据这些数据,求以数学成绩为自变量的线性回归方程。 |
编号 |
数学成绩x |
理科成绩y |
1 |
7 |
8 | |
2 |
5 |
4 | |
3 |
9 |
8 |
注:这个例1在2-12节作为问题出现过。此外,在上一节也提到过。
解数学成绩和理科成绩分别记为x、y,则线性回归方程如下所示。y=px+q(p、q为常数)
第k个学生的数学和理科成绩分别记为、
。于是,这名学生的实际理科成绩
与从回归分析得到的理科成绩的预测值
的误差
可以如下表示(k=1,2,3)。
以上关系可以通过下表具体地表示出来。
编号 |
数学成绩x |
理科成绩y |
预测值 |
误差e |
1 |
7 |
8 |
7p+q |
8-(7p+q) |
2 |
5 |
4 |
5p+q |
4-(5p+q) |
3 |
9 |
8 |
9p+q |
8-(9p+q) |
根据式(1),求得第k个学生的实际成绩与预测值的平方误差Ck,如下所示。
注:系数1/2是为了方便进行导数计算,这个系数的不同不会影响结论。
不过,对于如何定义全部数据的误差,有各种各样的方法,其中最标准、最简单的方法就是求平方误差的总和。利用式(2),平方误差的总和可以如下表示。这就是本书中的代价函数CT(2-11节)。
使得CT达到最小的p、q满足下式(2-12节)。
整理得
155p+21q=148、21p+3q=20
解这个联立方程组,可得p=1,q=-1/3,于是回归方程为y=x-1/3
备 注 代价函数的差异很多函数都可以作为代价函数。如前所述(3-3 节),神经网络的世界中有名的代价函数是交叉熵。不论采用怎样的代价函数,神经网络学习的方法与本例题都是相同的。
最优化的基础:代价函数的最小化
在例1的回归分析中,确定数学模型的参数是回归系数p和截距q。它们通过将代价函数(3)最小化来确定。这个过程称为最优化。
相应地,确定神经网络的数学模型的参数是权重和偏置。重要的是,确定权重和偏置的数学原理与回归分析是相同的,具体来说,就是使得从神经网络得出的代价函数CT达到最小。最优化的思想可以形象地表示为下图。
这里我们来对比一下例1的回归方程与3-2节的例题中的神经网络(简略图),如下图所示。
神经网络的代价函数
接下来需要求出神经网络的代价函数的具体式子。为了详细地展开讨论,我们来考虑前面出现过的下述例2。
例2已知一个用于识别通过4×3像素的图像读取的手写数字0、1的神经网络(下图),求它的代价函数CT。学习数据为64张图像,像素为单色二值。此外,学习数据的实例收录在附录A中。 |
解例2的解答示例的神经网络如下图所示。
具体来说,神经网络算出的预测值用输出层的神经单元的输出变量、
来表示。设这些输出变量对应的正解为
。于是,预测值与正解的平方误差C可以如下表示(3-3节)。
以第k张图像作为学习实例输入时,将平方误差C记为Ck,如下所示。
式中的64来源于例2题意中的图像数目。此外,关于的表示方法,请参考3-1节。
注:式(5)、式(6)的系数1/2在不同的文献中会有所差异,但最优化的结果是相同的。
式(6)的含义如下所示。
对于全部学习数据,将式(6)加起来,就得到代价函数CT。
式(7)的含义如下所示。
式(7)的含义:代价函数的求法。关于全部数据的平方误差的总和就是代价函数。
此外,无法用权重和偏置的具体的式子来表示式(7)。
以上就是代价函数的求法的全部内容。剩下的工作就是确定使得代价函数CT达到最小的参数(权重和偏置)。因为确定参数的方法需要较长篇幅来讲述,所以我们到下一章再详细讨论这个话题。注:例2的解答式(7)相当于前面回归分析的例1的式(3)。
参数的个数和数据的规模
下面我们来考察一下确定例2的神经网络的模型的参数个数,并汇总在下表中。
层 |
含义 |
个数 |
注 |
隐藏层 |
权重 |
12×3 |
隐藏层的神经单元的个数为3个,输入层的12个神经单元都有箭头指向隐藏层的各个神经单元 |
偏置 |
3 |
隐藏层的神经单元的个数为3个 | |
输出层 |
权重 |
3×2 |
输出层的神经单元的个数为2个,隐藏层的3个神经单元都有箭头指向输出层的各个神经单元 |
偏置 |
2 |
输出层的神经单元的个数为2个 |
根据上表,可以求得参数的总数,如下所示。
参数的总数=(12×3+3)+(3×2+2)=47
我们在2-12节考察过,如果数据的规模(即构成数据的元素个数)小于确定数学模型的参数个数的话,就无法确定模型。因此在例2中,学习用的图像至少需要47张。
神经网络和回归分析的差异
虽然神经网络和回归分析确定模型的原理相同,但是它们也存在以下差异。
(i)相比回归分析中使用的模型的参数,神经网络中使用的参数的数目十分巨大。
(ii)线性回归分析中使用的函数为一次式,而神经网络中使用的函数(激活函数)不是一次式。因此,在神经网络的情况下,代价函数变得很复杂。
差异(i)反映在式(3)和式(7)中。回归分析中作为代价函数的式(3)可以用参数的函数表示出来。而在神经网络的情况下,如式(7)所示,不能用参数(权重和偏置)的式子将代价函数表示出来。非要写出来的话,式子会变得无比复杂。
差异(ii)也反映在式(3)和式(7)中。由于式(3)为简单的二次式,所以可以简单地进行求导,容易求得式(4)的结果。然而,如果简单地对式(7)进行求导,计算将变得非常麻烦。而且,由于引入了激活函数的导数,所以得到的结果不会漂亮。
鉴于存在以上差异,相比回归分析,神经网络需要更强大的数学武器,其中代表性的一种方法就是误差反向传播法。我们将在下一章具体介绍。
用Excel将代价函数最小化
幸运的是,对于例2这样简单的神经网络,用Excel等通用软件就可以直接将代价函数式(7)最小化。即使不知道软件用了什么数学方法也不要紧。在下一节,为了理解神经网络的最优化,也就是神经网络的学习的含义,我们将试着用Excel将代价函数最小化,求出权重和偏置。
备 注 激活函数用单位阶跃函数会如何呢?我们在第 1 章考察过,作为神经网络的出发点的激活函数是单位阶跃函数。然而,如果使用单位阶跃函数,本节所考察的代价函数的最小化方法就不会被发现。因此,Sigmoid 函数等可导函数成为了激活函数的主角。
3-5用Excel体验神经网络
到目前为止,我们用同一个例题考察了神经网络。本节我们就用Excel来确认这个神经网络是实际存在并且发挥作用的。对于例题那种程度的简单神经网络,用Excel就可以直接确定权重和偏置。Excel是一个便于直观地看清理论结构的优秀工具。下面我们就用Excel来实际体验一下神经网络。
用Excel求权重和偏置
真正的神经网络是不可能用Excel来确定其权重和偏置的。然而,如果是简单的神经网络,因为它的参数个数比较少,所以可以用Excel的标准插件求解器简单地执行最优化操作。为了确认目前为止考察过的内容,本节我们利用下面的例题来实际地求出神经网络的权重和偏置,并体验神经网络的行为。
例题对于3-1节~3-4节的例题中的神经网络,用Excel来确定它的权重和偏置。学习数据的64张图像实例收录在附录A中。 |
我们一步一步地进行讲解。
①读入学习用的图像数据
为了让神经网络进行学习,学习数据当然必不可少。如下图所示,我们将学习数据读入工作表。
由于图像是单色二值的,所以我们将图像灰色部分转换为1,白色部分转换为0。将正解代入到变量t1、t2中,当输入图像的手写数字为0时(t1,t2)=(1,0),当数字为1时(t1,t2)=(0,1)(3-3节)。
我们将图像数据全部放在计算用的工作表上,如下图所示。
②设置权重和偏置的初始值
下面我们来设置权重和偏置的初始值。根据设置的不同,存在求解器计算不收敛的情况,这时需要重新设置初始值。
③从第1张图像开始计算各个神经单元的加权输入、输出、平方误差对于第1张图像,我们来计算各个神经单元的加权输入z的值、输出值、平方误差C。
④对全部数据复制③中建立的函数
将处理第1张图像时建立的函数复制到所有图像实例,求出代价函数Ct的值(3-4节式(7))。
⑤利用求解器执行最优化
利用Excel的标准插件求解器算出代价函数CT的最小值。如下设置单元格,然后运行求解器。
求解器的“可变单元格”计算出的值就是最优化之后的神经网络的权重和偏置。此外,由于代价函数CT的值为0,所以这个神经网络完全拟合了学习数据。
测试
我们来看看步骤⑤中得到的权重和偏置确定的神经网络是否正确,输入手写数字0和1,看看是否能得到我们想要的解。
下图是输入右边的像素图像时所得的结果。这个神经网络判定手写数字为0,与我们的直观感觉一致。 | ![]() |
备 注 Excel求解器的局限性Excel 求解器对于少量的计算是非常方便的,然而对于神经网络的计算则远远不够,因为参数的个数被限制为 200 多个。但在神经网络的世界中, 权重和偏置等的个数成千上万,Excel 无法处理这么多参数。