![a2a6c3d2e5e67763392ff0540137884f.png](https://i-blog.csdnimg.cn/blog_migrate/cda50476d9a764bcca7e2bfa22414eae.png)
神经网络概念的诞生很大程度上受到了神经科学的启发。生物学研究表明, 大脑皮层的感知与计算功能是分层实现的,例如视觉图像,首先光信号进入大脑皮层的V1区,即初级视皮层,之后依次通过V2层和V4层,即纹外皮层,进入下颞 叶参与物体识别。深度神经网络,除了模拟人脑功能的多层结构,最大的优势在 于能够以紧凑、简洁的方式来表达比浅层网络更复杂的函数集合(这里的“简 洁”可定义为隐层单元的数目与输入单元的数目呈多项式关系)。
我们的问题将从一个简单的例子引出,已知神经网络中每个节点都可以进行“逻辑与/或/非”的运算,如何构造一个多层感知机(Multi-Layer Perceptron,MLP)网络实现n个输入 比特的奇偶校验码(任意布尔函数)?
多层感知机表示异或逻辑时最少需要几个隐含层(仅考虑二元输入)?
当具有零个隐藏层的时候,MLP就退化为逻辑回归,这时能否表示异或运算呢?
如果我们只考虑二元输入的情况,设
X Y Z=X
0 0 0
0 1 1
1 0 1
1 1 0
回顾一下逻辑回归的公式:
其中,Sigmoid激活函数是点掉递增的,当AX+BY+C的取值增大时,Z 的取值也增大;当AX+BY+C 的取值减少时,Z的取值也减小。而AX+BY+C对于X和Y的变换也是单调的,当参数A为正数时,AX+BY+C以及Z的取值随X单调递增;当A取负数时,AX+BY+C和Z随X单调递减;当参数A为0时,Z的值与X无关。
异或运算的真值表中,当Y=0时,将X的取值从0变到1将使输出Z也从0变为1,说明此时Z的变化 与X是正相关的,需要设置A为正数;而当Y=1时,将X的取值从0变为1将导致输出Z从1变为0,此时Z与X是负相关的,需要设置A为负数,与前面矛盾。因此,采用逻辑回归(即不带隐藏层的感知机)无法精确学习出一个输出为异或的模型表示。
然后,我们再考虑具有一个隐藏层的情况。事实上,通用近似定理告诉我 们,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,当给予网络足够数量的隐藏单元时,可以以任意精度近似任何从一个有限维空间到另一个有限维空间的波莱尔可测函数。对通用近似定理的证明并不在面试的要求范围,不过可以简单认为我们常用的激活函数和目标函数是通用近似定理适用的一个子集,因此多层感知机的表达能力是非常强的,关键在于我们是否能够学习到对应此表达的模型参数。
如下图所示,图中又
![a8015165aa078102a7d4aab37e0b83ec.png](https://i-blog.csdnimg.cn/blog_migrate/8012d3b2b7a8670c3e23a59e373013dd.png)
在隐藏单元Z1中,X和Y的输入权重均为1,且偏置为 1,等同于计算
![540121bd3280d866b16abddff14881fb.png](https://i-blog.csdnimg.cn/blog_migrate/1374b6bae24583f746ea3ccbb7b1cc14.png)
同理,隐藏单元Z2的输入权重均为−1,偏置为−1,真值表如下所示。
![6f654c16e3847f7709cbaeba26a09e85.png](https://i-blog.csdnimg.cn/blog_migrate/21f039e7dad8609acd478be47557f1d7.png)
可以看到,第一个隐藏单元在X和Y均为1时激活,第二个隐藏单元在X和Y均为0时激 活,最后再将两个隐藏单元的输出做一个线性变换即可实现异或操作,如下表。
![791e9dae5b479d094394e0fb3a6de2ec.png](https://i-blog.csdnimg.cn/blog_migrate/eb1e17484cd5a144bf9b12f6c74c80c0.png)
如果只使用一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数? 如果只使用一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数?
包含n元输入的任意布尔函数可以唯一表示为析取范式(Disjunctive Normal Form,DNF)(由有限个简单合取式构成的析取式)的形式。先看一个n=5的简单示例:
![c8faa1d5741481e37d403288249bbe12.png](https://i-blog.csdnimg.cn/blog_migrate/e57ebfa6709824b48a1f60b1ff77fdb0.png)
在上式中,最终的输出Y可以表示成由6个合取范式所组成的析取范式。该函数可由包含6个隐藏节点的3层感知机实现,如下图。
![7609666055314baa9dfced91a309ec5c.png](https://i-blog.csdnimg.cn/blog_migrate/50499b04de69bf002c30992fc4d0d2ae.png)
首先证明单个隐结点可以表示任意合取范式。考虑任意布尔变量假设
我们可以使用卡诺图表示析取式,即用网格表示真值表,当输入的合取式值 为1时,则填充相应的网格。卡诺图中相邻的填色区域可以进行规约,以达到化简 布尔函数的目的,如下图所示,由图可见,有W、X、Y、Z共4个布尔变量,WX的 取值组合在纵轴显示,YZ的取值组合在横轴显示。7个填色网格最终可规约为3个 合取式,故该函数可由包含3个隐节点的3层感知机实现:
![09f5264ba2b94678f066982d048c565a.png](https://i-blog.csdnimg.cn/blog_migrate/82c5590d21c08f9762cab0c83d58763b.png)
回顾初始问题:在最差情况下,需要多少个隐藏结点来表示包含n元输入的布 尔函数呢?现在问题可以转化为:寻找“最大不可规约的”n元析取范式,也等价于最大不可规约的卡诺图。直观上,我们只需间隔填充网格即可实现,其表示的布尔函数恰为n元输入的异或操作,如下图。容易看出,在间隔填充的网格上反 转任意网格的取值都会引起一次规约,因此,n元布尔函数的析取范式最多包含
![911743ed202e68f99a2edeea66fb84d8.png](https://i-blog.csdnimg.cn/blog_migrate/5d392b72064ede2cf15d7c7d33b04e2b.png)
考虑多隐层的情况,实现包含n元输入的任意布尔函数最少需要多少个网络节点和网络层?
参考问题1的解答,考虑二元输入的情况,需要3个结点可以完成一次异或操 作,其中隐藏层由两个节点构成,输出层需要一个结点,用来输出异或的结果并 作为下一个结点的输入。对于四元输入,包含三次异或操作,需要3×3=9个节点即可完成。
下图展示了一种可能的网络结构。
![e2404f13a3cbdf01f9a84f88f56ca3ba.png](https://i-blog.csdnimg.cn/blog_migrate/4fb47bf8fe675dcf6fc7afb5d0dbec85.png)
输入W、X、Y、Z 4个布尔变量;首先 用3个结点计算W⊕X;然后再加入3个节点,将W⊕X的输出与Y进行异或,得 到W⊕X⊕Y;最后与Z进行异或,整个网络总共需要9个结点。而六元输入包含五次异或操作,因此需要3×5=15个节点,网络的构造方式可参考下图所示。依此类 推,n元异或函数需要包括3(n−1)个节点(包括最终输出节点)。可以发现,多隐 层结构可以将隐节点的数目从指数级
![df0eaaf1c7220239e05f79a4912563c8.png](https://i-blog.csdnimg.cn/blog_migrate/ad14b97227521fd8fa5c0fe201311c61.png)
在上面所举的例子中,n元异或所需的3(n−1)个结点可以对应2(n−1)个网络层 (包括隐含层和输出层),实际上,层数可以进一步减小。考虑到四元的输 入W、X、Y、Z;如果我们在同一层中计算W⊕X和Y⊕Z,再将二者的输出进行异 或,就可以将层数从6降到4。根据二分思想,每层节点两两分组进行异或运算, 需要的最少网络层数为