再谈谈数学

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/7881317.html 

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

  在一个很老的群里聊天,群里就那么二十几个人,都是搞这行的,在网上认识了十几年。一人是某大型电子地图公司出来的,说,”地图里面人工智能不就是用初中的概率论搞起来的,谁拿到数据谁都可以搞定“……初中的概率论,听到觉得真的非常的刺耳,于是就在群里争了几句。

  回头来想想,在信息技术领域里,难道数学真的变成了这么低的门槛的东西?再或许,我真的是out了,这些年的执着变得分文不值?可能是因为自己有些偏执,想起以前的时候学习计算机,虽然专业并不是计算机,但依然是一板一眼,一上来是从c语言汇编语言这样的语言开始搞起,数据结构、编译原理、操作系统原理、数据库原理、计算机原理等,过程中潜意识中意识到数学的作用,仿佛所有的计算机知识都可以被形式化。

  准确的说,计算机应该属于工科的东西,有很多工程的性质。如同别的工科工程一样,很多时候因为一些具体业务的需求会有一些用到初等数学的小窍门。打个比方,从时间0开始,两个任务,一个3分钟执行一次,一个5分钟执行一次,那么两个在那些分钟点上,两个任务都执行?如果是三个任务呢?于是突然有一天来了更复杂的问题,已知a,b互质数,找一个c,使得ac除以b余1,结果可能就不会做了。那么,为什么不稍微系统的学一下数论呢?设计算法的时候,可能设计了一个频繁使用的平均复杂度为O(logn)的算法,感觉很满意,可是运行的好好的,突然程序运行偶尔会很不顺畅,原来该算法的最高时间复杂度是O(n)。那么,为什么不系统的学学复杂度的计算呢?感到最烦的就是某些可能是初学者,会问为什么什么什么算法没有什么什么语言的描述之类的问题。我们学习算法学习的是神,而不是型,你学得算法的内涵之后,应该很容易就可以用你熟悉的语法写出来,可是很多人不明白这一点。

  机器学习里最简单的KNN算法,每个学习过的人真的认真去想过吗?KNN的每个维度如何做到公平这个问题,如果书本或者别人不告诉你的情况下,你自己是否会想到如何变的公平?直方图的意义在什么地方?归一化呢?KNN是很简单,可是你会不会想到如何在很多很多的样本中,尽量快速的找到前k个最近的值?我相信,很多人没有想过,乃至书上不会说自己也就永远不会去想。当然,我们的库、我们的工具可能很多地方是很好,让你不用去思考某些细节。所以,我们的研发很多时候只是在那里调节一些老外的参数而已,却很少想着去真正理解它,然后再此基础上改进甚至否定。

  工程两个字很多时候给人一些误解,认为对于某些问题我们只要反复的去试就行了,可实际上是,如果有深入的理论指导,很可能事半功倍,何止事半功倍。有时候想,是什么让人浮躁,是我们的收入使然,还是千变万化而又快速取代的信息技术?或许一切都不是原罪,而只有自己的心。

  我一向觉得,数学很重要,我们的软件工程师大多数数学学的太少,即便有的学了一些,可是依然不想着得其髓。再回到之前的概率论,搞AI的确是需要概率论这样的数学基础的,但是概率论真的很容易吗?我看不见得,当年我们学的时候,感觉是很难的,那一大堆的证明很头疼啊,比如有多少种极限的方式可以得到正太分布?甚至于建立概率空间的Sigma代数都不是那么平易近人。当然,你会反驳,我们是工程师,我们只需要知道怎么使用嘛那么复杂的概率论底层我们凭什么要深入了解。是的,我们甚至可能只需要知道条件概率怎么算,知道贝叶斯公式就OK了。可是,永远不要忘了,如果你站在更高的地方,你的思路会变得更广阔。所有上了大学接触到高等数学的学生可能都不会再觉得高中数学过于困难,那就是因为你上到了一个新的台阶。不需要每个人都像数学系那样深度的去学数学,可是,还是需要深入的想一想。

  我还是建议每个人从数学的角度去看看编译原理,或许可以看到一个不一样的世界,我也希望每个人都可以尝试着用lisp去勾画,好好理解理解lisp的思想,如果所有都是为了实用而实用,思想会禁锢。

  一直遇到一些浮躁的刚毕业大学生,甚至工作了有一定年份的人也有类似的想法。但我的思维可能还是那么古板,也许真是我多想了,不是人们浮躁了,而是世界变的快。

原文地址:https://www.cnblogs.com/Colin-Cai/p/7881317.html