9.2 神经网络基础 287
9.2 神经网络基础
神经网络是一种由大量的节点(或称神经元)之间相互连接构成的计算模型。
么什么是神经元?神经元之间又是如何连接的?神经网络的数学描述又是什么样的?
这一节将围绕这些问题系统地对神经网络的基础知识进行介绍。
9.2.1 线性代数基础
线性代数作为一个数学分支,广泛应用于科学和工程中,神经网络的数学描述
中也大量使用了线性代数工具。因此,这里对线性代数的一些概念进行简要介绍,
方便后续对神经网络进行数学描述。
1. 标量、向量和矩阵
标量Scalar):标量亦称“无向量”,是一种只具有数值大小而没有方向的量,
通俗地说,一个标量就是一个单独的数,这里特指实数
2
比如,对于 a = 5a 就是
一个标量。
向量Vector向量是由一组实数组成的有序数组。与标量不同,向量既有大小也
有方向。可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。公式(9.1)
公式(9.2)分别展示了一个行向量和一个列向量:
a =
1 2 5 7
(9.1)
a
T
=
1
2
5
7
(9.2)
本章默认使用行向量,如 a = (a
1
,a
2
,a
3
)a 对应的列向量记为 a
T
矩阵Matrix):矩阵是一个按照长方阵列排列的实数集合,最早来自于方程组
的系数及常数所构成的方阵。在计算机领域,通常将矩阵看作二维数组。这里用符
A 示一个矩阵,如果该矩阵有 m n 列,那么有 A R
m×n
。矩阵中的每个
素都被一个行索引和一个列索引所确定,例如,a
ij
表示第 i 行、 j 列的矩阵元素。
如下,下式中的 A 定义了一个 2 2 列的矩阵。
A =
a
11
a
12
a
21
a
22
!
=
1 2
3 4
!
(9.3)
2
严格意义上,标量可以是复数等其他形式。这里为了方便讨论,仅以实数为对象。
288 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
2. 矩阵的转置
转置Transpose是矩阵的重要操作之一。矩阵的转置可以看作是将矩阵以对角
线为镜像进行翻转:假
A
m
n
列的矩阵,第
i
行、第
j
列的元素是
a
ij
,即:
A = (a
ij
)
m×n
m×n 矩阵 A 的行换成同序数的列得到一个 n×m 矩阵,则得到 A
的转置矩阵,记为 A
T
,且 A
T
= (a
ji
)
n×m
。例如,对于下式中的矩阵,
A =
1 3 2 6
5 4 8 2
!
(9.4)
它转置的结果如下:
A
T
=
1 5
3 4
2 8
6 2
(9.5)
向量可以看作只有一行(列)的矩阵。对应地,向量的转置可以看作是只有一列
(行)的矩阵。标量可以看作是只有一个元素的矩阵。因此,标量的转置等于它本身,
a
T
= a
3. 矩阵加法和数乘
矩阵加法又被称作按元素加法Element-wise Addition它是指两个矩阵把其相
对应元素加在一起的运算,通常的矩阵加法被定义在两个形状相同的矩阵上。两个
m ×n 矩阵 A B 的和,标记为 A + B它也是个 m ×n 矩阵,其内的各元素为其相
对应元素相加后的值,即如果矩阵 C = A + B,则 c
ij
= a
ij
+ b
ij
。下式展示了矩阵之
间进行加法的计算过程。
1 3
1 0
1 2
+
0 0
7 5
2 1
=
1 + 0 3 + 0
1 + 7 0 + 5
1 + 2 2 + 1
=
1 3
8 5
3 3
(9.6)
矩阵加法满足以下运算规律:
交换律:A + B = B + A
结合律:(A + B) + C = A + (B + C)
A + 0 = A,其中 0 指的是零矩阵,即元素皆为 0 的矩阵。
A + (A) = 0,其中 A 是矩阵 A 的负矩阵,即将矩阵 A 的每个元素取负得到
9.2 神经网络基础 289
的矩阵。
矩阵的数乘也称标量乘法Scalar Multiplication是指标量(实数)与矩阵的乘法
运算,计算过程是将标量与矩阵的每个元素相乘,最终得到与原矩阵形状相同的矩
阵。例如,矩阵 A = (a
ij
)
m
×
n
与标量 k 进行数乘运算,其结果矩 B = (ka
ij
)
m
×
n
k( a
ij
)
m×n
= (ka
ij
)
m×n
。公式(9.7)(9.8)展示了矩阵数乘的计算过程:
A =
3 2 7
5 8 1
!
(9.7)
2A =
6 4 14
10 16 2
!
(9.8)
矩阵的数乘满足以下运算规律,其中 k l 是实数,A B 是形状相同的矩阵:
右分配律:k(A + B) = kA + kB
左分配律:(k +l)A = kA + lA
结合律:(kl)A = k ( lA)
4. 矩阵乘法和矩阵点乘
矩阵乘法是矩阵运算中最重要的操作之一,为了与矩阵点乘区分,通常也把矩
阵乘法叫做矩阵叉乘。假设 A m ×p 的矩阵,B p ×n 的矩阵, A B 作矩
阵乘法的结果是一个 m ×n 的矩阵 C,其中矩阵 C 中第 i 行、第 j 列的元素可以
示为:
(AB)
ij
=
p
X
k=1
a
ik
b
kj
(9.9)
只有当第一个矩阵的列数与第二个矩阵的行数相等时,两个矩阵才可以作矩阵
乘法。公式(9.10)展示了矩阵乘法的运算过程, A =
a
11
a
12
a
13
a
21
a
22
a
23
!
B =
b
11
b
12
b
21
b
22
b
31
b
32
则有:
C = AB
=
a
11
b
11
+ a
12
b
21
+ a
13
b
31
a
11
b
12
+ a
12
b
22
+ a
13
b
32
a
21
b
11
+ a
22
b
21
+ a
23
b
31
a
21
b
12
+ a
22
b
22
+ a
23
b
32
!
(9.10)
矩阵乘法满足以下运算规律:
结合律:若
A
R
m×n
B
R
n×p
C
R
p×q
,则
(
AB
)
C
=
A
(
BC
)
290 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
左分配律:若 A R
m×n
B R
m×n
C R
n×p
,则 (A + B)C = AC + BC
右分配律:若 A R
m×n
B R
n×p
C R
n×p
,则 A(B + C) = AB + AC
可以将线性方程组用矩阵乘法表示,如对于线性方程组
5x
1
+ 2x
2
= y
1
3x
1
+ x
2
= y
2
以表示为 Ax
T
= y
T
,其中 A =
5 2
3 1
x
T
=
x
1
x
2
y
T
=
y
1
y
2
矩阵的点乘就是将两个形状相同的矩阵各个对应元素相乘,矩阵点乘也被称为
Element-wise Product)或 Hadamard 积, A B如,
(9.11)和公式(9.12)所示的两个矩阵,
A =
1 0
1 3
!
(9.11)
B =
3 1
2 1
!
(9.12)
矩阵点乘的计算方式如下:
C = A B
=
1 ×3 0 ×1
1 ×2 3 ×1
!
(9.13)
5. 线性映射
线性映射Linear Mapping线性变换Linear Transformation是一个向量空间
V 到另一个向量空间 W 的映射函数 f : v w且该映射函数保持加法运算和数量乘
法运算,即对于空间 V 中任何两个向量 u v 以及任何标量 c始终符合公式(9.14)
公式(9.15)
f(u + v) = f(u) + f(v) (9.14)
f(cv) = cf(v) (9.15)
利用 A R
m×n
,可两个欧氏映射 f : R
n
R
m
例如 n 维列向量 x
T
m ×n 的矩阵 A向量 x
T
左乘矩阵 A可将向量 x
T
映射为 m
9.2 神经网络基础 291
列向量。公式(9.16)(9.18)(9.19)展示了一个具体的例子,
x
T
=
x
1
x
2
...
x
n
(9.16)
(9.17)
A =
a
11
a
12
... a
1n
a
21
... ... ...
... ... ... ...
a
m1
... ... a
mn
(9.18)
可以得到:
y
T
= Ax
T
=
a
11
x
1
+ a
12
x
2
+ ···+ a
1n
x
n
a
21
x
1
+ a
22
x
2
+ ···+ a
2n
x
n
.
.
.
a
m1
x
1
+ a
m2
x
2
+ ···+ a
mn
x
n
(9.19)
上例中矩阵 A 定义了一个从 R
n
R
m
的线性映射:向量 x
T
R
n
y
T
R
m
别为两个空间中的列向量,即大小为 n ×1 m ×1 的矩阵。
6. 范数
工程领域,经常会使用被称为范数Norm)的函数衡量向量大小,范数为向
空间内的所有向量赋予非零的正长度(或大小)。对于一个 n 维向量 x,一个常见的
范数函数为 l
p
范数,通常表示为 x
p
,其中 p 0,是一个标量形式的参数。常
p 的取值有 12 等。范数的计算方式如下:
l
p
(x) = x
p
=
n
X
i=1
|x
i
|
p
!
1
p
(9.20)
l
1
范数为向量的各个元素的绝对值之和:
x
1
=
n
X
i=1
|x
i
| (9.21)
292 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
l
2
范数为向量的各个元素平方和的二分之一次方:
x
2
=
v
u
u
t
n
X
i=1
x
i
2
=
xx
T
(9.22)
l
2
范数被称为几里得范Euclidean Norm)。从几何角度,向量也可以表
为从原点出发的一个带箭头的有向线段,其 l
2
范数为线段的长度,也常被称为向量
的模。l
2
范数在机器学习中非常常用。向 x l
2
范数经常简化表示 x可以
通过点积 xx
T
进行计算。
l
范数为向量的各个元素的最大绝对值:
x
= max{|x
1
|,|x
2
|,...,|x
n
|} (9.23)
广义上讲,范数是将向量映射到非负值的函数,其作用是衡量向量 x 到坐标原
点的距离。更严格的说,范数并不拘于 l
p
范数,任何一个同时满足下列性质的函数
都可以作为范数:
f(x) = 0,则 x = 0
三角不等式:f(x + y) 6 f (x) + f(y)
任意实数 αf(αx) = |α|f (x)
在深度学习中,有时候希望衡量矩阵的大小,这时可以考虑使用 Frobenius 范数
Frobenius Norm),其计算方式如下:
A
F
=
s
X
i,j
a
2
i,j
(9.24)
9.2.2 人工神经元和感知机
生物学中,神经元是神经系统的基本组成单元。同样,人工神经元是人工神经网
络的基本单元。在人们的想象中,人工神经元应该与生物神经元类似。但事实上,
者在形态上是有明显差别的。如图9.3 是一个典型的人工神经元,其本质是一个形似
y = f(xw + b) 的函数。显而易见,一个神经元主要由 xwbf 四个部分构成。
x 是一个形 (x
1
,x
2
,...,x
n
) 实数向量,在一个神经元中担任“输入”的角色。
w 通常被理解为神经元连接的权重Weight(对于一个人工神经元,权重是一个向
量,表示为 w;对于由多个神经元组成的神经网络,权重是一个矩阵,表示为 W
其中的每一个元素都对应着一个输入和一个输出,代表着“某输入对某输出的贡献
程度”b 被称作偏置(对于一个人工神经元,偏置是一个实数,表示为 b对于神经
网络中的某一层,偏置是一个向量,表示 bf 被称作激活函数,用于对输入向
9.2 神经网络基础 293
量各项加权和后进行某种变换。可见,一个人工神经元的功能是将输入向量与权重
矩阵右乘(做内积)后,加上偏置量,经过一个激活函数得到一个标量结果。
x
2
x
1
b
y
f
w
1
w
2
9.3 人工神经元
1. 感知机
——
最简单的人工神经元模型
感知机是人工神经元的一种实例,在上世纪 50 年代被提出,对神经网络研究产生
了深远的影响。感知机模型如图9.4所示,其输入是一个 n 维二值向量 x = (x
1
,x
2
,...,x
n
)
其中 x
i
= 0 1权重 w = (w
1
,w
2
,...,w
n
)每个输入变量对应一个权重 w
i
偏置 b
是一个实数变量(σ。输出也是一个二值结果,即 y = 0 1y 值的判定由输入
的加权和是否大于(或小于)一个阈值 σ 决定:
y =
0
P
i
x
i
·w
i
σ < 0
1
P
i
x
i
·w
i
σ > 0
(9.25)
x
2
x
1
x
3
y
P
σ
w
1
w
2
w
3
9.4 感知机模型
感知机可以做一些简单的决策。举一个非常单的例子,有一场音乐会,你正
在纠结是否去参加,有三个因素会影响你的决定:
x
1
:剧场是否离你足够近(是,则 x
1
= 1;否则 x
1
= 0
x
2
:票价是否低于 300 元(是,则 x
2
= 1;否则 x
2
= 0
x
3
:女朋友是否喜欢音乐会(是,则 x
3
= 1;否则 x
3
= 0
在这种情况下应该如何做出决定呢?比如,女朋友很希望和你一起去看音乐会,
但是剧场很远而且票价 500 元,如果这些因素对你都是同等重要的(即 w
1
= w
2
= w
3
,
294 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
假设这三个权重都设置为 1)那么会得到一个综合得分:
x
1
·w
1
+ x
2
·w
2
+ x
3
·w
3
= 0 ·1 + 0 ·1 + 1 ·1
= 1 (9.26)
如果你不是十分纠结的人,能够接受不完美的事情,你可能会把 σ 设置为 1
P
w
i
·x
i
σ 0,那么你会去音乐会。可以看出,上面的例子的本质就是一个如
9.5所示的感知机:
x
2
: 票价够低?
x
1
: 距离够近?
x
3
: 女友喜欢?
y: 去?还是不去?
w
1
= 1
w
2
= 1
w
3
= 1
P
σ
9.5 预测是否去剧场的感知机(权重相同)
2. 神经元内部权重
在上面的例子中,连接权重代表着每个输入因素对最终输出结果的重要程度,
了得到令人满意的决策,需要不断调整权重。如果你是守财奴,则会对票价看得更
重一些,用不算每响,比如:w
1
= 0.5w
2
= 2
w
3
= 0.5此时感知机模型如图9.6所示。在这种情况下,女友很希望和你一起去看音
乐会,但是剧场很远而且票价 500 元,会导致你不去看音乐会,该决策过程如下:
X
i
x
i
·w
i
= 0 ·0.5 + 0 ·2 + 1 ·0.5
= 0.5
< σ = 1 (9.27)
x
2
: 票价够低?
x
1
: 距离够近?
x
3
: 女友喜欢?
y: 去?还是不去?
w
1
= .5
w
2
= 2
w
3
= .5
P
σ
9.6 预测是否去剧场的感知机(权重不同)
当然,结果是女友对这个决定非常不满意。
9.2 神经网络基础 295
3. 神经元的输入
——
离散 vs 连续
在受到了女友“批评教育”之后,你意识到决策考虑的因素(即输入)不应该只
是非 0 1,而应该把“程度”考虑进来,于是你改变了三个输入的形式:
x
1
10/距离(km
x
2
150/票价(元)
x
3
:女朋友是否喜欢
在新修改的模型中,x
1
x
2
变成了连续变量,x
3
仍然是离散变量,如图9.7
示。
x
1
距离 (km)
x
2
票价 ()
x
3
不喜欢 喜欢
是否喜欢
9.7 神经元输入的不同形式
使用修改后的模型做决策:女朋友很希望和你一起,但是剧场有 20km 远而且票
价有 500 元。于是有 x
1
= 10/20x
2
= 150/500x
3
= 1。此时决策过程如下:
X
i
x
i
·w
i
= 0.5 ·0.5 + 0.3 ·2 + 1 ·0.5
= 1.35
> σ = 1 (9.28)
虽然剧场很远,价格有点贵,但是女友很满意,你还是很高兴。
4. 神经元内部的参数学习
一次成功的音乐会之后,你似乎掌握了一个真理:其他什么都不重要,女友的喜
好最重要,所以你又将决策模型的权重做出了调整:最简单的方式就是 w
1
= w
2
= 0
同时令 w
3
> 0相当于只考虑 x
3
的影响而忽略其他因素,于是你得到了如图9.8所示
的决策模型:
x
2
: 便宜程度
x
1
: 远近程度
x
3
: 女友喜欢?
y: 去?还是不去?
P
σ
w
1
= 0
w
2
= 0
w
3
= 10
9.8 预测是否去剧场的决策模型(只考虑女友喜好)
296 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
很快又有了一场音乐会,距你 1000 里,票价 3000 元,当然女友是一直喜欢
音乐会的。根据新的决策模型,你义无反顾地选择去看音乐会。然而,女友又不高
兴了,喜欢浪漫的女友觉得去看这场音乐会太奢侈了。在这几次看音乐会的经历中,
你发现每个因素的权重需要准确地设置才能达到最好的决策效果。
那么如何确定最好的权重的?方法其实很简单,不断地尝试,根据结果不断地
调整权重。在经过成百上千次的尝试之后,终于找到了一组合适的权重,使每次决
策的正确率都很高。上面这个过程就类似于参数训练的过程,利用大量的数据来模
拟成百上千次的尝试,根据输出的结果来不断地调整权重。
可以看到,在“是否参加音乐会”这个实际问题中,主要涉及到三方面的问题:
对问题建模,即定义输入 {x
i
} 的形式;
设计有效的决策模型,即定义 y
得到模型参数(如权重 {w
i
})的最优值。
上面的例子对这三个问题都简要地做出了回答。下面的内容将继续对它们进行
详细阐述。
9.2.3 多层神经网络
感知机是一种最简单的单层神经网络。一个很自然的问题是:能否把多个这样
的网络叠加在一起,获得建模更复杂问题的能力?如果可以,那么在多层神经网络
的每一层,神经元之间是怎么组织、工作的呢?单层网络又是通过什么方式构造成
多层的呢?
1. 线性变换和激活函数
为了建立多层神经网络,首先需要把前面提到的简单的神经元进行扩展,把多
个神经元组成一“层”神经元。比如,很多实际问需要同时有多个输出,这时可
以把多个相同的神经元并列起来,每个神经元都会有一个单独的输出,这就构成一
“层”形成了单层神经网络。单层神经网络中的每一个神经元都对应着一组权重
一个输出,可以把单层神经网络中的不同输出看作一个事物不同角度的描述。
举个简单的例子,预报天气时,往往需要预测温度、湿度和风力,这就意味着如
果使用单层神经网络进行预测,需要设置 3 个神经元。如图9.9示,此时权重矩
如下:
W =
w
11
w
12
w
13
w
21
w
22
w
23
!
(9.29)
它的第一列元
w
11
w
21
!
是输入相对第一个输 y
1
的权重,参数向 b = (b
1
,b
2
,b
3
)
的第一个元素 b
1
是对应于第一个输出 y
1
的偏置量;类似的,可以得到 y
2
y
3
。预
9.2 神经网络基础 297
x
1
x
2
b
y
1
温度
w
11
w
21
b
1
y
2
湿度
w
12
w
22
b
2
y
3
风力
w
13
w
23
b
3
9.9 权重矩阵中的元素与输出的对应关系
测天气的单层模型如图9.10所示(在本例中,假设输入 x = (x
1
,x
2
)
一层神经元
x
1
x
2
b
y
1
w
11
w
21
b
1
y
2
w
12
w
22
b
2
y
3
w
13
w
23
b
3
输入向量:
x = (x
1
,x
2
)
输出向量:
y = (y
1
,y
2
,y
3
)
9.10 预测天气的单层神经网络
在神经网络中,对于输入向量 x R
m
,一层神经网络首先将其经过线性变换映
射到 R
n
再经过激活函数变成 y R
n
还是上面天气预测的例子,每个神经元获得
相同的输入,权重矩阵 W 是一个 2 ×3 矩阵,矩阵中每个元素 w
ij
代表第 j 个神经元
x
i
对应的权重值,假设编号为 1 的神经元负责预测温度,则 w
i1
的含义为预测温
度时输入 x
i
对其影响程度。此外所有神经元的偏置 b
1
b
2
b
3
组成了最终的偏置向
b。在该例中则有,权重矩阵 W =
w
11
w
12
w
13
w
21
w
22
w
23
!
,偏置向量 b = (b
1
,b
2
,b
3
)
那么,线性变换的本质是什么?图9.11正是线性变换的简单示意。
从代数角度看,对于线性空间 V任意 aa V 和数域中的任意 α线性变换
T (·) 需满足:T (a + b) = T (a) + T (b),且 T (αa) = αT (a)
从几何角度看,公式中的 xW + b x 右乘 W 相当于对 x 进行旋转变换。例如,
对三个点 (0, 0)(0, 1)(1, 0) 及其围成的矩形区域右乘如下矩阵:
W =
1 0 0
0 1 0
0 0 1
(9.30)
这样,矩形区域由第一象限旋转 90 度到了第四象限,如图9.11第一步所示。
xW + b 的公式中 b 相当于对其进行平移变换。其过程如9.11 二步
298 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
所示,偏置矩阵 b =
0.5 0 0
0 0 0
0 0 0
将矩形区域沿 x 轴向右平移了一段距离。
x
y
0 1
1
F
x
y
0
1
-1
W =
1 0 0
0 1 0
0 0 1
F
x
y
0
1
-1
F
b =
0.5 0 0
0 0 0
0 0 0
9.11 线性变换示意图
线性变换提供了对输入数据进行空间中旋转、平移的能力。线性变换也适用于
更加复杂的情况,这也为神经网络提供了拟合不同函数的能力。比如可以利用线性
变换将三维图形投影到二维平面上,或者将二维平面上的图形映射到三维空间。如
9.12所示,通过一个简单的线性变换,可以将三维图形投影到二维平面上。
1 0 0
0 1 0
0 0 1
···
1 0 0
0 1 0
0 0 1
| {z }
5
×
1
1
1
=
1
1
1
···
1
1
1
| {z }
5
9.12 线性变换:3 2 维数学示意
那激活函数又是什么?一个神经元在接收到经过线性变换的结果后,通过激活
函数的处理,得到最终的输 y。激活函数的目的是解决实际问题中的非线性变换,
线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。
别是在实际问题中,很多现象都无法用简单的线性关系描述,这时可以使用非线性
激活函数来描述更加复杂的问题。常见的非线性激活函数 SigmoidReLUTanh
等。图9.139.14中列举了几种激活函数的形式。
x
y
-1.0 -0.5 0.5 1.00
0.5
1.0
y = ln(1 + e
x
)
(a) Softplus
x
y
-5.0 -2.5 2.5 5.00
0.5
1.0
y =
1
1+e
x
(b) Sigmoid
x
y
-1.0 -0.5 0.5 1.00
0.5
1.0
y =
e
x
e
x
e
x
+e
x
(c) Tanh
9.13 几种常见的激活函数
9.2 神经网络基础 299
x
y
-1.0 -0.5 0.5 1.00
0.5
1.0
y = max(0, x)
(a) ReLU
x
y
-1.0 -0.5 0.5 1.00
0.5
1.0
y = e
x
2
(b) Gaussian
x
y
-1.0 -0.5 0.5 1.00
0.5
1.0
y = x
(c) Identity
9.14 几种常见的激活函数(补)
2. 单层神经网络 多层神经网络
单层神经网络由线性变换和激活函数两部分构成,但在实际问题中,单层网络并
不能很好地拟合复杂函数。因此很自然地想到将单层网络扩展到多层神经网络,即
深层神经网络。将一层神经网络的最终输出向量作为另一层神经网络的输入向量,
过这种方式可以将多个单层神经网络连接在一起。
在多层神经网络中,通常包括输入层、输出层和至少一个隐藏层。9.15展示了
一个三层神经网络,包括输入层
3
、输出层和两个隐藏层。
f
1
P
f
1
P
f
1
P
f
1
P
f
1
P
x
1
x
2
x
3
x
4
x
5
W
[1]
0
(输入层)
1
(隐藏层)
f
2
P
f
2
P
f
2
P
W
[2]
2
(隐藏层)
f
3
P
f
3
P
f
3
P
f
3
P
f
3
P
y
1
y
2
y
3
y
4
y
5
W
[3]
3
(输出层)
9.15 三层神经网络
9.2.4 函数拟合能力
神经网络方法之所以受到青睐一方面是由于它提供了端到端学习的模式,另一
方面是由于它强大的函数拟合能力。理论上说,神经网络可以拟合任何形状的函数。
下面就来看一下为什么神经网络会有这样的能力。
3
由于输入层不存在神经元,因此在计算神经网络层数时不将其包括在内。
300 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
众所周知,单层神经网络无法解决线性不可问题,比如经典的异或问题。但
是具有一个隐藏层的两层神经网络在理论上就可以拟合所有的函数了。接下来我们
分析一下为什么仅仅是多了一层,神经网络就能变得如此强大。对于二维空间(平
面)“拟合”是指:把平面上一系列的点,用一条光滑的曲线连接起来,并用函数来
表示这条拟合的曲线。这个概念可以推广到更高维空间上。在用神经网络解决问题
时,可以通过拟合训练数据中的“数据点”来获得输入与输出之间的函数关系,并利
用其对未知数据做出判断。可以假设输入与输出之间存在一种函数关系,而神经网
络的“拟合”是要尽可能地逼近原函数输出值,与原函数输出值越逼近,则意味着拟
合得越好。
如图9.16是一个以 Sigmoid 作为隐藏层激活函数的两层神经网络。通过调整参数
W
[1]
= (w
11
,w
12
)b = (b
1
,b
2
) W
[2]
= (w
11
,w
21
)
T
的值,可以不断地改变目标函数
的形状。
f
P
f
P
x
1
b
P
y
b
1
w
11
w
11
w
21
b
2
w
12
Sigmoid:
Sum:
f(s
2
) = 1/(1 + e
s
2
)
s
2
= x
1
· w
12
+ b
2
9.16 Sigmoid 作为隐藏层激活函数的两层神经网络
设置 w
11
= 1w
11
= 1b
1
= 0,其他参数设置 0。可以得到如图9.17(a) 所示
的目标函数,此时目标函数还是比较平缓的。通过调大 w
11
可以将图9.17(a) 中函数
的坡度调得更陡: w
11
= 10 时,如图9.17(b) 所示,目标函数的坡度与图9.17(a)
比变得更陡了;当 w
11
= 100 时,如图9.17(c) 所示, 目标函数的坡度变得更陡、更尖
锐,已经逼近一个阶梯函数。
x
y
1
0
(a)
w
11
= 1
b
1
= 0
x
y
1
0
(b)
w
11
= 10
b
1
= 0
x
y
1
0
(c)
w
11
= 100
b
1
= 0
9.17 通过调整权重 w
11
改变目标函数平滑程度
设置 w
11
= 1w
11
= 100b
1
= 0,其他参数设置为 0。可以得到如图9.18(a)
9.2 神经网络基础 301
示的目标函数,此时目标函数是一个阶梯函数,其“阶梯”恰好 y 轴重合。通过
改变 b
1
,可以将整个函数沿 x 轴向左右平移:当 b
1
= 2 时,如图9.18(b) 所示,
9.18(a) 相比目标函数的形状没有发生改变,但其位置沿 x 轴向右平移; b
1
= 4
时,如图9.18(c) 所示,目标函数的位置继续沿 x 轴向右平移。
x
y
1
0
(a)
w
11
= 100
b
1
= 0
x
y
1
0
(b)
w
11
= 100
b
1
= 2
x
y
1
0
(c)
w
11
= 100
b
1
= 4
9.18 通过调整偏置量 b
1
改变目标函数位置
设置 w
11
= 1w
11
= 100b
1
= 4,其他参数设置为 0。可以得到如图9.19
(a) 所示的目标函数,此时目标函数是一个阶梯函数,该阶梯函数取得最大值的分段
处为 y = 1通过改变 w
11
可以将目标函数“拉高”或是“压扁”如图9.19(b) (c)
所示, 目标函数变得“扁”了。最终,该阶梯函数取得最大值的分段处约为 y = 0.7
x
y
1
0
(a)
w
11
= 100
b
1
= 4
x
y
1
0
(b)
w
11
= 0.9
x
y
1
0
(c)
w
11
= 0.7
9.19 通过改变权重 w
11
将目标函数“拉高”或“压扁”
设置 w
11
= 0 . 7w
11
= 100 b
1
= 4其他参数设置为 0。可以得到如图9.20(a)
所示的目标函数,此时目标函数是一个阶梯函数。若是将其他参数设置为 w
21
= 0.7
w
11
= 100b
2
= 16,由图9.20(b) 可以看出,原来目标函数的“阶梯”由一级变成了
两级,由此可以推测,将第二组参数进行设置,可以使目标函数分段数增多;若将
第二组参数中的 w
21
由原来的 0.7 设置为 0.7可得到如图9.20(c) 所示的目标函数,
与图9.20(b) 相比,原目标函数的“第二级阶梯”向下翻转,由此可见 W
[2]
的符号决
定了目标函数的翻转方向。
x
y
1
0
(a)
w
11
= 0.7
x
y
1
0
(b)
w
12
= 100
b
2
= 6
w
21
= 0.7
x
y
1
0
(c)
w
12
= 100
b
2
= 6
w
21
= 0.7
9.20 通过设置第二组参数(b
2
w
21
)将目标函数分段数增加
由上面的内容,已经看到通过设置神经元中的参数将目标函数的形状做各种变
换,但是上例中目标函数的类型还是比较单一的。而在实际问题中,输入与输出之
302 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
间的函数关系甚至复杂到无法人为构造或是书写,神经网络又是如何拟合这种复杂
的函数关系的呢?
x
y
(b)
x
y
1
0
(a)
9.21 将目标函数作分段处理
以如图9.21(a) 所示的目标函数为例,为了拟合该函数,可以将其看成分成无数
小段的分段函数,如图9.21(b) 所示。
如图9.22(a) 所示,上例中两层神经网络的函数便可以拟合出目标函数的一小段。
为了使两层神经网络可以拟合出目标函数更多的一小段,需要增加隐藏层神经元的
个数。如图9.22(b)将原本的两层神经网络神经元个数增多一倍, 2 个神经元扩展
4 个神经元,其函数的分段数也增加一倍,而此时的函数恰好可以拟合目标函数
中的两个小段。以此类推,理论上,该两层神经网络便可以通过不断地增加隐藏层
神经元数量去拟合任意函数。
f
P
f
P
x
1
(a) 拟合一小段函数
b
P
y
b
1
= 6
w
11
= 100
b
2
= 4
w
12
= 100
w
11
= 0.7
w
21
= 0.7
Sigmoid:
Sum:
f(s
2
) = 1/(1 + e
s
2
)
s
2
= x
1
·w
12
+ b
x
y
1
0
x
y
1
0
f
P
f
P
x
1
(b) 拟合更大一段函数
b
f
P
f
P
P
y
b
1
= 6
w
11
= 100
b
2
= 4
w
12
= 100
w
11
= 0.7
w
21
= 0.7
Sigmoid:
Sum:
f(s
2
) = 1/(1 + e
s
2
)
s
2
= x
1
·w
12
+ b
x
y
1
0
x
y
1
0
9.22 扩展隐藏层神经元个数去拟合目标函数更多的“一小段”
两层神经元的神经网络在理论上可以拟合所有函数了,但是在实际问题中所使
用的神经网络都远远超过了两层,这也是对深度学习这个概念中“深度”的一种体
现。使用深层神经网络主要有以下几方面的原因:
使用较浅的神经网络去拟合一个比较复杂的函数关系,需要数量极其庞大的神
9.2 神经网络基础 303
经元和参数,训练难度大。在上面的例子中可以看出,两层神经元仅仅拟合目
标函数的两小段,其隐藏层就需要 4 个神经元。从另一个角度说,加深网络也
可能会达到与宽网络(更多神经元)类似的效果。
层的以提的线和激数,输入程度好,
因而可以更好的表示数据的特征。
在本书后面的内容中还会看到,深层网络在机器翻译中可以带来明显的性能提
升。