在大数据年代,各种机器学习算法的应用也日渐广泛。虽然在实际生产中只要调用各种成熟的算法库即可解决机器学习问题,但我们也需要对这些算法有概念上的了解。小编在这里就逐渐为大家带来各种经典算法的快速入门,希望大家有所收获。
神经网络是一个非常古老的传说。
自从40年代初心理学家 W.W.Mcculloch 和梳理逻辑家 W.Pitts 提出 M-P 模型以来,大家对其研究可谓是一波三折,跌宕起伏。神经网络不断地从「看好」到「被打击,到「被冷落」,再到「被看好」中循环。
以下列举了一些主要的神经网络发展的里程碑:
在学术界,神经网络作为一种以仿生模型开始建立的智能算法,一直有着较大的争议。
首先,不像 SVM 等经典算法,其本源上并没有一个清晰的数学模型;其次自从 1969 年 M.Minsky 提出单层甚至多层神经网络的感知能力有限后,人们对其有效性产生了很大的怀疑;再者,虽然神经网络模型比较容易理解,但是对其的训练却是 NP-Hard 问题,在实际应用中缺少了很多可行性。
当然,单纯地说神经网络只是人们对大脑探索的一个美好的梦不免过于偏颇;事实上,在解决很多复杂问题时神经网络一直有着很好的应用。
那么什么是复杂问题呢?
相对计算机而言,高难度的数值计算,方程求解是相对容易的问题;而连 1 岁小朋友都可以轻易做到的识别图片中的某一个物体,对传统计算机算法而言却是十分难。
对于那些「感性」,「模糊」,「定义不清」等不需要唯一精确结论的问题,绝大多数传统的算法都无能为力。
神经网络往往这在里大放异彩。
这种「复杂」的问题如果非要用数学来表示的话,那往往需要将问题所关心的对象投射到一个个非常高维度的向量之中(比如一张 n*m 大小的彩色图片,会被投射到 n*m 维度的向量,而每个像素的颜色则表示成每维向量的值),然后「模糊」地找出这些向量之间的关系或者是向量的特征。
对于经典的基于「图灵机」的算法而言,在如此庞大的问题空间中搜索,需要耗费的时间难以想象;而大脑这个大自然创造的「超大规模并行」神经网络,却往往可以在瞬间得到答案。
说了一堆玄乎的道理,下面小编就来列举一些情况,帮助判断何时应当使用神经网络,何时有应该考虑其他方法。
首先我们先来看一下不该使用的情况:
接着,我们再来看一些神经网络也许比较适合的场景:
具体的应用场景来看,神经网络包括:分类,类聚,回归,异常识别,关联挖掘,特征学习等.
那么,那么机器人是否可以用一个神经网络来实现呢(模拟大脑)?
小编的答案是:你想多了。
当前的神经网络还无法单独撑起整个机器人的复杂功能。绝大多数的技能都是由人类对场景模式预编程的结果。包括你熟悉的 Siri,Cotana 等。当然,机器人在处理具体事务的时候,必然会借助神经网络来解决一些模式识别问题。
这是一个非常有争议的话题,在历史中已经被无数人折腾过了。小编在这里仅仅列一些已被绝大多数人接受的观点。
神经网络和 SVM 在智能算法发展史中代表着两个派别的泰斗级选手。现在绝大多数市面上所能看到的图像识别,行为预测,主题分类等领域的应用,无不是他们俩的身影。
二者在模型上的差异也是显而易见的:神经网络以仿生学起家,模型并非天然图灵机,而 SVM 则一出生便有着精确的数学模型。
正因如此,传统神经网络对比于 SVM 的一个最大的缺点便是它往往不易得到全局的最优解,而且在很多情况下其容易被不精确的训练数据给迷惑,也就是 Overfitting。其实这一点并不难理解,人类大脑也是非常容易被局部最优所误导。
SVM 天生不具备这些问题,而且由于其模型也更加适合图灵机表示,所以大多数情况下,SVM 的计算速度会快于神经网络。但 SVM 也有一些缺陷,比如 SVM 一般只适合做二元分类(元分类的 SVM 复杂度将会大大提高),而且我们必须人为地根据应用场景选择特定的 Kernel 函数。这点上说,神经网络并不需要人为其对数据经行分类降维选 Kernel 等操作,实为更加智能一些。
当然,也有研究指出,其实神经网络和 SVM 是互相等价的。比如,线性(Kernel) SVM 和单层的神经网络是等价的,而多层的神经网络又和 SVM 森林是等价的。