机器学习中所需要的数学知识介绍

电子说

1.2w人已加入

描述

编者按:Vincent Chen是斯坦福大学计算机科学专业的学生,同时也是斯坦福AI研究室的一名研究助理。本文他给我们带来了在机器学习中所需要的数学知识介绍。以下是论智对原文的编译。

很多没有良好数学基础或统计学的同学们总会问,到底什么样的数学水平才能入门机器学习?目前还没有确切的答案。

在这篇文章中,我会列出在进行机器学习产品搭建或学术研究时所需要的数学背景知识。这些都是我在与机器学习工程师、研究者、教授的谈话中以及自己的经验中总结出的。

为了构建数学的准备知识,首先我会提出与传统课堂不同的思维模式和学习方法。接着,我会大致叙述在机器学习领域不同类型所需要的具体背景知识,大致涵盖了高中的统计学和微积分,到最近的概率图形模型(PGM)。最后,我希望你能找到自己所在领域所需要的数学知识。希望这篇文章对你有用!

关于被数学支配的恐惧

数学可以说是很多人的噩梦,包括工程师们。在开始之前,我想谈谈那些“数学好的人”到底有什么秘诀。

实际上,数学好的人只是有很多练习的机会而已,他们习惯了在研究数学的过程中遇到困难。最近的一项研究表明,与天生的能力相比,思维方式才是能否学好数学的重要因素。

但是,想达到上述境界仍需要花点时间和努力,这并不是与生俱来的能力。

开始上手

首先,作为基础,我们希望你有基础的线性代数、微积分以及概率论入门知识。如果有基础编程知识更好,这可以作为在具体语境中学习数学的工具。之后,你可以根据具体领域调整学习。

如何在学校之外学习数学

学习的最佳途径一定是泡在学校,如果脱离了学校环境,也就没有严格的体系架构了,同时也不会有来自学霸的压力,资源明显不足。

所以在校外学习,我推荐学习小组或者研讨会的形式。在研究机构中,可能有阅读小组这类组织。有了基本组织框架,小组内可能会一起学习某本教材,并进行讨论。

这种课外学习通常不会给日常工作带来负担,甚至在互相激励的环境中还能让你的本来工作更加高效。

数学和编程

数学和代码在机器学习研究中通常是高度混合的。大多数情况下,代码都是直接从数学逻辑中形成,并且能用代码语法展示出数学表示法。其实现在一些数据科学框架(例如NumPy)就能直接将数学推理(例如矩阵或向量)转换成可读代码,非常直观高效。

所以这里鼓励通过代码夯实数学学习。例如,练习手动实现损失函数或优化的代码可以进一步了解基础概念。

这里举一个通过代码学习数学的例子:在你的神经网络中为ReLU激活函数进行反向传播。反向传播是利用微积分中的规则来计算梯度的技术。为了在这一环境中实现,我们将upstream导数和ReLU的梯度相乘。

首先,我们对ReLU进行可视化:

神经网络

为了计算梯度,你可能会对分段函数进行可视化,用指示函数表示如下:

神经网络

用NumPy我们可以直观地用代码表示出激活函数(蓝色曲线),其中x是输入,relu是输出:

relu = np.maximum(x, 0)

梯度(红线)也是一样,下面的等式描述了upstream梯度:

grad[x < 0] = 0

如果你自己事先没有推导出梯度,那么这行代码可能不好解释。在我们的代码中,将upstream梯度中的所有值都设为0,以满足[h<0]的条件。从数学角度来说,这能高效地展示ReLU梯度的分段表示,当它们乘以upstream梯度时,可以将所有小于0的值变为0。

从这里我们可以看到,了解微积分的基础概念让我们对代码有了清晰的思考。想了解神经网络部署的完整过程,可以查看:pytorch.org/tutorials/beginner/pytorchwithexamples.html

用数学打造机器学习产品

为了完成这一部分,我与机器学习工程师探讨了在debug的过程中都需要哪些数学知识。以下是工程师们的建议,如果你还不了解,没有关系,以下部分可以为你提供具体的思路。

问:我想对高维客户数据进行可视化,应该用什么聚类方法?

答:PCA vs tSNE,参考回答:stats.stackexchange.com/questions/238538/are-there-cases-where-pca-is-more-suitable-than-t-sne

问:为屏蔽虚假用户信息,我应该如何调整阈值(假设置信水平在0.9—0.8)?

答:进行概率校准:scikit-learn.org/stable/modules/calibration.html

问:我想确定某一区域的卫星数据的偏差,应该用哪种方法?

答:答案不唯一,也许可以试试demographic parity?blog.mrtz.org/2016/09/06/approaching-fairness.html

