做机器学习的都知道贝叶斯吧,但如果让你对贝叶斯的本质做个阐述,将贝叶斯应用在生活的各种场景解释上,能够将其蕴含的道理浅显易懂的解释给家人听,你也许会感觉到有点困难。
也许一般建模人员只能列出那个公式,然后说如何了利用这个公式成功预测了垃圾邮件。
这是笔者一直在思考的问题,企业培养的数据建模师在掌握了一些基本的语言和工具后,到底应该如何学习才能更进一步,其核心能力到底是什么?
如果仅仅说会用SPSS、R或Python等的算法库来做模型的训练,那对于任何一个掌握了基本IT技能的工程师,其可以在很短的时间学会使用这些算法。
随着各种机器学习平台的引擎流行,一般的算法就如水电煤一样会成为IT的基础设施,对于这些算法的使用门槛会极大降低,即使诸如CNN、RNN、LSTM这些深度学习算法也不会例外。
可以这么讲,随着人工智能时代的到来,对于常规算法的应用能力已经很难成为建模人员的核心竞争力了。
大数据有个理论说仅需要关注相关关系,而不强调因果关系,这让实用主义者非常高兴,的确在工程上你熟练的应用某个算法创造的效益也许比一个算法大师差不了多少,但这仅仅是眼前利益,随着时间的流逝,两者的差距会越来越大。
虽然建模人员大多没有成为算法大师,事实上很多建模人员会走向分析、业务和管理岗位,这个时候,工具和语言等形式化的东西是次要的,而数据建模从数据中发现知识的思维过程却是非常重要,这显然能跨越专业的限制,但一般来讲,企业的数据建模师并不比其它岗位的人思考的逻辑更为严密。
为什么?
这跟数据建模师的学习方式有关,也是我读了刘未鹏《暗时间》得到的启发,特此分享于你。
目前几乎所有的算法书的讲解方式都是欧几里德式的、瀑布式的、自上而下的、每一个推导步骤都是精准制导直接面向目标的,由因到果,定义、引理、定理、证明一样不少,井井有条一丝不乱毫无赘肉,而实际上,这完全把人类大脑创造发明的步骤给反过来了,看起来是阳关大道,实际上车马不通。
而对建模师来说,这就等于直接告诉你答案与做法了,然后让你去验证这个答案与做法是可行的,而关于答案与做法到底是怎么来的,从问题到答案之间经历了怎样的思维过程,却鲜有书能够很好的阐释。
笔者发现每每需要寻找对一个算法的解释的时候,翻开这些书,总是直接就看到关于算法逻辑的描述,却看不到整个算法的诞生过程背后的思想,比如笔者非常纠结于诸如贝叶斯、逻辑回归、主成分分析、强化学习的通俗化解释,作为讲师,我一直想透彻的表达清楚这些东西,但发现完全不行。
当然不是说诸如《数据挖掘导论》、《深度学习》、《机器学习》这类书没有价值,作为知识性的参考书籍,它们将知识整理出系统结构,极大的便利了知识的掌握,我完全不否认这些著作的价值,我自己也在通过阅读它们来学习算法,并且有很多收获。
我只是觉得,无论在建模的实践中还是学习中,如果仅知道直接的结果,并不能让一个数据建模师能达到很高的高度,他们总是机械的去调用那几个算法函数,然后评估一下,或者多搞几个算法横向比较下,无它。
贝叶斯这个基于观察事实逐步确立信念的过程,其中的思想通过P(A/B)=P(B/A).P(A)/P(B)这个公式显然是无法其义自现的,笔者曾经背过这个公式很多次,但不用就又忘了,然后重新背,如果让我去跟不懂的人讲这个算法原理,笔者相信也是讲不清楚的,即使你会用它。
笔者能体会到在实践中数据建模师的确在成长,但更多是业务、数据或流程上的,很多伟大算法的思想对于他们的影响微乎其微,号称是数据建模师,但对于现成模型的思想形成过程知之甚少,根本无法在工作、生活中自然的去应用它们,这是非常可惜的。
看了很多书,惊叹于寥寥数行精美绝伦的算法,然后仰天长叹自己想不出来,为什么想不出来,因为你不知道那短短数行算法背后经历的是怎样漫长的思考过程,如果问题求解是一部侦探小说,那么算法只是结局而已,而思考过程才是情节,而牛人的思维过程往往更为重要。
在不知其所以然的情况下,算法只是一堆离散的机械步骤,缺少背后的思想的支撑,这些步骤之间就没有一个本质层面上的关联(先知亚里士多德早就指出:学习即联接),所以就跟背历史书也没多大区别,然而知道了算法是怎样一步步被推导出来的,就理解了算法背后的思想,而记背后的思想,却有助于解决一类问题,思想所处的抽象层面往往比到处都是实现细节的算法本身要低,越是低的抽象层次,越是本质,涵盖范围越是广泛,算法诞生过程中的思路往往包含了比实际算法更本质得多的知识。
实际算法乃至算法的某个特定语言的实现包含了太多表面的不相干知识,它们会阻碍对本质的理解。
我们知道了what和how,但不知道why,决定了我们往往只能简单应用算法,而无法进行改良和创新,我们甚至不知道大多数算法的优缺点,导致一碰到问题就轮询所有算法,然后选择效果最好的那个,所谓不求甚解就是这样吧,短期来讲的确解决了问题,但长期来讲自己却没有获得成长,无论是算法上的,还是思想训练上的。
因此,笔者建议数据建模师在学习和实践中,除了应用,更应该深入理解一个算法的来龙去脉前因后果。
从一个算法中领悟尽量深刻的东西,需要做到三件事情,一是寻找该算法的原始出处,比如了解贝叶斯是怎么想到这个算法的,笔者后续考虑写出来,二是网上或书本中去找找牛人的解释,比如笔者在吴军的《数据之美》、刘未鹏的《暗时间》及万维钢的《智识分子》中都了解到了贝叶斯一些更本质的东西,好过纯粹的看一些算法书,三就是自己揣摩,能够把它写出来,讲出来。
只有采用这种学习方式,对于算法的理解才是持久的,所谓触类旁通者,其实便是因为他擅长去理解算法背后的更具一般性的东西,因此看到美妙的证明和解法一定要去一遍又一遍的去反复揣摩,试图理解想出这个人到底是怎么想出来的,有没有什么一般性的方法可循,很多时候,在这样揣摩的过程中,你会理解到更深刻的东西,对问题性质更深刻的认识,对解决问题的思路更深刻的认识,这些认识不仅对于你理解当前算法有极大的帮助,同时也有助于你解决以后会遇到的表面不同但本质一样的问题。
现在大数据很火,很多学校都开了大数据和数据挖掘的相关课程,笔者觉得对于经典的算法,学生不仅要能自己推导,更要能理解算法背后的思想,这才是永恒的,不会随着语言和工具的更新而淘汰,不能总奢望使用最新的工具和语言。
如果你已是职场上的建模师,虽然可能没必要自己去把每个算法过程都推导一遍,但如果希望能上一个层次,就有必要知其所以然,能回答诸如为什么这个算法用在这个场景合适的复杂问题,在企业IT中大家都知道架构师的巨大价值,在数据建模领域,也同样需要。
事实上,知其所以然是我们干成事,干好事,能够触类旁通的一般原则,当算法的黑箱子问题越加严重的时候,我们越要多问一个为什么。
领取专属 10元无门槛券
私享最新 技术干货