1. 神经网络
神经网络,是代数式的图形表示。例如,下面这个代数式:
y
=
3
c
o
s
(
2
x
1
+
4
x
2
)
+
7
s
i
n
(
8
x
1
+
3
x
2
)
(1)
\tag1 y=3cos(2x_1+4x_2)+7sin(8x_1+3x_2)
y=3cos(2x1+4x2)+7sin(8x1+3x2)(1)
可以用图形表示成下面神经网络形式:
神经网络包括节点和连线,节点
x
1
,
x
2
x_1,x_2
x1,x2 是输入, 节点
y
y
y 是输出,中间的节点
+
,
c
o
s
,
s
i
n
+, cos, sin
+,cos,sin 代表运算,连线上的数字代表连线的权重,要与输入数据相乘。例如,下面的图形表示
2
x
1
+
4
x
2
2x_1+4x_2
2x1+4x2 :
神经网络模型把复杂计算公式的计算过程直观展示出来,更容易理解。
2. 连接、激活函数
一般代数式内部存在线性组合和非线性计算两种运算形式。上面(1)中,存在3个线性组合运算和2个非线性运算。下图展示了3个线性组合运算。两个非线性计算分别是
c
o
s
,
s
i
n
cos, sin
cos,sin 函数。
线性组合运算通常用上面这种节点+连接的形式表示, 非线性运算节点通常称为激活函数。
关于激活函数:如果神经网络没有非线性函数,神经网络模型只能实现线性变换运算,无法表达复杂的非线性运算。因此,非线性函数的引入,激活了神经网络模型在非线性问题方面的处理能力。我觉得,这可能就是激活函数名称的来历吧。
3. 二分类问题
我记得小时候读过一本天气预报方面的科普读物,介绍了一种简易的天气预报方法。说是每天记录一下当天的气温 x1 和气压 z2,然后,如果第二天天气晴,就在平面坐标系的 (x1, x2) 位置画一个红圈,如果第二天阴雨,就在 (x1, x2) 位置画一个篮圈。数据积累多了,我们会发现,红圈和篮圈之间实际上可以用一条线分开。
利用这条分界线,就可以预报天气。如果今天的(x1, x2) 落在红圈一侧,就预报明日晴天,否则就预报阴雨。具体参加下面的图形。
其实这就是机器学习的一个雏形——利用已知的观测数据,总结出数据的分布规律,然后用来预测未来的结果。已知的观测数据我们称为“训练样本”,总结规律的过程称之为“学习”,最后得到的预测公式称之为“算法模型”。
3.1 线性可分问题
假设下图平面坐标系内两组点,可以用直线 w 1 x 1 + w 2 x 2 + w 0 = 0 w_1x_1+w_2x_2+w_0=0 w1x1+w2x2+w0=0 分开,也就是说这两组点是线性可分的。
可以用代数式
w
1
x
1
+
w
2
x
2
+
w
0
w_1x_1+w_2x_2+w_0
w1x1+w2x2+w0 的符号判断给定的坐标属于哪一组。
借助于符号函数
s
i
g
n
sign
sign , 可以把计算结果变换成
0
0
0 和
1
1
1, 以便借助逻辑运算实现更复杂的功能。
y
=
s
i
g
n
(
w
1
x
1
+
w
2
x
2
+
w
0
)
y = sign(w_1x_1+w_2x_2+w_0)
y=sign(w1x1+w2x2+w0)
其中,
s
i
g
n
(
x
)
=
{
1
(
x
>
0
)
0
(
x
≤
0
)
sign(x)= \begin{cases} 1&&(x>0)\\ 0&&(x\le0) \end{cases}
sign(x)={10(x>0)(x≤0)
对应的网络模型如下:
3.2 实现逻辑运算
把输出结果限在 0 , 1 0, 1 0,1 两种结果上,令 true = 1, false = 0,可以实现逻辑运算。那么逻辑运算是否能用神经网络描述呢?参见下表:
逻辑表达式 | 代数式 |
---|---|
p and q | sign(p+q-1.5) |
p or q | sign(p+q-0.5) |
p = not(q) | p = 1-q |
p = not(sign(x)) | p = sign(-x) |
3.3 凸集分类问题
下图所示的正样本集合,
可以用下面约束条件来表示:
w
11
x
1
+
w
12
x
2
+
w
1
>
0
w
21
x
1
+
w
22
x
2
+
w
2
>
0
w
31
x
1
+
w
32
x
2
+
w
3
>
0
(2)
\tag2 w_{11}x_1+w_{12}x_2+w_1 \gt 0\\ w_{21}x_1+w_{22}x_2+w_2 \gt 0\\ w_{31}x_1+w_{32}x_2+w_3 \gt 0\\
w11x1+w12x2+w1>0w21x1+w22x2+w2>0w31x1+w32x2+w3>0(2)
令
y
1
=
s
i
g
n
(
w
11
x
1
+
w
12
x
2
+
w
1
)
y
2
=
s
i
g
n
(
w
21
x
1
+
w
22
x
2
+
w
2
)
y
3
=
s
i
g
n
(
w
31
x
1
+
w
32
x
2
+
w
3
)
z
=
s
i
g
n
(
y
1
+
y
2
+
y
3
−
2.5
)
(3)
\tag3 y_1=sign(w_{11}x_1+w_{12}x_2+w_1) \\ y_2=sign(w_{21}x_1+w_{22}x_2+w_2)\\ y_3=sign(w_{31}x_1+w_{32}x_2+w_3 )\\ z=sign(y_1+y_2+y_3-2.5)
y1=sign(w11x1+w12x2+w1)y2=sign(w21x1+w22x2+w2)y3=sign(w31x1+w32x2+w3)z=sign(y1+y2+y3−2.5)(3)
于是,
z
=
1
z=1
z=1 时,样本
(
x
1
,
x
2
)
(x_1, x_2)
(x1,x2) 是正样本。(3)式对应的神经网络模型图如下:
图中, y 1 , y 2 , y 3 y_1,y_2,y_3 y1,y2,y3 后面的加法节点省略了。一般情况下,模型图会省略掉加法节点,以便简化图形。
3.4 更复杂的分类问题
复杂区域总可以表示成若干凸集的并集。有了前面的基础,我们可以解决更一般的分类问题。下图的正样本区域由两个凸集(三角形区域)的并集构成。
分类计算模型如下:
−
−
a
r
e
a
1
−
−
y
1
=
s
i
g
n
(
w
11
x
1
+
w
12
x
2
+
w
1
)
y
2
=
s
i
g
n
(
w
21
x
1
+
w
22
x
2
+
w
2
)
y
3
=
s
i
g
n
(
w
31
x
1
+
w
32
x
2
+
w
3
)
z
1
=
s
i
g
n
(
y
1
+
y
2
+
y
3
−
2.5
)
−
−
a
r
e
a
2
−
−
y
4
=
s
i
g
n
(
w
411
x
1
+
w
412
x
2
+
w
4
)
y
5
=
s
i
g
n
(
w
521
x
1
+
w
522
x
2
+
w
5
)
y
6
=
s
i
g
n
(
w
631
x
1
+
w
632
x
2
+
w
6
)
z
2
=
s
i
g
n
(
y
4
+
y
5
+
y
6
−
2.5
)
−
−
r
e
s
u
l
t
−
−
z
=
s
i
g
n
(
z
1
+
z
2
−
0.5
)
-- area 1 --\\ y_1=sign(w_{11}x_1+w_{12}x_2+w_1) \\ y_2=sign(w_{21}x_1+w_{22}x_2+w_2)\\ y_3=sign(w_{31}x_1+w_{32}x_2+w_3 )\\ z_1=sign(y_1+y_2+y_3-2.5)\\ -- area 2 --\\ \\ y_4=sign(w_{411}x_1+w_{412}x_2+w_4) \\ y_5=sign(w_{521}x_1+w_{522}x_2+w_5)\\ y_6=sign(w_{631}x_1+w_{632}x_2+w_6 )\\ z_2=sign(y_4+y_5+y_6-2.5)\\ -- result --\\ z=sign(z_1+z_2-0.5)
−−area1−−y1=sign(w11x1+w12x2+w1)y2=sign(w21x1+w22x2+w2)y3=sign(w31x1+w32x2+w3)z1=sign(y1+y2+y3−2.5)−−area2−−y4=sign(w411x1+w412x2+w4)y5=sign(w521x1+w522x2+w5)y6=sign(w631x1+w632x2+w6)z2=sign(y4+y5+y6−2.5)−−result−−z=sign(z1+z2−0.5)
网络模型图如下:
通常我们把激活函数和它前面的线性组合运算组成的单元称为“神经元”。不考虑输入层和输出层,上面的网络模型中存在三个计算网络层:第一层构造了 6 条直线,第二层构造了 2 个三角形, 第三层利用 z = z1 or z2 的关系,给出最终判定结论。
小结
到目前为止,神经网络的结构和原理的核心内容就基本到位了。我们已经能够根据自己对问题的分析,手工构建出网络模型,实现分类算法。
我们的例子中,数据 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) 是二维的。对于高维度数据分类问题,人工很难确定网络中间层的结构,因此,寻找自动生成网络中间层的方法,是神经网络必须解决的问题。后续课程讲介绍如何利用样本数据,训练生成神经网络模型。