要学很多数学吗 - 给要入行机器学习的朋友们的建议
记得几年前,刚被安排到机器学习团队,我问组长,机器学习,要学很多数学吗?记得他是这么回答,其实我们都是用各种库,并不是需要深度的掌握后面的数学原理。
过去几个月面试了很多来应聘机器学习工程师的小伙子,各种库使用起来非常麻溜,但是如果叫他们亲自计算个东西,没有几个能正确的算出来,比如说最简单的准确度precision,并不是每个人能够第一时间把公式写出来。我们组长的回答,可能非常准确的反应了大部分机器学习工程师的现状,各种名词熟练挂在嘴边,库使用也非常熟练,但并没有真正理解含义。这样可行吗?如果不可行,那数学要学到什么程度?
可行不可行,从团队角度来说,要看对机器学习的ambition,公司产品对机器学习的期望值。如果只是搞个噱头,预测一些不痛不痒的东西,的确不需要去深度研究,大部分的活只是需要按规范处理数据,喂入开源模型,是驴是马,就这样了,不管了。对个人来说,如果不是需求驱动,主动去研究背后枯燥数学原理的,恐怕不是那么多。但是如果真的要把机器学习做好,把每个百分点的提高都当作是大事件的话,显然知其然不知所以然是不够的,必须对模型动刀子(我同事喜欢说model surgery,我觉得挺生动的),这样子,如果不懂背后的原理,恐怕会无从下手。
这几天闲着没事,真的认真思考了一下,根据自己的经历,作为一名机器学习工程师,真的要学很多数学吗,如果给要入行的朋友做建议的话应该会怎么建议呢。想出了几个方面的数学,建议必须考虑学习或复习:
数学建模。我觉得揭开机器学习神秘面纱的第一步就是数学建模。机器学习的特征工程我觉得就是基于数学建模的。大部分模型的训练过程都是解方程,而数学建模要做的是怎么把实际问题用方程表示出来。最简单的例子,预测房价,首先就得把和房价相关的因素都罗列出来,然后再用数值来表达各个因素,有的因素可以直接用数值来表达,比如说面积。但有的就不可以,比如说地理位置,我们就需要找出合适的数值对应。因为数字本身是有意义的,可以说大小是相关的,对于某些因素,当转化为数值的时候必须去相关。这里就有很多数学问题需要去理解。总的目的就是建立一个反应真实问题的数学模型。
统计学。在训练模型之前,分析数据是不可少的。比如说房价这个例子,在分析报表中,你可能必须给出各个因素的分布,分为数,中位数等等。有时候你还需要去除奇点(outlier)。你可能还需要分析不同因素之前的相关性。当模型训练出来后,它的结果是如何的呢。比如说当你present你模型分数的时候,你很可能会被问到,你测试集怎么来的,如果是普通采样来的,那就可能被问到你采样了几次啊,均值多少,方差多少,这个质量提高是不是statistics significant啊。统计学在数学中属于比较深奥的学科,真正学懂,真的必须有很大的耐心和毅力,特别是如果走出校门多年,且期间并没用过数学的。有信心的同学,建议复习完基本的统计学原理后,挑战一下贝叶斯模型。
线性代数。大部分学过线性代数和矩阵论的同学都还是比较有后怕的。好的是在机器学习工程师的日常工作中,并不需要掌握深奥的矩阵操作。矩阵分解,求置啥并没用到过,至少我没碰到过。但是如何矩阵相乘,扩展等是做model surgery的必备技能。在机器学习当中,因为计算量非常大,所以在做循环计算的时候,必须考虑到用矩阵来操作,叫做vectorization,中文应该是称为向量化。向量化后在计算性能上会大大提升,有些模型转化甚至不支持循环。如果不太清楚线性代数要掌握到什么程度的话,建议可以玩玩python的numpy库。又要建议同学们上上吴恩达的机器学习课,里面的assignment基本上覆盖了难度需求。
数学的等价概念。不太清楚属于数学的哪个学科。我这里要说的等价概念不是传统的等价类,而是说如果求某个复杂公式的最大值可以等于求某个简化公式的最大值。比如说最经典的f(x)的最大值和log(f(x))对大值,求解让f(x)得到最大值的x,这个问题是不是等价于求log(f(x))。这种等价式会大大降低模型的难度。有些简单的容易找到,复杂的等价式,真的需要深奥的数学理论做基础。记得一个做机器学习的博士朋友提到过,他们和数学系的博士生的差距就是,数学系的大神们总能够轻松的等价来等价去。
暂时想到这么多。希望对要入行的朋友有所帮助。
更多即时原创更新,关注微信公众号:
作者简介:
Dagis: 现居住在瑞典,某AI公司的Data Scientist, 学习通信出身,喜欢数学,更喜欢把数学用于实际。