第一节 多层感知机和布尔函数
问题一:多层感知机表示异或逻辑时至少需要几个隐含层(仅考虑二元输入)
首先是没有隐含层,等同于逻辑回归,设输入变量为x,y,有
Z
=
s
i
g
m
o
d
(
A
X
+
B
Y
+
C
)
Z=sigmod(AX+BY+C)
Z=sigmod(AX+BY+C)显然z是关于X和Y递增的,然是根据异或运算的真值表:X同为0时,Y增加,Z也增加,表明Y的系数为正;X同为1时,Y增加,Z减小,表明Y的系数为负,自相矛盾,因此不带隐含层是不行的。
考虑一个隐含层时,需要知道一个重要定理:通用近似定理:一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,当给予网络足够数量的隐藏单元时,可以以任意精度近似从一个有限维空间到另一个有限维空间的波莱尔可测函数。因此我们可以认为常用的激活函数和目标函数时通用近似定理适用的子集。
在这里可以构造一个隐含层的多层感知机就可以设计异或函数,并且需要三个节点(包括隐含层两个节点Z1、Z2和输出层一个Z)
Z1的输出:
H
1
=
X
+
Y
−
1
H_1=X+Y-1
H1=X+Y−1
Z2的输出:
H
2
=
−
X
−
Y
+
1
H_2=-X-Y+1
H2=−X−Y+1
然后输出层Z:
Z
=
−
Z
1
−
Z
2
+
1
Z=-Z_1-Z_2+1
Z=−Z1−Z2+1
其实就是设置
Z
1
Z_1
Z1的权重都是1,偏置为-1;
Z
2
Z_2
Z2的权重都是-1,偏置为1;输出层的权重都是-1,偏置为1就行。这样的真值表就和异或的一样了。
问题2:如果只有一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数?
这个问题需要理解析取范式(DNF),由有限个简单合取式构成的析取式。学这个是在逆否命题那里,非q,则p的那种,将命题写作这种形式。析取是或的意思。
先证明单个隐节点可以表示任意合取范式(满足合取范式的定义)。通过设置某变量
X
i
X_i
Xi若出现形式为正,则权重为1,若非,则权重为-1,若没有出现则权重0.偏置设置为变量总数取负加一。采用ReLu激活函数,当且仅当所有出现的布尔变量均满足条件时,隐藏单元激活,(输出1)(均为正,输出为1,均为非,输出为1,若有变量没有出现,则输入ReLu的不是0就是负数,那么不满足合取范式定义,同样输出为0,即未激活)然后,令所有隐藏单元到输出层的参数为1,偏置为0,这样,当且仅当所有的隐藏单元都未被激活时,才输出0,否则都是正数,起到了析取的作用。
用卡诺图表示析取式,这个很有意思,
然后回答问题:最差情况下,需要多少个隐藏节点来表示包含n元输入的布尔函数?问题转化为:寻找“最大不可规约的”n元析取范式,等价于最大不可规约的卡诺图。即间隔填充网格即可。所有n元布尔函数的析取范式最多包含 2(n-1) 个不可规约的合取范式,即对于单隐层的感知机,需要2(n-1) 个隐节点实现。
问题3:考虑多隐层的情况,实现包含n元输入的任意布尔函数最少需要多少个网络节点和网络层?
这个问题看着贼复杂,一脸懵逼.jpg
先考虑在问题一的中途一个结论:**实现一个异或需要三个节点,一个隐含层的两个加上输出层的一个,显然我们还能记得应该如何给这三个节点配置权重和偏置来实现异或的真值表。
然而解答不难,先不说最少实现,
那么n元输入的情况下,前两个变量用三个节点实现一个异或,下一个变量与前两个变量的输出做异或,又需要三个节点,那么这样的异或需要
3
(
n
−
1
)
3(n-1)
3(n−1)个节点,多隐层将指数级的节点O(2(n-1)) 直接下降到了O(3(n-1)) . 同时,需要2(n-1)层网络层。
下面减少层数,将变量两两配对,这样最少的网络层数是
2
l
o
g
2
N
2log_2N
2log2N(向上取整),节点数的话,就没啥意思了,n个节点,叠个小山,算一下就行。我算了个这
l
o
g
2
N
∗
(
l
o
g
2
N
+
1
)
/
2
∗
3
log_2N*(log_2N+1)/2*3
log2N∗(log2N+1)/2∗3
好的,今天就这样吧。