总的来说,统计学和线性代数可以运用到很多问题中,但是想要得到满意的结果通常需要更专业的方法。那么,我们该如何缩小数学学习的知识呢?

定义你的系统

在利用丰富的资源编写代码前,你需要为自己几个问题:

系统的输入和输出分别是什么?

你该如何准备适合系统的数据?

如何创建特征或数据来帮助生成模型?

如何为你的问题定义一个合理的目标?

的确,定义系统很难,但是之后的工程管道搭建也很复杂。换句话说,创建机器学习产品需要做很多工作,但大部分不需要深入的数学知识。

资源

谷歌的研发工程师Martin Zinkevich曾写过一篇机器学习实践教程,感兴趣的读者可自行查阅:developers.google.com/machine-learning/guides/rules-of-ml/

按需学习

刚进入机器学习领域,你可能会发现麻烦不断,尤其是在debug的过程中。当你被某个问题困住时,应该如何解决?权重合理吗?为什么模型会在特殊损失值下收敛?衡量成功与否的正确方法是什么?这时,对数据进行质疑也许比较有用,可以试试不同的优化方法或者算法。

通常你会发现这些在建模或debug过程中用到的数学在做决策时也很有用。Fast.ai的创始人之一Rachel Thomas就是这种“随即可用”方法的支持者之一,在教学时,她发现让学生对研究材料感兴趣更加重要,在这之后再加入数学教育即可。

资源

课程: Computational Linear Algebra by fast.ai

地址:http://www.fast.ai/2017/07/17/num-lin-alg/ "Computational Linear Algebra by fast.ai"

YouTube: 3blue1brown: Essence of Linear Algebra and Calculus

地址:https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw "3blue1brown"

教材: Linear Algebra Done Right by Axler

地址:http://linear.axler.net/ " Linear Algebra Done Right"

教材: Elements of Statistical Learning by Tibshirani et al.

地址:https://web.stanford.edu/~hastie/ElemStatLearn/ "Elements of Statistical Learning"

课程: Stanford’s CS229 (Machine Learning) Course Notes

地址:http://cs229.stanford.edu/syllabus.html#opt "Stanford’s CS229 (Machine Learning

机器学习研究中的数学

下面我将介绍在机器学习学术研究中所需要的数学思维类型。有些人不屑地认为,机器学习研究中那些即插即用的系统只不过是用更多的计算实现更高的性能。在一些领域里,研究人员仍然怀疑实证方法缺少数学的严谨。

很多人担心,研究领域可能在现有系统和假设上并没有扩展对领域的基础了解。研究者们需要提供新的基础模块,用于生成全新的观点和目标。例如,就像Geoff Hinton在他的胶囊网络论文中提到的,重新思考用于图像分类的神经网络模块。

在机器学习研究中,你不可能学习所有知识,你需要做的就是关注自己感兴趣的领域,切勿一味追求热点。

机器学习研究领域包罗万象,但是在公平性、可解释性和可用性方面都有着许多难题。和其他科学研究的准则一样,基础思考并不是现成的,它需要在具备高水平数学框架的前提下耐心思考。

资源

博客:Do SWEs need mathematics? by Keith Devlin

地址:https://www.maa.org/external_archive/devlin/devlin_10_00.html "Do SWEs need mathematics? by Keith Devlin"

reddit讨论:Confessions of an AI Researcher

地址:https://www.reddit.com/r/MachineLearning/comments/73n9pm/d_confession_as_an_ai_researcher_seeking_advice/ "Confessions of an AI Researcher"

博客:How to Read Mathematics by Shai Simonson and Fernando Gouvea

地址:http://www.people.vcu.edu/~dcranston/490/handouts/math-read.html "How to Read Mathematics by Shai Simonson and Fernando Gouvea"

论文:NIPS and ICML recent conference papers

文章:A Mathematician’s Lament by Paul Lockhart1

地址:https://www.maa.org/external_archive/devlin/LockhartsLament.pdf "A Mathematician’s Lament by Paul Lockhart1"

机器学习的民主化

虽然这篇并未涉及太过高深的概念,但很多机器学习论文仍然充满着复杂的术语。作为学生,你可以试着将高深的论文分解,记录自己的理解,通过博客等形式表达出来。在这一点上可以借鉴distill.pub的方式。

结语

希望本文能成为你在机器学习领域开始数学学习的起点。

不同问题需要不同水平的知识来解决,我建议先弄明白你的目标是什么再着手进行学习。

如果你想搭建一款产品,可以找寻同伴或在学习小组中进行。

在研究领域,广泛的数学基础可以助你走的更远。

数学(尤其是研究领域的数学)的确有些令人头大,但是被难住也是学习的一部分啊!

祝你好运!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分