第 3 章 数学基础
机器学习理论是众多学科的交叉,在数学基础方面,应该补充哪些知识呢? 机器学习中涉及的数学课程比较多,要想一下子去穷尽所有课程显然也不现实,大可不必打好所有的数学基础再去学机器学习,最好的做法是当你对机器学习本身的理解达到一定瓶颈的时候,你可以补一补一些相关的数学基础之后再回去看机器学习的问题也许会更快的有所突破。
1、 统计学和概率论
统计学和概率论可以用于特征的可视化、数据预处理、特征变换、数据填补、降维、特征工程、模型评估等环节。以下是您需要熟悉的主题:
均值,中位数,众数,标准差/方差,相关系数,协方差矩阵;
概率分布(二项分布、泊松分布、正态分布),p值,贝叶斯定理(精度、召回率、阳性预测值、阴性预测值、混淆矩阵、ROC曲线);
中心极限定理,R2_score,MSE(均方误差),A / B测试,蒙特卡洛模拟…
2、 多变量微积分
大多数机器学习模型都是使用具有多个特征或预测变量的数据集构建的。因此,熟悉多变量演算对于建立机器学习模型非常重要。以下是您需要熟悉的主题:
多变量函数;
导数和梯度;
阶跃函数,Sigmoid函数,Logit函数,ReLU函数(整流线性单位函数,Rectified Linear Unit);
成本函数;
函数绘图;
函数的最小值和最大值…
3、 线性代数
线性代数是机器学习中最重要的数学技能。当数据集被表示为矩阵,线性代数则可用于数据预处理、数据转换、降维和模型评估。以下是您需要熟悉的主题:
向量;
向量的范数;
矩阵,转置矩阵,矩阵的逆,矩阵的行列式,矩阵的迹;
点积,特征值,特征向量…
4、 优化方法
大多数机器学习算法通过最小化目标函数来执行预测建模,因而机器学习必须应用于测试数据的权重才能获得预测标签。以下是您需要熟悉的主题:
成本函数/目标函数;
似然函数;
损失函数;
梯度下降算法及其变体(例如,随机梯度下降算法)
3.1 数学学习误区
机器学习从业者不需要过度的把时间精力放在数学上,这个观点来自我比较喜欢的一位机器学习领域的大牛——微调@知乎,这是他较早之前在回答“如何看待「机器学习不需要数学,很多算法封装好了,调个包就行」这种说法?”中的观点,我深表认同。
大部分机器学习从业者不需要过度的把时间精力放在数学上,而该用于熟悉不同算法的应用场景和掌握一些调参技巧。好的数学基础可以使你的模型简洁高效,但绝非必要的先决条件。
原因如下:
即使你有了一定的数学功底,还是不知道怎么调参或者进行优化。这话说的虽然有点自暴自弃,但扪心自问在座的各位,当你发现accuracy不好、loss很高、模型已经overfitting了,你唰唰唰列列公式玩玩矩阵就知道问题出在哪里了吗?不一定。诚然,懂得更多的统计原理可以帮助推测问题出在了哪里,你可能换了一个loss function或者加了新的regularizer,但结果不一定会更好:( 数学基础之于机器学习从业者很像debugger之于码农,它给了你方向,但不能保证你一定可以解决问题。那怎么能解决问题?只有经验经验经验,别无他法,有时候甚至靠的是直觉。数学基础是好的内功基础,但你调包调多了,其实也慢慢能抓到一些感觉,不必看不起“调包侠”。
工业界可以应用的模型是很有限的,可调的参数也是有限的。工业界选择模型非常看重可解释性,效率,以及和整个系统的整合能力。举例,在我的工作中,大部分时间都在使用Regression和Decision Tree相关的算法(如 Random Forests)。是因为这两个算法最好么?不,恰恰是因为这两个算法稳定及高效,而且容易解释。对于这样的模型,你即使数学能力很强,能调整的参数也是有限的。根据网上的例子和经验,大量的工程师可以在数学基础稍弱的情况下做到很好的效果。
数学/统计知识已经成了既得利益者刻意为外来者建立的一道壁垒。不知道大家有多少人是从事过ML研究的。我个人的观察是做出成绩的ML研究人员是有限的,科班出身的researcher更是远远无法工业界的空缺。所以大家没有必要担心会被转行者抢了饭碗,也没有必要刻意鼓吹一定要懂矩阵,凸优化,等数学知识才配做机器学习。大家都是出来卖的,不必互相为难。说来惭愧,在工作中我常常跟老板说这个人不能用,你要用我这种科班出身的人,但我内心是不赞同的。每当我看到知乎上有人问机器学习怎么入门,结果大家立马推荐第一本就看PRML和Statitical Learning以及一大堆公开课和数学课的时候,我的内心是崩溃的。各位答主的目标是把所有人都吓回去还是秀一下优越感?
理论模型和实际应用分的是两块不同的蛋糕。承接第2,3点,做理论研究的发力于突破,提出新的模型或者优化方法,做应用的致力于把模型应用于数据上,攫取商业价值。这两者不存在利益冲突,做理论的人有自带正统光环的优势,所以更该显得大度一些。只有“调包”的人越来越多,这个行业才会繁荣,因为证明技术落了地,可以带来实际价值。
行业的发展趋势是降低工具的使用难度,这让我们不必反复造轮子。亚马、逊谷歌、微软等各大平台都开放了他们的机器学习工具。以前人们还需要自己写各种模型,好一些的调一下sklearn,但现在Azure ML Studio已经方便到零代码了。年初的时候,我试了一下ML studio,简直方便的可怕,完全是图形拖动连接就可以建立模型,那一刻我仿似看到了自己即将失业。
文艺一点说,我们需要更包容的心态,切勿文人相轻。想要接触了解一门学科,应该先有兴趣,才有探索的积极性。就像我们第一次看到Hello word出现的样子,很多刚入行的人第一次看到机器学习能解决实际问题时,会产生浓厚的兴趣。
我怕的就是所谓的圈内人都说你必须要会矩阵分解,必须要会用trace算导数,必须会优化,才能开始学习机器学习。这个周期太长,很多人连开始的勇气都没有~我觉得不管怎么样,要先动手做起来,发现自己的不足,再去补充需要的东西。
既然学术是自由的,我们就打开大门,欢迎大家都进来坐坐。如果他/她不喜欢,欢迎到隔壁串门。但我们不要给自己家门垒了高高的台阶,说闲人勿进。久而久之,难免门可罗雀。
综上,我觉得应用机器学习模型和技巧既不能完全不懂数学,两眼一抹黑,也不该要求每个从业者都要精通各种数学理论。模型应用者要长存对理论的敬畏之心,不要总想搞个大新闻说“机器学习也不过如此”,但做理论的也不必觉得高人一等,别人都是二等公民。