首页 > 代码库 > 理解机器学习
理解机器学习
理解机器学习
0. 前言
当决定想写这篇文章,以对前段时间的学习做个总结,同时对自己的努力有所交代的时候,一个难题摆在了我的面前:人工智能的命题太大,我驾驭不了。而选择一个具体的题目,其容量又不足以表达作者的思路。这与我们设计网络、选择参数何其相似!
最终,我选择了
机器学习
这个不大不小的范围。题目也是增删数次,风格一变再变,最终还是定了这个严肃一点的。希望大家能够喜欢。
当提到机器学习的时候,我们必须要弄清楚几个问题:
希望学到什么?
用什么方法学?
学习的效果如何?
不能学得更好的原因是什么?
弄清楚了上述问题,我们就对机器学习的体系有了一个整体的概念,从而能够更深刻地理解相关问题。所以,上述几个问题,也划定了本文的基本框架。希望读者在读完本文之后,能够对机器学习有一些新的理解。
1. 学什么?
机器学习,目的是学习一组映射关系。
1.1 几个例子
前段时间大火的
AlphaGo
,增强学习(Reinforcement Learning) 在其中起着重要的作用。而增强学习的实质,就是学习状态空间
到动作空间
的映射。深度神经网络在近几年获得了巨大发展。特别是在语音识别、计算机视觉等领域,更是获得了巨大成功,一时风光无两。例如,CNN网络用于图像分类,其实质是学习
数字图像空间
到类别空间
的映射。支持向量机(SVM)所代表的统计学习方法,在2010年之前的20年间,一直是机器学习领域的主流。SVM所擅长的小样本分类问题,实质也是学习从
样本表示空间
到类别空间
的映射。回归问题,一维的回归是两个
一维实空间
之间的映射。
1.2 数学表示
- 映射是从数学引进的一个概念。用数学的语言表示如下。其中,
Ψ <script type="math/tex" id="MathJax-Element-67">\Psi</script>表示要学习的映射,I <script type="math/tex" id="MathJax-Element-68">I</script> 表示输入集合,O <script type="math/tex" id="MathJax-Element-69">O</script> 表示输出集合。
从这里可以清晰地看到,要素有三个,其中
Ψ <script type="math/tex" id="MathJax-Element-113">\Psi</script> 未知,是要学习的目标。而我们需要获得足够的已知信息
,并找到合适的方法,从已知信息拟合
出未知的映射。显然,我们能够获取的已知信息,包括
I <script type="math/tex" id="MathJax-Element-114">I</script> 和O <script type="math/tex" id="MathJax-Element-115">O</script>。不过,在很多时候,我们也能够通过各种方式,获得一些关于Ψ <script type="math/tex" id="MathJax-Element-116">\Psi</script> 的信息,这一点经常被人们所忽略。
可以说,机器学习的历史,就是这三个变量之间的一首协奏曲。而乐手就是我们自己。
2. 怎么学?
当我们所获取的
Ψ <script type="math/tex" id="MathJax-Element-136">\Psi</script>、I <script type="math/tex" id="MathJax-Element-137">I</script>、O <script type="math/tex" id="MathJax-Element-138">O</script> 的已知信息量不同时,往往意味着需要不同的学习手段去达到目标。
2.1 特征表示
特征表示理论,是与输入集合死磕的结晶。
难以描述的输入
:在机器学习领域中,输入集合中的元素,有可能十分复杂,以致于无法直接用计算机语言描述。即便能用计算机语言描述,根据信息论,一般也没有办法描述出全部的信息。抽取有用信息
:输入元素的信息,可能极为庞大,但有用的信息,只是其中一小部分。为了解决上述两个主要问题,机器学习理论中,专门独立出来一个分支,
特征表示
。科学家们将一个输入元素从不同的侧面加以描述,数量化,映射到一个实数空间中。每一个这样的描述,称为一个特征
。在
如何抽取有用特征
这个问题上,进展一直十分缓慢,基本都是人工。特别是高维度且维度间不独立的情况(比如图像),一直缺乏有效手段。直到卷积神经网络(CNN)方法提出后,这方面才有了一些进展。到深度学习兴起,这个方向才开始了大踏步前进。特征表示手段上的进步,也恰恰是深度学习
大招
之一。
2.2 数学表示的变化
- 经过特征表示后的数学表示如下。其中,
Λ <script type="math/tex" id="MathJax-Element-140">\Lambda</script> 是特征抽取的映射。
分化出一个映射有其好处。一方面,人的精力有限,这样可以缩小研究领域,各自独立演进。另一方面,在学习时,可以适当加入人类的智慧。
例如,在CNN深度学习中,特征抽取的网络设计,完全体现着人类的智慧。但参数则是通过训练学习出来的。在公共训练集上学习出来的参数(称为
模型
),由于其独立的特性,又可以供其它研究人员直接使用,从而节省了大量资源。视觉领域比较著名的模型有 AlexNet Model、VGG Model、GoogleNet Model、ResNet Model等。
2.3 学习的路数
每一种方法,都有它存在的意义。
当已知
I <script type="math/tex" id="MathJax-Element-199">I</script> 中的元素,但不知道对应的O <script type="math/tex" id="MathJax-Element-200">O</script> 中元素时,即对映射一无所知
,此时是无监督学习
。当已知一部分
I <script type="math/tex" id="MathJax-Element-201">I</script>和O <script type="math/tex" id="MathJax-Element-202">O</script>元素的对应关系时,即在一些点上知道映射的情况
,此时是监督学习
。如
已知映射在某点集上的情况
,如果点集足够大,则适用大样本学习技术,如深度学习。如果点集比较小,则适用小样本学习技术,如SVM。我们可以给
Ψ <script type="math/tex" id="MathJax-Element-203">\Psi</script>加入一些人类智慧
。比如限制函数的选择范围(SVM经常干的事儿),增加人为的假定(比如HMM中的马尔可夫性假设)等。
总之,每走一步,你都会发现一个不同的地方,于是你都有希望创造一种新的武器。十八般兵器,各有各的适用场景。
2.4 内力
如果说,各种实用学习技术是兵器,那么
计算能力
和信息收集能力
则是驱动这些武器的“内力”。
计算能力
主要由两套“秘籍”组成:以芯片为核心的“硬件神功” + 以算法为核心的“软件大法”。信息收集能力
则考验的是信息流动的速度和广度,互联网的兴起,给了这项能力以极大的助力。就像金庸小说里一样,内力真的很重要。所以吴恩达才说,计算是引擎,数据是燃料。硬件上现在是百花齐放的局面,各路厂商分别从不同的侧面向前挺进。有攻石墨烯的,有重新设计架构的,有玩FPGA的,有推GPU的,有搞生物芯片的……就在最近,MIT声称刚刚发明了一种能在手机上运行的深度学习芯片,速度是手机GPU的十倍以上。
在算法上,深度网络的兴起、数据量的不断增长,促使算法也在不断地革新。特别是最优化算法、用于特定任务的快速算法,能够以十倍百倍的级别提高计算效率。例如,新算法使得密集CRF现在能够有效地计算,这在以前是不可想象的;一个简单的快速计算
ex <script type="math/tex" id="MathJax-Element-205">e^x</script> 的算法,能够在这样的低层次提高十倍的效率。互联网的兴起,使得信息采集能力极大提升。一方面各个大型组织,近年来积累了数以PB计的数据量。另一方面,像ImageNet这种数据集,能够在短时间内得以建立,并且每年都在以不可思议的速度更新着。数据获取成本的降低,又极大推动了各项研究的进步。
3. 学得怎么样了?
我们的目标是星辰大海
我们已经在路上
我们仍然在路上
仅仅机器学习领域,作者就已经很难Hold住,更何况在各行各业各个角落的应用呢。本节,作者也只能是采取一斑窥全豹
的笔法,对现状做一个概览。
3.1 视觉
图像分类的正确率,已经超过人类(参见ResNet相关论文)。
人脸识别,已经在很多场合达到商用标准。近期加入了深度学习技术后,精度进一步提高。
物体检测方面,深度学习技术使得检测准确率从之前的50%左右,提高到了70%起。在特殊的场景,甚至能达到90%。
像素级语义分割,Facebook最新的论文展示,已经将精度做到了令人发指的程度。
视觉:在成熟的分类领域,机器已经超越人类。在更复杂的领域,机器正在接近人类。
3.2 语音
国内百度、讯飞等语音识别准确率,都号称已经达到95%这样的级别,并且正在向着99%进军。
智能手机现在如果不支持语音,都不好意思拿出来见人。这从一个侧面说明了语音识别的成熟度。
在语义理解、自动合成、自然语言处理等方面,也在飞速进步。但是作者在这些方面了解有限,就不遗笑大方了。
3.3 综合
Alpha Go 今年与李世石对弈,过程几近碾压。
谷歌无人驾驶汽车,实测了N长时间,才在前不久发生了一起大点的事故。事故率已经比人类低了。新加坡则刚刚又另一个无人车上路行驶。
无人机在军事领域应用已久,在民用上方兴未艾。
服务机器人市场呈不断增长态势。
深度学习技术,在医疗、基因、气象等很多领域不断开疆拓土,论文层出不穷,深刻改变着各行各业。
4. 未攻克的堡垒
当我们竭尽全力突破了眼前这一层黑幕,本以为大幕之后是渴望的天堂。然而,我们只发现了更广阔的未知世界。
4.1 哲学
在没有哲学的世界,能走多远,依赖于上帝怎样掷色子。
长久依赖,在这个领域中,无论是研究者,还是使用者,都倾向于实用主义。相对于理论,他们更倾向于有效果。以致于,我们当今使用的大多数理论,在30年前早已全部建立起来了。
对待理论尚且如此,更何况哲学?
但是,机器学习已经发展了半个世纪,在这么长的时间里,它在哲学上的建树屈指可数。我们当今在这个行业里的所有人,几乎都是在同一套哲学体系下教育出来的。
这是一种好的情况,好处在于能够集中力量突破。这也是一种坏的不能再坏的情况,因为系统的正确航向,完全依赖于这个系统的自我纠错能力。纠错能力一旦失效,系统将万劫不复。
甚至,在指导实践时,除了现在的这套方法论,还有没有其它的可能?这个问题几乎没人想过。反而是一些神经科学家,开始了一些类似的尝试,比如《Building Machines That Learn and Think Like People》这篇论文所表达出的思想。
4.2 硬件
新的时代,需要新的哲学;新的哲学,催生新的体系。
我想,任何时候,我们都需要更加高级的硬件。比如,石墨烯是否能够替代硅;比如,生物芯片是否真的可以提高能源使用效率。但是,我现在想说的是,可能这些都不是现在要考虑的重点。
当前我们需要考虑的重点,应该是实现智能我们需要什么样的架构?
。在此基础上,我们的硬件才有可能出现重大的突破。否则,变换材料也好,平面变立体也罢,都只是水到渠成的自然而然地发展,算不得什么大不了的事儿。
当年,冯诺伊曼提出了现代计算机体系的基本架构,给计算机的发展奠定了基础。体系体现的是哲学,这本质上是一种特定的哲学在一个特定的时代的胜利。
但是,现在,时代已经前进了。新的时代,需要新的体系。
在未来一段时期内,可编程硬件和特定任务专用硬件(如GPU)可能仍然会占据主流位置,因为我们最新的机器学习技术框架远没有到稳定的程度。在可见范围内能够稳定的,仍然只有向量计算和神经网络方法。
在向量计算方面,Novida代表的GPU厂商和Google代表的字眼TPU在未来一段时间内预计会加强其主流的位置。在可编程方面还没有冒出很牛的厂商,但最终模块化的趋势是可见的。
4.3 算法
理论上的问题都已经被数学家研究光了,我们只需要从他们的库房里找来合适的锤子。
当今机器学习最火的分支是深度学习,而深度深度神经网络最大的未解决问题
是局部极值问题
。
在这个方面,深度学习大神Bengio已经开始了一些有益探索。最新论文《Mollifying Networks》引入了最优化理论中的平滑延拓法,结合模拟退火算法,求神经网络的全局极值。
其实对于全局优化来说,可行的路径无非是两个。一是用随机方法,二是使用平滑法,用上下界函数或者平滑函数来替代目标函数。Bengio这篇文章,就是将二者结合使用的例子。
其实,另外一种可能更好的办法,是像SVM一样,通过理论推导,得到一个凸的上界函数,上界函数能够有效逼近全局极值点。但这个路线需要理论上的进一步完善,而理论恰恰是神经网络方法所欠缺的。
5. 结语
回头一看,居然已经写了这么许多。
要写的东西很多,范围很广,而作者能力有限,所以有些地方不免流于表面和务虚。对于不太了解机器学习的读者,可能收获是有限的。
然而,本文的目标,正是给出这样一个务虚的概览。有了概览,才能看清方向。本文的写作过程,也是作者不断总结、不断系统思考的一个过程。借助写作,文中的不少观点都是作者之前没有意识到,也没有总结出的。
不过,作者认为,这些意外到来的不速之客
,恰恰是真知灼见所在,也恰恰是本文价值所在。如果读者能够从本文获得一二启发,或赞同,或思考,则作者幸甚。
理解机器学习