2015-12-07
自从40年代初心理学家 W.W.Mcculloch 和梳理逻辑家 W.Pitts 提出 M-P 模型以来,大家对其研究可谓是一波三折,跌宕起伏。神经网络不断地从「看好」到「被打击,到「被冷落」,再到「被看好」中循环。
以下列举了一些主要的神经网络发展的里程碑:
1957年,Rosenblatt 第一次建立神经网络感知模型。
1960年,B.Windrow 提出自适应线性单元,可用于自适应滤波,预测等。
1969年,M.Minsky 证明单层,甚至多层的神经网络感知能力有限,单层网络甚至不能解决抑或问题。
1982年,J.J.Hopfield 提出 hopfield 网络模型,首次引入网络能量。
1984年,Hinton 等人将模拟退火算法引入到神经网络中,提出了 Boltzmann 机网络模型。
1986年,D.E.Rumelhart 和 J.LMcclelland 提出了著名的 Backword-Propagation 算法。
1987年,R.Hecht – Nielsen 提出了对向传播神经网。
1992年,Holland 用模拟生物进化的方式提出了遗传算法, 用来求解复杂优化问题。
1995年,Mitra 结合模糊逻辑理论,概率论建立了模糊神经网络。
2006年,Hinton 等人提出深度学习,从此揭开了全新的一个篇章。
在学术界,神经网络作为一种以仿生模型开始建立的智能算法,一直有着较大的争议。
首先,不像 SVM 等经典算法,其本源上并没有一个清晰的数学模型;其次自从 1969 年 M.Minsky 提出单层甚至多层神经网络的感知能力有限后,人们对其有效性产生了很大的怀疑;再者,虽然神经网络模型比较容易理解,但是对其的训练却是 NP-Hard 问题,在实际应用中缺少了很多可行性。很好的应用。
复杂问题
那么什么是复杂问题呢?
相对计算机而言,高难度的数值计算,方程求解是相对容易的问题;而连 1 岁小朋友都可以轻易做到的识别图片中的某一个物体,对传统计算机算法而言却是十分难。
对于那些「感性」,「模糊」,「定义不清」等不需要唯一精确结论的问题,绝大多数传统的算法都无能为力。
神经网络往往这在里大放异彩。
这种「复杂」的问题如果非要用数学来表示的话,那往往需要将问题所关心的对象投射到一个个非常高维度的向量之中(比如一张 n*m 大小的彩色图片,会被投射到 n*m 维度的向量,而每个像素的颜色则表示成每维向量的值),然后「模糊」地找出这些向量之间的关系或者是向量的特征。
对于经典的基于「图灵机」的算法而言,在如此庞大的问题空间中搜索,需要耗费的时间难以想象;而大脑这个大自然创造的「超大规模并行」神经网络,却往往可以在瞬间得到答案。
应用场景
说了一堆玄乎的道理,下面小编就来列举一些情况,帮助判断何时应当使用神经网络,何时有应该考虑其他方法。
首先我们先来看一下不该使用的情况:
对于通过公式,步骤,状态机等描述的问题,应该考虑使用传统方法解决;
对于问题答案都是很有限的问题,应该考虑通过查表解决;
对于能通过专有硬件来解决的问题(比如真随机数生成等);
你尝试要解决的问题会不断地向你无法预料的方向发展「进化」,因为某个类型的神经网络一般只擅长解决一类问题,不断发展的问题无法通过单一神经网络解决;
对指定问题你如果不能十分容易地产生大量的输入输出数据,那神经网络将很难被训练成;
对于那些要求精确解答的问题;
接着,我们再来看一些神经网络也许比较适合的场景:
手中有着大量的被标记过的数据,但是你却对这些数据及其标记的逻辑关系无从下手;
问题内部的约束或条件非常非常复杂(难以用常规方法表示),但你有能通过人类的直觉感到问题应该容易解决;
对问题的答案没有精确要求,而且可以随着时间的改变做小范围的波动。
具体的应用场景来看,神经网络包括:分类,类聚,回归,异常识别,关联挖掘,特征学习等.
那么,那么机器人是否可以用一个神经网络来实现呢(模拟大脑)?
答案是:你想多了。
当前的神经网络还无法单独撑起整个机器人的复杂功能。绝大多数的技能都是由人类对场景模式预编程的结果。包括你熟悉的 Siri,Cotana 等。当然,机器人在处理具体事务的时候,必然会借助神经网络来解决一些模式识别问题。