数学和计算机科学、机器学习

作者:小华


上个学期选修了数学学院的两门课:《组合最优化》和《NP复杂性与近似算法》,因此认识了一些数院的同学,通过他们了解到了一些他们对计算机/机器学习的看法。

感受最深的一点是:学数学的同学更注重理论的完备性和逻辑链的完整性,即对于在分析过程中出现的任何一些命题,都要能证明它是正确的还是错误的,而往往不怎么重视算法和数据结构的设计与实现,以及算法复杂度的分析(大多数数院的学生往往到研究生才会接触算法与数据结构,而且往往是作为选修,很少会去编程实现某个算法);相反,学计算机的同学则对证明的过程不够重视,喜欢从直觉上去分析一个算法的正确性,而更重视数据结构的设计和编程实现。因为通常要证明一个算法的正确性往往是比较困难的,有时需要较深的数学功底(比如,证明算法正确性最基本的方法——循环不变式,就是类似于数学归纳法的一种证明技巧)。

上面提到的这个现象,我想一个重要的原因也易于分析。毕竟术业有专攻,很少有人能同时精通数学和算法设计。各自有自己重视的层面

但是往往学科发展都会出现交叉,学科之间的许多道理都是相通的,学科之间也有相互依附、相互促进的作用。计算机、数据结构、算法的发展为数学提供了许多新的研究方向,比如计算复杂性理论、近似算法等等;而数学的发展又为计算机和工程实践奠定理论基础。比如,算法设计的一种常用思想「贪心算法」,在数学中就有与之对应的理论「拟阵」,而且该理论还正处于发展和完善的过程中);再比如,图论中著名的计算最短路径的Dijkstra算法和网络最大流/最小割的Ford-Fulkerson算法,都可以用线性规划中的对偶单纯形理论推导出来并证明其正确性(但是Dijkstra, Ford和Fulkerson前辈在发明这些算法时应该不是从线性规划的角度去设计与证明的)。而组合优化理论又催生了运筹学,你说,它到底是数学呢,还是计算机呢,还是管理科学呢?

数学和计算机科学就像一对情侣一样,相濡以沫,不离不弃。

如果说统计也属于数学,那么其实我们现在接触到的很多机器学习算法,早在若干年前(具体是多少年前我就不清楚了,至少比「机器学习」这个名词出现在人们视野中的时间早得多)就出现在了统计理论中。在学习「机器学习」这门课之前,我还想着「啊,机器怎么学习?像我们人一样吗,那可真是有意思,多么高精尖的技术啊,不知道我能不能学懂呢…」但是开始接触以后,慢慢发现,它其实就是基于统计和数学优化的一门科学,只不过不像数学看着那么「纯粹」,它的实用性非常强,可以有效地解决现实生活中的很多问题,倒不如说是「数学建模」更适宜些。

机器学习最常用的几个功能是:对现实世界的事物进行分类或者对事物的发展进行预测,而这些自然的目的「分类」和「预测」等等,最后都能归结为对一个或多个复杂函数的极值优化问题(比如最大熵模型、隐马尔科夫模型、条件随机场),于是到这个时候,数学就可以发挥作用了,许多经典的数学优化理论都可以在这个阶段派上用场。但是,亦有许多的优化问题在这一阶段是传统的优化理论所无能为力的,因为这些复杂函数的未知参数的数量常常会达到成百上千的量级(所谓「学习」,就是通过算法去对这些参数进行估计),解决如此高维的函数极值问题是非常困难的。于是又有许多新的理论诞生了,比如「支持向量机」(SVM)理论,其中的精髓「核函数」就是非常重要的思想。再比如,换个思路,不从函数优化的角度,而考虑现实世界数据的语义特性,从知识表示的角度分析,「决策树」就属于这类方法。

我的「机器学习」的任课教师似乎对数学系的同事们有些偏见。常常在课上调侃数学系的一些老师,说那些老师找到他想做和大数据有关的项目,因为现在这个很热。他很郁闷,说「什么是大数据,计算机科学研究的就是大数据呀,一直都是…」。而他也常常会在课堂上发表言论,指出数学的最优化理论在实际应用中基本没什么用,因为「能解决的问题太少了」「现在性能最好的机器学习算法很多都不是来自于最优化理论」。

这另一个原因你大概也看出来了吧:对对方学科的不了解(尊重),交流得不够。(一部分)学数学的认为自己是在和上帝对话,容不得半点噪音和不美丽的东西;(一部分)搞计算机、机器学习的认为那些做纯理论的都在整些没用的东西,虚无缥缈,解决不了实际问题。好像两个有着各自颇为自豪的研究领域的知识分子一样,见了面不是心平气和地切磋讨论交流思想,而是互相报以偏见,认为对方的研究没有「价值」。正所谓「本是同根生,相煎何太急」。

如果说数学是纯粹的,是一个在理想的、美丽的、毫无污秽和噪声的世界中尽情徜徉的孩子——永远有无尽的宝藏和美妙的梦想等着他去发掘;那么机器学习就可以被视为是在理想和现实之间纠结、徘徊与奋进的少年,有伟大的理想作为后盾和指路明灯,也有现实的复杂不断考验和洗涤着心灵。

-----EOF-----

Categories: 科研 Tags: 数学 计算机科学 机器学习