引言
水果分类问题:
有一台能够根据种类把水果进行分类的机器,机器的传送带上装有传感器,这些传感器可以检测到水果的三种特征:形状、纹理、重量。
- 当水果形状接近于圆形时,形状传感器输出1,近似椭圆则输出-1;
- 当水果表面光滑时,纹理传感器输出1,表面粗糙则输出-1;
- 当水果重量大于1磅时,重量传感器输出1,小于1磅则输出-1。
这三种传感器的输出作为一个神经网络的输入,网络的目的是判断传动带上送来的是哪种水果,然后根据判断把水果送往正确的存储仓,为了简化问题,加上传送带上只有苹果和橘子。
每个水果通过传感器时,它会被表示成一个三维向量如:
- 橘子
p = [ 1 − 1 − 1 ] p=\begin{bmatrix} 1 \\ -1 \\ -1\end{bmatrix} p=⎣⎡1−1−1⎦⎤ - 苹果
p = [ 1 1 − 1 ] p=\begin{bmatrix} 1 \\ 1 \\ -1\end{bmatrix} p=⎣⎡11−1⎦⎤
传感器将这个三维向量输入到神经网络中,神经网络做出相应判断。
感知机
下图展示了一个采用对称应限值传输函数的单层感知机:
1 先谈两个输入的感知机
假设权值
w
1
,
1
=
−
1
,
w
1
,
2
=
1
w_{1,1}=-1,w_{1,2}=1
w1,1=−1,w1,2=1,则有:
a
=
h
a
r
d
l
i
m
s
(
n
)
=
h
a
r
d
l
i
m
s
(
[
−
1
1
]
p
+
b
)
a=hardlims(n)=hardlims(\begin{bmatrix} -1 &1\end{bmatrix}p+b)
a=hardlims(n)=hardlims([−11]p+b)
即,W·p的值大于或等于-b时(W·p + b大于等于0),感知机输出为1,否则输出为-1,这样就将输入空间划分为两个部分。当b取-1时空间划分情况如下图,蓝色斜线表示净输入等于0的点。阴影部分为输出为1的输入向量的集合,其他区域为输出为-1的输入向量的集合。
由图中可以看出,决策边界垂直于权值矩阵(在这里是1×2)W,其实决策边界总是垂直于权值矩阵(第四章详细讨论)
所以单神经元感知机最主要的特征就是能够把输入向量分为两类,这两类之间的决策边界由公式
W
⋅
p
+
b
=
0
W·p + b = 0
W⋅p+b=0给出.
2 水果分类中的感知机
针对苹果和橘子的水果分类问题,由于只有两个类别,这里可以采用一个神经元的感知机,因为输入向量是三维的,所以感知机的计算公式为:
a
=
h
a
r
d
l
i
m
s
[
[
w
1
,
1
w
1
,
2
w
1
,
3
]
[
p
1
p
2
p
3
]
+
b
]
a=hardlims\begin{bmatrix} {\begin{bmatrix} w_{1,1}&w_{1,2}&w_{1,3}\end{bmatrix}}{\begin{bmatrix}p_1\\p_2\\p_3\end{bmatrix}}+b\end{bmatrix}
a=hardlims⎣⎡[w1,1w1,2w1,3]⎣⎡p1p2p3⎦⎤+b⎦⎤
如果希望苹果作为输入时感知机输出是1,当橘子作为输入时输出为-1,可以根据两个输入时的二维感知机作出推广,在三维空间中找到一个能够区分苹果和橘子的线性边界,如下图:
其中p1(orange)和p2(apple)为之前给出的两个标准向量,能够区分这个两个标准向量的线性边界是p1p3平面,即为决策边界。可用公式
p
2
=
0
p_2=0
p2=0 表示。从特征上来看,
p
2
=
0
p_2=0
p2=0作为外表是否光滑的分界线的确能将苹果和橘子分开。
由
p
2
=
0
p_2=0
p2=0可推出:
[
0
1
0
]
[
p
1
p
2
p
3
]
+
0
=
0
{\begin{bmatrix} 0&1&0\end{bmatrix}}{\begin{bmatrix}p_1\\p_2\\p_3\end{bmatrix}}+0=0
[010]⎣⎡p1p2p3⎦⎤+0=0
即,权值矩阵为
W
=
[
010
]
W=[0 1 0]
W=[010],偏置为b=0。这时,将放入标准的苹果会输出1,放入标准的橘子输出-1。如果放入一个不标准的橘子,也会得到正确输出。
p
=
[
−
1
−
1
−
1
]
⟹
得
到
输
出
⟹
a
=
h
a
r
d
l
i
m
s
[
0
1
0
]
[
−
1
−
1
−
1
]
+
0
=
−
1
p= {\begin{bmatrix} -1\\-1\\-1\end{bmatrix}}\implies 得到输出 \implies a=hardlims{\begin{bmatrix} 0&1&0\end{bmatrix}}{\begin{bmatrix}-1\\-1\\-1\end{bmatrix}}+0=-1
p=⎣⎡−1−1−1⎦⎤⟹得到输出⟹a=hardlims[010]⎣⎡−1−1−1⎦⎤+0=−1
对于本实例而言,通过选择能够明显区分两种水果的决策边界,可以图形化地设计出一个神经网络,对于一些需要高维度输入空间的实际问题,可以通过一些学习算法训练神经网络来解决问题。这将在后面的章节里说明。
单层感知机最重要的特性是生成了一个能够区分输入向量类型的线性决策边界。如果输入向量的类型不能被一个线性边界分开,多层感知机可以解决这个问题。(第11章)
Hamming网络
Hamming网络是为解决二值模式识别(输入向量的每一个元素只有两个可能的取值)问题特别设计的。Hamming网络既使用了前馈层也使用了回复(反馈)层。
Hamming网络的目标是判断输入向量更接近(相关性大)哪个标准向量,前馈层作出相关性判断,回复层根据前馈层判断作出分类。
对于每一个标准向量,回复层中都有一个与之对应的神经元,当回复层收敛后,只有一个神经元会输出零值,该神经元就表示哪一个标准模式最接近输入向量。
1 前馈层
前馈层用于计算每个标准模式和输入模式之间的相关性。为了实现相关性的计算,前馈层的权值矩阵 W 1 W^1 W1 用连接矩阵表示,连接矩阵的每一行都设置为一个标准模式,在水果分类的实例中则有:
W
1
=
[
p
1
T
p
2
T
]
=
[
1
−
1
−
1
1
1
−
1
]
W^1={\begin{bmatrix} p_1^T\\p_2^T\end{bmatrix}}={\begin{bmatrix} 1& -1 &-1\\1 & 1 & -1\end{bmatrix}}
W1=[p1Tp2T]=[11−11−1−1]
这样
W
⋅
p
W·p
W⋅p中的每一个元素就是输入向量与标准向量的内积,即:
W
1
p
=
[
p
1
T
p
p
2
T
p
]
W^1p={\begin{bmatrix} p_1^Tp\\p_2^Tp\end{bmatrix}}
W1p=[p1Tpp2Tp]
从内积的角度上讲,输入向量与标准向量的方向一致时,内积最大,方向相反时内积最小,这样就可以描述输入向量与每个标准向量之间的相关性。
使用线性传递函数,则输出为:
a
1
=
W
1
p
+
b
1
a^1=W^1p+b^1
a1=W1p+b1
为了保证输出永远不会为负数(这是回复层正常运行的必要条件),通过加上一个偏置使输出的最小值为0。对于水果分类问题这一三维问题来说, W ⋅ p W·p W⋅p中每个元素的能取到的最小值时意味着输入向量与该标准向量方向相反,此时二者内积为 − 1 + ( − 1 ) + ( − 1 ) = − 3 -1+(-1)+(-1)=-3 −1+(−1)+(−1)=−3 ,所以b取 [ 3 3 ] \begin{bmatrix} 3 &3\end{bmatrix} [33] ,可以保证所有的 W ⋅ p W·p W⋅p中元素均大于等于0。
所以前馈层的输出为:
a
1
=
W
1
p
+
b
1
=
[
p
1
T
p
2
T
]
+
[
3
3
]
=
[
p
1
T
p
+
3
p
2
T
p
+
3
]
a^1=W^1p+b^1=\begin{bmatrix} p_1^T\\p_2^T \end{bmatrix}+\begin{bmatrix} 3 \\3\end{bmatrix}=\begin{bmatrix}p_1^Tp+3\\p_2^Tp+3\end{bmatrix}
a1=W1p+b1=[p1Tp2T]+[33]=[p1Tp+3p2Tp+3]
事实上,经过上面的权值矩阵与偏置得到的前馈层输出
a
1
a^1
a1 ,
a
1
a^1
a1中最大的元素对应的神经元正好对应着与输入向量Hamming距离最小的标准向量。
(对于二值向量来说,两个向量的Hamming距离等于向量中不同元素的个数。)
假设R维问题中,输入向量与某个标准向量有i个元素不同(Hamming距离为i),R-i个元素相同,则其内积为R-i-i,加上偏置后的输出为R-i-i+R=2R-2i。这就证明了前馈层输出向量中元素的大小与输入向量和该元素对应的标准向量的Hamming距离成反比,也就是说,元素越大,Hamming距离越小。前馈层依据此方法就作出相关性判断。
2 回复层
回复层的神经元初始值为前馈层的输出(代表标准与输入的相关性),回复层的神经元相互竞争决定一个胜者。竞争结束后只会有一个神经元的输出非零,获胜的神经元表明了网络输入的类别。回复层的输出如下(上标中的2代表层数):
a
2
(
0
)
=
a
1
a^2(0)=a^1
a2(0)=a1
a
2
(
t
+
1
)
=
p
o
s
l
i
n
(
W
2
a
2
(
t
)
)
a^2(t+1)=poslin(W^2a^2(t))
a2(t+1)=poslin(W2a2(t))
其中poslin传输函数在输入值为正数时为线性函数,当输入值为负时取值为0
W
2
=
[
1
−
ε
−
ε
1
]
W^2=\begin{bmatrix} 1&-ε\\-ε&1\end{bmatrix}
W2=[1−ε−ε1]
ε是一个小于1/(S-1)的数,S为回复层中神经元的个数。
回复层的一次迭代计算过程为:
a
2
(
t
+
1
)
=
p
o
s
l
i
n
(
[
1
−
ε
−
ε
1
]
a
2
(
t
)
)
=
p
o
s
l
i
n
(
[
a
1
2
(
t
)
−
ε
a
2
2
(
t
)
a
2
2
(
t
)
−
ε
a
1
2
(
t
)
]
)
a^2(t+1)=poslin(\begin{bmatrix} 1&-ε\\-ε&1\end{bmatrix}a^2(t))=poslin(\begin{bmatrix} a_1^2(t)-εa_2^2(t)\\a_2^2(t)-εa_1^2(t)\end{bmatrix})
a2(t+1)=poslin([1−ε−ε1]a2(t))=poslin([a12(t)−εa22(t)a22(t)−εa12(t)])
也就是说每迭代一次,向量中的每一个元素都要同等比例地去减去另一个元素的一部分,值较大的元素减幅小一些,因此值较大的元素与值较小的元素之间的差异就会增大。通过这种作用,回复层实现了将除了初始值最大的神经元外的其他所有神经元的输出逐步减小为0。
3 在水果分类的实例中的Hamming网络
有椭圆形橘子:
p
=
[
−
1
−
1
−
1
]
p=\begin{bmatrix} -1\\-1\\-1\end{bmatrix}
p=⎣⎡−1−1−1⎦⎤
前馈层的输出为:
a
1
=
[
1
−
1
−
1
1
1
−
1
]
+
[
3
−
3
]
=
[
4
3
]
a^1=\begin{bmatrix} 1&-1&-1\\ 1 &1&-1\end{bmatrix}+\begin{bmatrix} 3\\ -3\end{bmatrix}=\begin{bmatrix} 4\\ 3\end{bmatrix}
a1=[11−11−1−1]+[3−3]=[43]
则反馈层的输出为(取ε为0.5):
a
2
(
0
)
=
a
1
=
[
4
2
]
a^2(0)=a^1=\begin{bmatrix} 4\\ 2\end{bmatrix}
a2(0)=a1=[42]
a
2
(
1
)
=
a
1
=
p
o
s
l
i
n
(
[
1
−
ε
−
ε
1
]
a
2
(
0
)
=
[
3
0
]
a^2(1)=a^1=poslin(\begin{bmatrix} 1&-ε\\ \\-ε&1\end{bmatrix}a^2(0)=\begin{bmatrix}3\\0\end{bmatrix}
a2(1)=a1=poslin(⎣⎡1−ε−ε1⎦⎤a2(0)=[30]
a
2
(
2
)
=
a
1
=
p
o
s
l
i
n
(
[
1
−
ε
−
ε
1
]
a
2
(
1
)
=
[
3
0
]
a^2(2)=a^1=poslin(\begin{bmatrix} 1&-ε\\ \\-ε&1\end{bmatrix}a^2(1)=\begin{bmatrix}3\\0\end{bmatrix}
a2(2)=a1=poslin(⎣⎡1−ε−ε1⎦⎤a2(1)=[30]
后续迭代的输出都相同,所以网络是收敛的,因为只有第一个神经元输出了非零值,所以选择第一个标准模式为橘子作为正确匹配的结果。
Hopfield网络
Hopfield网络是一个回复网络,功能与Hamming网络中的回复层有些类似,但它可以完成Hamming网络两层结构才能完成的工作。Hopfield网络的一种变形如下:
使用输入向量来初始化该网络的神经元,然后网络不断地迭代直到收敛。当网络计算正确时,其输出结果将会是某一个标准向量。
在Hamming网络中由输出非零值的神经元来表明选定了哪种标准模式,而Hopfield网络则是直接生成一个选定的标准模式作为输出。
a
(
0
)
=
p
a(0)=p
a(0)=p
a
(
t
+
1
)
=
s
a
t
l
i
n
s
(
W
a
(
t
)
+
b
)
a(t+1)=satlins(Wa(t)+b)
a(t+1)=satlins(Wa(t)+b)
其中传输函数satlins在[-1 1]的区间是线性的,当输入值大于1时函数饱和,取值为1,当输入值小于-1时函数饱和,取值为-1。
在Hamming网络中前馈层的权值为标准模式,但Hopfield网络的取值矩阵和偏置向量的设置就复杂得多,将在以后详细介绍,现在先取以下值用于说明网络的运行过程。
W
=
[
0.2
0
0
0
1.2
0
0
0
0.2
]
,
b
=
[
0.9
0
−
0.9
]
W=\begin{bmatrix} 0.2&0&0\\0&1.2&0\\0&0&0.2\end{bmatrix},b=\begin{bmatrix} 0.9\\0 \\-0.9\end{bmatrix}
W=⎣⎡0.20001.20000.2⎦⎤,b=⎣⎡0.90−0.9⎦⎤
我们希望网络的输出能够收敛到橘子标准模式和苹果标准模式其中一个,这两个标准模式的不同之处在于第二个元素(光滑)的值(1或-1)。而其第一个元素(形状)和第三个元素(重量)都收敛到1和-1。
利用上面给定的参数,Hopfield网络运算公式如下:
a
1
(
t
+
1
)
=
s
a
t
l
i
n
s
(
0.2
a
1
(
t
)
+
0.9
)
a_1(t+1)=satlins(0.2a_1(t)+0.9)
a1(t+1)=satlins(0.2a1(t)+0.9)
a
2
(
t
+
1
)
=
s
a
t
l
i
n
s
(
1.2
a
2
(
t
)
)
a_2(t+1)=satlins(1.2a_2(t))
a2(t+1)=satlins(1.2a2(t))
a
3
(
t
+
1
)
=
s
a
t
l
i
n
s
(
0.2
a
3
(
t
)
−
0.9
)
a_3(t+1)=satlins(0.2a_3(t)-0.9)
a3(t+1)=satlins(0.2a3(t)−0.9)
不管网络的初始值如何,输出向量的第一个元素会一直增加直到等于1,第三个元素会一直减小直到等于-1。第二个元素会放大20%,如果第二个元素初始值为正则会收敛到1,如果初始值为负,则会收敛到-1。
再次利用椭圆形橘子来测试Hopfield网络,前三次的迭代输出为:
a
(
0
)
=
[
−
1
−
1
−
1
]
,
a
(
1
)
=
[
0.7
−
1
−
1
]
,
a
(
2
)
=
[
1
−
1
−
1
]
,
a
(
3
)
=
[
1
−
1
−
1
]
a(0)=\begin{bmatrix}-1\\-1\\-1\end{bmatrix},a(1)=\begin{bmatrix}0.7\\-1\\-1\end{bmatrix},a(2)=\begin{bmatrix}1\\-1\\-1\end{bmatrix},a(3)=\begin{bmatrix}1\\-1\\-1\end{bmatrix}
a(0)=⎣⎡−1−1−1⎦⎤,a(1)=⎣⎡0.7−1−1⎦⎤,a(2)=⎣⎡1−1−1⎦⎤,a(3)=⎣⎡1−1−1⎦⎤
最终收敛到了橘子模式。