机器学习必备的数学知识
四爷不怕bug 发布于2018-08-14 11:27 浏览:314 回复:2
0
收藏

【新智元导读】对于很多入坑机器学习的同学来说,数学可能是比较艰辛的部分。本文作者介绍了构建机器学习产品、或进行机器学习研究所需的数学背景,以及来自机器学习工程师、研究人员和教师的宝贵经验和建议,并提供了许多课程和书籍资源。

目前我们还不完全清楚开始学习机器学习需要怎样的数学水平,对于那些没有在学校学习过数学或统计学的人尤其如此。这篇文章的目标是提出打造一款机器学习产品、或进行有关机器学习的学术研究所需要的数学背景。这些建议来自与机器学习工程师、研究人员和教育工作者的对话,以及笔者在机器学习研究和行业中的经验。为了构建所需数学水平的先决条件,本文首先提出了不同的思维模式和策略,以便读者在传统课堂之外接触数学教育。然后,文章概述了不同类型的机器学习项目所需的具体背景,因这些学科的范围从高中水平的统计和微积分知识到概率图模型(PGM)的最新发展。在这最后,我希望读者能够对数学学习产生感觉,你需要在你的机器学习项目中有效利用这些知识,无论是什么项目!

首先,我承认对学习风格/框架/资源的学习,学习者的个人需求和目标可能是独一无二的。 欢迎各位在HN上提出自己的意见!


关于数学焦虑症的一些体会

事实证明,很多人,包括工程师在内,都对数学有着畏惧情绪。首先,我想谈谈关于“擅长数学”的话题。

实际上,擅长数学的人都会有很多实际运用数学的实践经验。结果,他们会觉得在数学上陷入困境是习以为常的事情。最近的研究显示,学习者的心态(而非先天能力),是一个人学习数学能力的主要预测指标。

要清楚,要达到这种习以为常的良好状态需要时间和精力,但这肯定不是人天生就有的能力。本文其余部分将帮助读者确定所需的数学基础水平,并概述应如何建立这种水平的策略。

 

入门:数学和代码

作为软先决条件,我们需要读者掌握一些线性代数/矩阵运算的基本知识(以免在符号表示上感到困惑),并对概率论有初步了解。此外,我们还鼓励您掌握基本的编程能力,以作为在给定语境下学习数学的工具。之后,您可以根据感兴趣的项目类型调整自己的关注焦点。

 

如何在校外学习数学

我相信学习数学的最佳方式是全身心学习(即作为学生)。如果脱离了这种全天学习环境,您可能就不会掌握学术课堂中的教学结构,获得来自同伴的(积极)压力和可用的资源。如果要在校外学习数学,我建议组织学习小组或午餐会、学习研讨会,作为获得学习动力的重要资源。在研究实验室中,也可以组织读书小组。在学习结构方面,您的读书小组可以浏览教科书的章节并定期举行讨论讲座,开辟渠道举行Q&A问答活动等。

这里,文化在发挥着重要作用。这种“额外”的学习应该是值得鼓励的,以免在日复一日的繁杂事务中忘记所学的知识。事实上,尽管这种方式存在短期成本,但在构建同伴驱动的学习环境可以让您的长期工作效率更高。

 

数学和代码

数学和代码在机器学习工作流程中高度融合。代码通常是用数学直觉直接构建出来,代码甚至和数学共享部分符号和语法。实际上,现代数据科学的框架(例如NumPy)使数学运算(如矩阵/矢量积)转换成的可读代码变得更加直观和高效。笔者鼓励读者将代码作为巩固学习的一种方式。数学和代码都依赖于理解和表示方法的精确性。例如,实践损失函数或优化算法的手动实现可以成为真正理解基础概念的好方法。

这里让我们举一个通过代码学习数学的具体例子:在神经网络中实现ReLU激活的反向传播(没错,通过Tensorflow / PyTorch就可以做到!具体见链接https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b)。反向传播是一种依靠微积分链规则,高效计算梯度的技术。为了在这个设定下使用链规则,我们将upstream导数与ReLU的梯度相乘。

