强人工智能基本问题:神经网络分层还是不分层
版本:0.1
现代的大部分机器学习的算法将神经元分出了清晰的层次。所谓分层,即将神经元分为几层(也可认为是几组)。每层内的神经元没有联系,相邻的层与层之间的神经元会有两两的联系,从而形成一个关系矩阵。非相邻层的神经元之间没有联系。这里的相邻指的是神经元层次之间的关系,每层神经元有一层或者前后两层相邻。
一般神经网络的算法的神经元层数是有限的,一般是两三层。在理论上,三层神经元(包括输入、输出和隐含层,除去输入输出,也可算做只有一层)就足以解决所有问题了,因为中间的隐含层能够表达所有函数。但这只是数学上的可能性,实际中如果只用一个隐含层来实现人类智能,需要的节点数量估计近似于无穷。
增加神经网络的层数,如同从加法到乘法、指数一样,抽象出类似的层次,进行归纳,从而减小问题的计算复杂性。人的大脑对信息的加工其实也是分层次的。比如对语言的听觉处理,先有有种频率,振幅的层次,然后是频率的变化,不同频率的组合的层次,再往后是音节层次,随后到了词汇层次。最后产生到我们能感觉到的信息层次和粒度,包括谁在说话,说的什么意思,心情如何等。底层的过滤甚至会让我们忽视对方用的是什么方言和语言。到了深度学习,神经网络的层次才到了真正的多层结构。其实大家一直就知道多层好,但苦于不知道怎么训练多层的模型,从而无法应用。深度学习给出了一个切实可行的多层训练方案,所以多层模型也开始广泛的应用了。
解决具体问题时,并不是层数越多越好,对于不同问题,需要的层数是不一样的。为了能够实际的解决问题,需要的也不一定是更多的层数,有时候需要某一层有更多的神经元来解决复杂的问题。比如,一万个神经元的系统,如果效率不高,只能表达一个简单的数学函数。提高效率后,也许能达到一个昆虫的智商。人类如果能够理解智能产生的结构,一定能够创造出比自然界生成的神经网络更高效的智能网络。
到这里,答案似乎已经明显了。要产生智能,神经网络似乎必然是分层的。那么大脑中是不是也有层次呢?答案并非简单的是或否。从比较宏观的角度来看,大脑是分层的,比如感觉神经、小脑、大脑都是比较清晰的层次。特别是在小脑中,神经元排布非常规律。具体到大脑,也是一般说的产生智能的新脑中,也发现了宏观上的层次,比如视觉的处理,大概有平方厘米级的分层。所以宏观上的分层是大脑处理信息的方式。在神经网络微观的神经元层次,并没有清晰的分层的效果。大脑中的神经网络就像是一团乱麻。神经网络就像是电路一样,用很多电线将元件联系起来。神经网络走线的方式从不好的方面来说,走线是非常乱的,就像一个电路设计的初学者,实现了功能,但电路毫无规律和可读性。从好的方面来看,神经网络是三维的走线方式,对空间的利用率非常高。在电路设计中,即使是三维的走线方式,电路也是分层的,各层之间有连接点,这样的电路设计才是可复制的。
所以,大脑宏观上是有层次的,但在微观上是没有清晰的层次的。现代的神经网络算法中的层次都是为了简化模型的复杂度而存在的。但在简化复杂度的同时,失去了灵活性。
不分层并不表示只有一层,而是构建一个自由连通的神经网络,不用层次来约束它。这里说的自由连通,不等于全连通。全连通的意思表示所有节点之间都有两两间的联系。一方面这个规模太大,近似于无穷。另一方面从信息的处理角度来说,也没有必要全连通。现代的神经网络算法有很多将神经元之间的连接作为稀疏矩阵来处理,也是类似的道理。不分层的系统在宏观上仍然有可能表达出清晰的层次。在微观上,直接连到输入输出上的神经元可称为第一层,这一层的神经元有可能连接到别的神经元,也有可能连接到本层,甚至有些神经元连接到自己上。
通过分层来理解世界是一个很有效的模型。世界是由一样的自然规律构成的,一方面很多相同的规律作用在了不同的物体上,另一方面,自然规律在不同层次上也有不同的表现。比如原子、纳米、更大尺度的物理,经典力学和量子力学都说明了不同层次上的规律的不同。
那么不分层到底有什么好处呢?有时候我们的知识虽然能解决问题了,但并没有掌握正确的层次关系,这时候就需要模糊的处理。另外,有些模式可以跨越层次共享,这样除了可以进一步节省空间,也能进一步发现规律。另外,对于同一个输入来说,一般不是所有的信息都能分出同样多的层数。比如视觉中处理轮廓、颜色、对比度的模式就很难用同样多的层数来处理。这时候,在初期分化出不同的处理模式后,它们各自的分层路径就有区别了。
很明显,一个不用分层的系统当然可以解决更复杂的问题,但不分层的系统还有很多问题需要研究,比如:
- 信号收敛
投入应用的神经网络都是能解决实际问题的,好的机器学习算法应该是能有效收敛的。这里的收敛有两方面,一方面,在可接受的训练时间内神经网络内的变化应该接近于稳定,另一方面,神经网络内的值不应都成为极值(无穷大、无穷小、或者全0,全1)。对于分层的算法,在建模的过程中有可能不收敛。由于层次的限制,如果某一层在训练中产生了振荡或者无法收敛,就说明这一层要么输入输出有问题,要么算法、参数有问题。换句话说,问题在这一层,别的层不需要改动。在定位了这一层之后,就可以试验各种变化来稳定输出。在不分层的结构中,如果产生了振荡,或者不收敛的情况,很难看出是哪里出了问题,应该如何修复。
人脑由于能量供给总量有限,很难产生大规模的振荡。人脑内进行的可以说都是化学反应,需要物质的转化,虽然有些过程是可逆的,反应过程是需要能量的,所以如果神经元响应太频繁,其能量消耗过多,就会减小其反应频率。这是生物学上的特点,这对神经网络的智能是促进还是削弱还很难知道。但从现在的神经网络研究来看,这些特性正好能解决信号振荡的问题。
这方面的研究有一个已有的方案:在小范围内选举出最活跃的神经元成为激活的神经元,从而在大规模上产生简化的特征值。这样,一方面能防止局部影响全局,另一方面,每次激活的神经元总数有限,就不容易产生振荡。
另外,还有两个方向,一种是确定总的能激活的神经元数量,比如10%。上面的小范围内选出活跃神经元是限制激活总数的一种方法。这个方案的挑战是如何确定这10%是有效的。另一种,每个神经元抑制自己的振荡,输出的不只是当前整合的结果还和历史输出值有关系。比如神经元可控制自己一定时间内的响应次数,如果一定时间内响应次数太多,则调整输出的阈值,以减少单位时间内响应次数。
- 训练方法
和信号收敛是类似的。在分层的系统中,要么是BP的误差往回一层层传播,要么是深度学习,一层一层的叠加训练。这两个方法看起来很不一样,都能有效的解决如何调整神经网络权重的问题。这两个方法的相同之处是其训练、调整是个往复交替过程,每个训练、调整的过程是相对独立的。虽然前面的训练结果产生的调整会影响后面的训练,但每次调整都一次到位。
在不分层的系统中,训练和调整可以是往复交替的,也可以是混合的。假设已经有了一个能够像人脑一样完全并行的系统。在第一个信号输入之后,会到达和其直接相连的一组神经元,这时候是第一级神经元。等第一级神经元完成计算后,有些信号会传播到下一级神经元,有些会还在第一级传播,还有些甚至会传播回自己。到第二个信号输入之后,有些第一个信号的信息还存在于第一级神经元中,这些第一级神经元会直接完成前后两个信号的整合。这一点对于时域的信号整合是非常有意义的。(关于时域上信号的整合,会有专门的讨论。)
最后讨论的问题是神经网络是如何生成的。在现代的神经网络算法中,网络都是开始估计一个初值,在不断地试验中,确定一个比较合适的规模。而生物的生长是从一个细胞开始分化的。人脑也并不是一下子产生了一个巨大的网络,在这个过程中,神经细胞应该也是很早就开始了不停的活动,DNA和人的生长过程共同决定了人脑的结构,而不仅仅是DNA。比如,小脑的形成可能是因为其处于身体和大脑之间,由于生长过程中感觉和运动神经末梢不停的刺激,才形成了其独特的结构。在大脑中,由于子宫环境比较简单,大脑能得到的信息单一,但也建立了基本输入输出的反射。所以,初生婴儿就能对声音和颜色有反应。随着出生后输入信息量的增多,婴儿开始一层层的构建模式,最后一步步产生了智能。由此,神经网络的层次及模式不是一开始就确定的,是根据输入、输出的信息来决定的。是一个一边训练,一边调整网络结构、层次的过程。当前设计的系统都是有目的性的,所以能够根据全局的目标函数来调整和训练模型。人类的智能的目的虽然还没有共识,但可以先认为人类智能是没有目的的。人类智能的产生是一个自适应的过程,而不是由全局的目标函数来训练的。仅依靠全局的信息,无法指导微观上每个部分的分化,网络的神经元分化和连接的调整都应该主要依赖于其局部信息。
---------------------------
http://www.cnblogs.com/squirrel_sc
1. 如有引用,请包含本段文字及原始出处。以表示对作者的尊重,且能将有相似想法的人联系起来。
2. 如无特殊说明,本文的文字代表作者的观点和想法。由于人类的记忆和连通性的限制,可能会将别人的观点和想法当成自己的(会尽量避免,但我读书少,别蒙我:D);或有人会有同样的想法(那就太好了)。若有此类情况,请联系我。我会很高兴更新内容。
3. 每篇文章会根据反馈或新的想法,随时更新。我会尽量记得更新版本号。