深度学习 15. 全连接和区域连接,fully connected 和 local connected, 解释说明(最简单的解释)

来源:互联网 发布:网络监控技术员 编辑:程序博客网 时间:2024/06/07 05:24

本文为原创文章转载必须注明本文出处以及附上 本文地址超链接  以及 博主博客地址http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)



最近一段时间,我们几个人一直在讨论一个简单的和平时不太注意的问题,也争执了一段时间,所以我觉得有必要在博客中也为大家解释说明一下这个问题,也许大家也遇到或者不知道这个问题准确的解释。这个问题就是fully connected 和 local connected的区别。

相信学过神经网络的各位都会知道有一个知识点就是MLP和CNN的区别:
1. MLP是fully connected layer. 而CNN是local connected layer.
2. MLP没有weights share. 而CNN有。
其实这两点是一点,因为fully connected layer就是没有weights share的。

所以我们可以说fully connected layer的特点就是没有weights share.但是在学习MLP的时候我们又知道MLP的nodes的连接方式是点对点的,也就是1x1的size。正是因为这点,才导致大家的分歧。因为在传统的CNN中我们也会用到fully connected layer,同时也有个比较有误导性的就是CNN的FC layer往往都是1x1的filter size。

正因为这样所以许多人认为1x1的filter size就是fully connected.我在网络上找了许多相关解释,不少人在解释1x1的filter size的时候认为其就是fully connected.然而这是错误的。



我们知道CNN可以说是MLP的一种特例,但是CNN强大的拟合能力和自身的抑制能力目前为止还没有数学理论去证明,但是其优秀的结果总是颠覆更传统的一些神经网络。正因如此所以深度学习现在是大热到不行,不过为了证明CNN所具有超强的学习能力,有人已经做了相关的研究并发表在nature杂志上面,研究中作者打乱原来的label然后进行训练,却发现CNN还是可以提取正确的信息,这种研究虽然还是没有在数学上给予解释,但是已经可以证明CNN的强大的学习能力是存在的。

而在相对传统的CNN中,我们一直还在使用fully connected layer(比如AlexNet和VGGNet等),尽管在新的GoogleNet中FClayer已经被去除了。但是我们还是可以看到MLP这种原始神经网络的影响,以及其具有的一定的能力性。

所以我们往往会忽略一些FC的问题,因为它一直都存在于我们的使用中,一直那么的自然。久而久之我们会产生简单的把1x1就是等于fully connected的这种认知错误。



这里我将给大家一个简单的判断fully connected的方法:
1. 对于neuron的连接(点对点的连接)都是fully connected.(这里其实就是MLP)
2. 对于有filter的network,不是看filter的size,而是看output的feature map的size。如果output feature map的size是1x1xN的话这个layer就是fully connected layer。

这里解释一下第二个判断方法:
1. 1x1的filter size不一定是fully connected。比如input size是10x10x100,filter size是1x1x100,重复50次,则该layer的总weights是:1x1x100x50。

2. 1x1的filter size如果要是fully connected,则input size必须是1x1。关于这一点我们在前面使用matconvnet的时候有介绍过,fc的input size如果不是1x1就会出错。

3. input size是10x10的时候却是fully connected的情况:这里我们的output size肯定是1x1,且我们的filter size肯定是10x10。

因此我们也可以将第二点总结为:
filter size等于input size则是fully connected。



说到这里可能有人不太相信,因为大家可能根深蒂固的认为1x1的情况就是fully connected。其实有个很好的例子可以佐证我的说法:GoogleNet



这里是几种经典CNN的比较图,我们知道最导致网络冗杂和承重就是FC layer。所以GoogleNet虽然比AlexNet更加深度,但是却具有更加小的memory(weights)。 因为我们都知道GoogleNet是去掉了FC layer,所以才能在性能上大幅提升。但是我们可以看GoogleNet的构造,我们发现GoogleNet还是有1x1的filter size,而且有多个layer是存在1x1 filter的,因此这里可以证明我们不能通过1x1的filter size就认定是fully connected只要input size不是1x1,那么1x1的filter也是具有weights share的

但是在NiN的paper中,作者将Relu替换为MLP,这里就是fully connected,因为是点对点的连接。所以我们一定不要被其混淆,以至于认为1x1就是fully connected。

其实这个问题本身并不是很难理解,但是就是会有一些潜意识的理所当然会导致我们认知错误。
最重要还是需要去理解这些定义的含义,而不是自己通过想象去理解。



最后我再一次总结一下这篇文章的内容:
1. fully connected没有weights share。
2. 对于neuron的连接(点对点的连接)都是fully connected.(MLP)
3. Convolution中当filter size等于input size时,就是fully connected,此时的output size为1x1xN。
4. 当1x1不等于input size的时候,1x1一样具备weights share的能力。

但大家还是需要自己再去理解一下这个问题,仔细理解一下其中的道理。





本文为原创文章转载必须注明本文出处以及附上 本文地址超链接  以及 博主博客地址http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)

1 0