机器学习需要哪些数学基础?

本文写给:对于目前还不完全清楚开始机器学习需要什么样的数学水平,特别是那些没有在学校里学习数学或统计学的人。

本文的目标是提出建立产品所需的数学背景或进行机器学习的学术研究。这些建议源于与机器学习工程师,研究人员和教育工作者的对话,以及我在机器学习研究和行业角色方面的经验。

为了阐述学习数学的框架,本文提出以下两点

  • 提出了不同的思维模式和策略,以便在传统课堂之外更接近数学教育
  • 概述不同类型的机器学习工作所需的具体背景,因为这些学科的范围是从高中统计和微积分到概率图形模型(PGM)的最新发展

在这篇文章的最后,我希望你有一种学习数学的感觉,以及能够应用到你的机器学习之中。


关于数学焦虑的一个论述

很多人 - 包括工程师 - 都害怕数学。

事实上,擅长数学的人都有练习数学的习惯。因此,他们已经习惯在做数学时陷入困境。与先天能力相反,学生的心态是一个人学习数学能力的主要预测因素(具体可以相关研究)。

但这种对数学的舒适状态肯定不是你天生就有的,他需要时间和精力。本文的其余部分将帮助你确定你所需的数学基础水平,并概述构建它的策略。

入门

无痛学习,我建议你先学习以下基础:

之后,你再根据你的需要来学习某个方向的内容

数学和代码

数学和代码在机器学习工作流程中高度交织在一起。

代码通常基于数学基础进行构造,它甚至共享数学符号的语法。实际上,现代数据科学框架(例如NumPy)使得将数学运算(例如矩阵/矢量积)转换为可读代码变得直观和有效。

你可以将代码作为巩固学习的一种方式。数学和代码都依赖于理解和表示法的精确性。

例如,实践损失函数或优化算法的手动实现可以是真正理解基础概念的好方法。

作为通过代码学习数学的一个例子,让我们考虑一个实际的例子:在神经网络中实现ReLU激活的反向传播(Tensorflow / PyTorch可以为你做这个)。作为简要的入门读物,反向传播是一种依赖于微积分链规则来有效计算梯度的技术。为了在此设置中使用链规则,我们将上游导数乘以ReLU的梯度。

首先,我们可视化ReLU激活,定义如下:

要计算梯度(直观地说,斜率),您可以想象一个分段函数,由指标函数表示如下:

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

relu = np.maximum(x, 0)

接下来是渐变(红色曲线),其中grad描述了上游渐变:

grad[x < 0] = 0

在没有自己推导出梯度的情况下,这行代码就不那么容易明白了。在我们的代码行中,(grad)对于满足条件的所有元素,将上游梯度中的所有值设置为0 [h<0]。在数学上,这实际上相当于ReLU梯度的分段表示,当乘以上游梯度时,它会将小于0的所有值压缩为0!

正如我们在这里看到的那样,通过我们对微积分的基本理解,我们可以清楚地思考代码。可以在此处找到此神经网络实现的完整示例。

构建机器学习所需的数学

为了写好本节,我与机器学习工程师进行了交谈,以确定能将数学用在对调试系统最有帮助的地方。

以下是工程师自己的数学问题和见解示例:

  • 我应该使用什么样的聚类方法来可视化我的高维客户数据?
    ○方法:PCA与tSNE
  • 我应该如何设定来组织欺诈性用户交易的阈值(例如置信水平0.9对0.8?)?
    ○方法:概率校准

通常,统计和线性代数可以以某种方式用于这些问题。但是,要获得满意的答案通常需要针对特定​​领域的方法。如果是这样的话,你如何缩小你需要学习的数学类型?

构建你的机器学习框架

网上的资源(如数据分析的scikit-learn,深度学习的keras)将帮助你快速来为你的系统建模。同时,尝试回答以下有关构建系统的问题:

  1. 你系统的输入/输出是什么?
  2. 你应该如何准备数据以适合你的系统?
  3. 如何构建功能或策划数据以帮助你的模型进行概括?
  4. 你如何为你的问题定义合理的目标?

你会感觉定义你的系统可能很难!因为,构建机器学习流程需要大量繁重的工作,但不需要深入的数学背景。

资源:Google的研究科学家Martin Zinkevich 为ML工程提供最佳实践

当你的数学知识运用在机器学习的时候,你可能会发现有一些步骤会被卡住,特别是在调试时。

当你被困住时,你该从哪些方面思考呢?

  • 你设置的权重有多合理?
  • 为什么你的模型不能与特定的损失定义融合?
  • 衡量成功的正确方法是什么?

此时,对数据进行假设,以不同方式约束优化或尝试不同的算法可能会有所帮助。

通常,您会发现建模/调试过程中存在数学常用的方法(例如,选择损失函数或评估指标),这些方法能大大提高你的效率。

Fast.ai的 Rachel Thomas认为该用“按需”方法来进行学习:

在教学生时,她发现对于深度学习的学生来说:让他们对这些材料感到兴奋更为重要。然后,再根据需要的数学来按需填补漏洞。

推荐资源
•课程:Fast.ai的计算线性代数
•YouTube:3blue1brown线性代数微积分的本质
•教科书:Axler的线性代数
•教科书:Tibshirani等人的统计学习
•课程:斯坦福大学的CS229(机器学习)课程笔记

机器学习所需的数学

现在想要描述对机器学习中以研究为导向的工作有用的数学思维方式。

机器学习研究中最粗暴的方法是指「即插即用系统」,在这些系统中,模型会投入更多计算以挤出更高的性能。在某些圈子里,研究人员认为这样的方法缺乏数学严谨性(例如某些深度学习方法)。

而现在,研究界可能正在建立在现有系统和假设的基础上,这些系统和假设不会扩展我们对该领域的基本理解。研究人员需要提供原始资源「新的基础构建模块」,可用于获取全新的洞察力和实地目标的方法。

例如,这可能意味着重新思考用于图像分类的卷积神经网络等构建模块,正如Geoff Hinton深度学习的教父 ,在他最近的Capsule Networks 论文中所做的那样

为了实现机器学习,我们需要提出基本问题。这需要深度数学考量。这个过程涉及数千小时来遇到问题,提出问题,并在追求新问题时翻转问题观点。

现在推荐一些相关的资源:

资源

作为一名学生,你可以尝试通过博客文章来将密集的论文翻译成可直接消化的内容,你可以提供自己这个领域的领先资讯。你甚至可以从distill.pub中学习一些例子(distill专注于提供清晰地解释机器学习研究)。

小贴士

总之,我希望我为你提供一个起点,让你考虑机器学习所需的数学。

  • 不同的问题需要不同程度的考量,我鼓励你首先弄清楚你的目标是什么。
  • 在研究领域,广泛的数学基础可以为你提供工具,通过提供新的基础构建块来推动该领域的发展。
  • 一般来说,数学(尤其是研究论文形式)可能令人生畏,但遇到难题是学习过程的重要组成部分。

祝你好运!

编辑于 2018-08-03 01:32