首先,我们对ReLU的激活进行可视化处理,如图:

为了计算梯度(直观地说,就是斜率),可以对一个分段函数进行可视化,以指标函数表示如下:

NumPy为我们提供了有用且直观的语法,我们的激活函数(蓝色曲线)可以在代码中解释,其中x是输入,relu是输出:

relu = np.maximum(x, 0)

然后是梯度(图中红色曲线),其中grad表示upstream梯度:

grad[x < 0] = 0

在没有首先自己推导出梯度的情况下,这行代码的意义可能没有那么显而易见。在我们的代码中,对于满足条件的所有元素,会将upstream梯度(grad)中的所有值设为0,[h <0]。在数学上,这实际上相当于对ReLU梯度的分段表示,当将其与upstream梯度相乘时,它会将任何小于0的值归零!

如上所见,通过我们对微积分的基本理解,可以清楚地对代码进行思考。神经网络实现的完成示例在这里:https://pytorch.org/tutorials/beginner/pytorch_with_examples.html

 

构建机器学习产品所需的数学知识

在撰写本节内容时,我咨询了机器学习的工程师,确定如何最有效地利用数学对系统进行除错。下面的问题示例是工程师以数学视角给出的回复。如果你以前从没见过也不要紧,笔者希望这一章节能够为你感兴趣的专门问题提供一些适当的背景。

我应该使用哪些聚类方法来显示高维客户数据?
方法:PCA与tSNE

我应该如何校准“阻止”欺诈性用户交易的阈值?
方法:概率校准

如何正确描述卫星数据在世界不同区域内的偏差?(比如硅谷与阿拉斯加州)
方法:将研究问题公开。比如面向人口信息学的平等化?

通常,统计学工具和线性代数可以以某种方式应用于其中的每一个问题。但是,要获得满意的答案,通常需要针对特定领域内的特定方法。在这种情况下,应如何确定你需要学习哪些数学知识?


定义系统

现在我们能够利用的资源是很丰富的(例如,用于数据分析的scikit-learn,用于深度学习的keras),这有助于读者开始编写代码来为系统进行建模。在利用这些资源时,可以尝试回答以下有关问题:

1. 系统的输入/输出是什么?

2. 应该如何准备数据,来适应系统?

3. 如何构建功能或策划数据,帮助模型进行概括?

4. 如何为提出的问题定义合理的目标?

你或许会吃一惊,对系统进行定义可能很难!之后,管道建设所需的工程也是非常重要的。换句话说,构建机器学习产品需要大量繁重的工作,这些工作并不需要深入的数学背景。

更多资料:
• Best Practices for ML Engineering by Martin Zinkevich, Research Scientist at Google


按需学习数学

首先要考察机器学习的工作流程,您可能会发现在一些步骤上会被卡住,尤其是在调试时。当你被困住时,你知道要查找什么问题吗?你的权重合理性如何?为什么你的模型不能与特定的损失定义相融合?衡量模型成功的正确方法是什么?这时,对数据进行假设,以不同方式约束优化或尝试不同的算法可能会有所帮助。通常,你会发现在建模/调试过程中存在数学上的直觉(比如如何选择损失函数和评估指标),这些直觉可能会有助于做出明智的工程决策。这些都是你学习的机会!

来自Fast.ai的Rachel Thomas是这种“按需学习”方法的支持者。在教育学生时,她发现对于深度学习的学生来说,让他们对这些材料感到兴奋更为重要。在建立兴趣之后,数学教育就变成按需查缺补漏了。


更多资料:

课程: Computational Linear Algebra by fast.ai
YouTube: 3blue1brown: Essence of Linear Algebra and Calculus
教材: Linear Algebra Done Right by Axler
教材: Elements of Statistical Learning by Tibshirani et al.
课程: Stanford’s CS229 (Machine Learning) Course Notes

 

机器学习研究所需的数学知识

笔者现在想要描述对于机器学习中以研究为导向的工作,哪些数学思维方式是有用的。关于机器学习研究的悲观观点体现在即插即用系统上,在这些系统中,模型会投入更多计算力,以挤压出更高的性能。一些人群中,研究人员仍然对缺乏数学严谨性的经验化方法(例如某些深度学习方法)表示怀疑。

未来研究体系可能建立在现有系统和假设的基础上,而这些系统和假设并不会扩大我们对该领域的基本理解,这是令人担忧的。研究人员需要提供原始的资源,构建新的基础架构模块,可用于获取全新观点和达到实际目标的方法。比如可能需要重新思考用于图像分类的卷积神经网络等构建模块,正如“机器学习之父”Geoff Hinton在他最近的关于Capsule Networks的论文中所说的那样。(论文链接:https://arxiv.org/pdf/1710.09829v1.pdf)

下一步,我们需要提出基本问题。这需要在数学上的“深度理解”,《深度学习》一书的作者迈克尔·尼尔森将其称为“有趣的探索”。这个过程涉及数千小时期间经常“被难题卡住”,不断提出问题,并在探究新问题时改变观点。“有趣的探索”使科学家们能够提出深刻,富有洞察力的问题,而不仅仅是简单的想法/架构的结合。

当然,很明显的是,在研究机器学习时是仍然无法学到所有东西的!要正确地进行“有趣的探索”需要适当地进行,需要遵循自己的兴趣,而不是优先考虑那些最热门的新结果。

机器学习研究是一个非常丰富的研究领域,在公平性,可解释性和可访问性方面存在紧迫问题。实际上所有科学学科中,基本的思维都不是一个按需的过程,而是需要耐心,才能用高级数学框架的广度进行思考,解决关键性的问题。

更多资料:
• 博客: Do SWEs need mathematics? by Keith Devlin
• Reddit帖子: Confessions of an AI Researcher
• 博客: How to Read Mathematics by Shai Simonson and Fernando Gouvea
• 论文: NIPS and ICML 等会议论文

• 文章: A Mathematician’s Lament by Paul Lockhart1


让机器学习研究走向民主化

我希望我没有把“研究数学”描绘得太深奥,因为使用数学构建的观点应该以直观的形式呈现!遗憾的是,许多机器学习论文中仍然充斥着复杂且不一致的术语,使关键的信息难以辨别。作为一名学生,你可以通过博客、推文等方式将浓缩的论文翻译成易于消化理解的观点,这也是在为自己和这个领域做好事。你甚至可以从distill.pub为范例,这是一个专门为机器学习研究成果提供清晰解释的出版物。换句话说,如果能将技术思想的神秘化为“有趣探索”的手段,一定会很有帮助!


最后的一些总结和建议

总之,我希望这篇文章可以读者提供一个起点,让读者考虑于机器学习有关的数学教育问题。

不同的问题需要不同程度的直观观点,我鼓励读者首先弄清楚目标是什么。
如果您希望打造机器学习产品,请通过问题寻找同行和学习小组,并通过深入研究最终目标来激发您的学习。
在研究领域,具备深厚的数学基础可以为您提供丰富的工具,通过提出新的基础架构模块来推动机器学习领域的发展。
一般而言,数学(尤其是研究论文中的数学)可能是令人生畏的,但在学习中被难题卡住,正是学习过程的重要组成部分。

祝你好运!

 

关于作者:

Vincent Chen是斯坦福大学计算机科学专业的学生,同时担任该校人工智能实验室研究助理。

原文链接:

https://blog.ycombinator.com/learning-math-for-machine-learning/

收藏
点赞
0
个赞
共2条回复 最后由超级小白和小明回复于2018-11-26 09:57
#3超级小白和小明回复于2018-11-26 09:57:47

研究细的话时间不够用 不细又理解不了深层的东西

0
#2天子骄子fly回复于2018-08-14 23:01:27

收藏一下

0
TOP
切换版块