作者 | Vincent Chen
译者 | Sambodhi Liu
编辑 | Vincent
微信公众号“AI 前线”(ID:ai-front)
人们并不完全清楚机器学习入门都需要什么样的数学水平,尤其是那些没在学校里研究过数学或统计学的人,更是迷茫。
我写本文的初衷是介绍构建机器学习产品或进行机器学习的学术研究所需的数学背景。我提到的这些建议,都是源于我跟机器学习工程师、研究人员和教育工作者的交谈,以及我自己在机器学习研究和业界工作中的个人经验。
为了构建数学的先决条件,我首先提出不同的思维模式和策略,以便帮助大家在传统课堂环境之外也可接受数学教育。然后,我会概述不同类型的机器学习工作所需的数学背景,因为这些学科的范围很广,从高中水平的统计和微积分到概率图模型(probabilistic graphical models,PGM)的最近进展。我希望你读完本文后,能对数学教育有一个大致了解。
我也清楚,学习风格、框架、资源,对于学习者的个人需求或目标而言,是独一无二的。
关于数学焦虑的见解
大量事实表明,很多人都对数学感到恐惧,这其中就包括工程师。首先,我想谈一谈关于“擅长数学”的神话。
事实上,擅长数学的人,都有做过很多数学练习题的经历,因此,他们在做数学题时很难会发生“卡壳”。相比天生才能,学生的思维模式是学习数学能力的主要预测因素。(正如最近的研究表明:《The Myth of ‘I’m Bad at Math’》http://u6.gg/eaPW2)
你要清楚,要达到这种境界需要你付出时间和精力,但这种境界肯定不是你与生俱来的。我将在本文中,帮助你了解需要什么样的数学基础,以及学习策略。
准备开始
作为软件开发者,我们一般都有线性代数、矩阵计算的基础知识(这样你就不会因符号而感到困扰)(可参阅《Linear Algebra Review and Reference》http://u6.gg/eaQxa),以及概率论的基础(可参阅《Review of Probability Theory》http://u6.gg/eaQzr)。当然,还有基本的编程能力。这些都是我们学习数学背景的工具。然后,你就可以根据你所感兴趣的工作来决定你的学习方向。
如何在校外学习数学
我个人认为,学习数学最好的方法还是当做一份全职工作去学(比如当学生)。因为离开了学校这种环境,你很可能不会有那种结构化的学习,也不会有积极的同学压力以及可用的学习资源。
为了在校外学习数学,我建议采用学习小组或者午餐讨论的形式,并将学习研讨会作为学习的重要资源。在研究实验室中,这些有可能是以阅读小组的形式出现的。小组可以讨论教科书章节,也可以定期讨论课程。
学习氛围有着很大的作用,这种“额外”的研究应该受到管理层的鼓励和激励,这样就不会觉得它侵占了日常工作。事实上,尽管在时间上有短期的成本,但有同伴驱动的学习环境可以使你的长期工作更有效。
数学和代码
数学和代码在机器学习工作流中高度交织在一起。代码通常是根据数学直觉构建的,它甚至会共享数学符号和语法。实际上,现代数据科学框架(如 Numpy)使得将数学运算(如矩阵 / 向量积)转换为直观的代码变得很容易。
我鼓励你将代码作为巩固学习的一种方式。数学和代码都依赖于对概念的理解和符号表示。例如,执行损失函数或优化算法的手工实现可能是真正理解基础概念的好方法。
作为通过代码学习数学的案例,我们可以考虑一个实际的例子:在神经网络中实现 ReLU 激活函数的反向传播(是的,即使 TensorFlow/PyTorch 也可以实现这点:http://u6.gg/eaYfS)!作为入门,反向传播是以微积分的链式法则来高效计算梯度的技术。为了利用链式法则,我们将上游导数乘以 ReLU 的梯度。
注: ReLU(Rectified Linear Unit),线性整流函数,是一种人工神经网络中常用的激活函数,通常指代以斜坡函数机器变种为代表的非线性函数。广泛引用于诸如图像识别等计算机视觉人工智能领域。链式法则(chain rule)是求复合函数导数的一个法则。
首先,我们将 ReLU 激活函数可视化,定义如下:
要计算梯度(直观地说,是斜率),可以想象成一个分段函数,由指标函数表示如下:
NumPy 就提供了有用、直观的语法,可用于构建 ReLU 函数。ReLU 激活函数(蓝色曲线)可以在代码中解释,如下所示,其中 x 是我们的输入,relu 是输出:
接下来是梯度值(红色曲线),其中 grad 描述了上游梯度,如下所示:
如果不先自己推导出梯度,这几行代码就可能就无法理解。在这段代码行中,将上有梯度 (grad) 中所有满足条件 [x<0] 的元素的值设置为 0。从数学上讲,这实际上等价于 ReLU 梯度的分段表示,所有小于 0 的值都压缩为 0,并与上游梯度相乘。
如上所示,通过对微积分的基本理解,我们就可以清楚地理解这两行代码的作用。这个神经网络的实现的完整示例在此:http://u6.gg/eaYJg
构建机器学习产品中的数学
为完成这一部分,我曾与机器学习工程师进行了交谈,了解数学在调试系统时最有帮助的地方。下面一些工程师从数学角度来回答的问题:
- 我应该使用什么样的聚类方法来可视化我的高维客户数据?○ 方法:主成分分析与 t 分布随机近邻嵌入(http://u6.gg/eaYVQ)
- 为组织一些欺诈性用户数据,我应该如何校准阈值(如可信度选择 0.9 或 0.8)?○ 方法:概率校准(http://u6.gg/ebac3)
- 把卫星数据偏向到世界上特定地区 (硅谷和阿拉斯加) 的最好方法是什么○ 方法:开放性研究问题。也许是人口统计学方法?(http://u6.gg/ebaeQ)
一般来说,统计学和线性代数都可以用某些方式用在这些问题上。然而,要得到满意的答案,通常需要针对特定领域的方法。如果是这样的话,你该如何缩小需要学习数学的范围呢?
定义你的系统
现在,我们并不缺乏资源 (例如,用于数据分析的 scikit-learn,用于深度学习的 keras),这些资源将有助于你编写代码来为系统建模。在这样做的时候,你可以试着回答以下关于你需要构建的机器学习工作流的问题:
- 机器学习系统中的输入 / 输出是什么?
- 应如何准备合适的数据以拟合系统?
- 如何构建特征或数据以帮助模型泛化?
- 如何为任务定义合理的目标函数?
你可能会感到惊讶:定义机器学习系统如此困难!构建机器学习工作流所需的工程也很重要。换言之,构建机器学习产品需要的是大量繁杂的工程工作,而不需要深厚的数学背景。
资源
- Best Practices for ML Engineering,(http://u6.gg/ebat9),Google 研究科学家 Martin Zinkevich 著
根据需要学习数学
深入到机器学习的工作流中,你可能会发现有一些步骤会让你“卡壳”,特别是在调试时。当你被捆住的时候,你知道应该要查找什么吗?你的权重合理吗?为什么模型使用特定的损失函数后不收敛?衡量成功的正确方法是什么?这时候,对数据进行假设,以不同方式约束优化或尝试不同算法都可能会有所帮助。
通常,你会发现在建模 / 调试过程中融入了数学直觉(如,选择损失函数或评估指标),这些直觉有可能有助于你做出明智的工程决策。这些就是你学习的好机会!
Fast.ai 的 Rachel Thomas 是这种“按需”方法的支持者。在教育学生时,他发现对于深度学习的学生而言,更重要的是要走得足够远,对这些材料产生兴趣是非常重要的。之后,他们的数学教育就包括了按需填补漏洞。
资源
- 课程:Computational Linear Algebra(http://u6.gg/ebaKX),Fast.ai 出品
- Youtube:Essence of Linear Algebra and Calculus(http://u6.gg/ebaNn),3Blue1Brown 出品
- 教科书:Linear Algebra Done Right(http://linear.axler.net/),Axler 著
- 教科书:Elements of Statistical Learning(http://u6.gg/ebaPx),Tibshirani 等著
- 课程:Stanford’s CS229 (Machine Learning) Course Notes(http://u6.gg/ebaQS),斯坦福大学出品
机器学习研究的数学
我现在想要描述对机器学习研究的工作有帮助的数学思维方式。对机器学习研究有一种嘲讽的观点是,它只不过是即插即用的系统,把大量计算投入到模型中从而挤出更好的性能。在某些圈子里,研究人员仍然质疑缺乏数学严谨性的经验方法(如某些深度学习方法)是不是真的可以带领我们拿到人类智慧的圣杯。(详见 http://u6.gg/ebaW7)
值得关注的是,研究界可能是建立在现有系统和假设的基础上,而这些并没有扩展我们对机器学习领域的基础理解。研究人员需要贡献新的、基础构建模块,可用来获得全新的洞见和领域目标的研究方法。例如像深度学习教父 Geoff Hinton 提出 Capsule 网络那样,重新考虑图像分类常用的卷积神经网络基础。
要实现机器学习的下一个飞跃,我们需要提出一些基础问题。这需要对数学的掌握,《深度学习》(deep Learning book) 的作者 Michael Nielsen 对我说,这是一种“好玩的探索”。在这个过程中,你会被“困住”,问问题,翻来覆去地寻找新的视角。“好玩的探索”让科学家们可以在简单的想法 / 架构的组合之外,提出深度而富有洞见的问题。
显而易见的是,在机器学习研究中,仍然不可能学到所有的东西!要正确地进行“好玩的探索”,你需要遵循的是你的兴趣,而不是关注最热门的新研究。
机器学习研究是一个非常丰富的研究领域,有很多有待解决的问题:公平性、可解释性和易用性。在所有的学科中都是如此,基本思想不是一种按需的过程,需要耐心地用高级数学框架思考重大问题的解决方案。
资源
- 博文: Do SWEs need mathematics (http://u6.gg/ebbmk),Keith Devlin 著
- Reddit 讨论:Confessions of an AI Researcher(http://u6.gg/ebbpU)
- 博文:How to Read Mathematics(http://u6.gg/ebbr2),Shai Simonson、Fernando Gouvea 著
- 论文:NIPS 和 ICML 最近的会议论文(http://u6.gg/ebbsS、http://u6.gg/ebbsW)
- 文章:A Mathematician’s Lament(http://kks.me/aH3Aj) Paul Lockhart 著
机器学习研究民主化
我希望我没有将“研究数学”描绘得太深奥,因为使用数学的思路应该以直观的形式呈现!遗憾的是,许多机器学习论文仍然充斥着复杂的、矛盾的术语,这使得关键直觉难以理解。作为学生,你可以这样为自己和这个领域做出卓越的贡献:通过博客、推特等方式,将这些密集的论文转写为可消化的直觉知识块。distll.pub 就是这样的,它专注于为机器学习研究提供清晰的解释。换句话说,将技术概念转为清晰的解释作为““好玩的探索”的一种方式,你将会因此受益,机器学习领域也会因此感谢你! 小贴士
最后,我希望为你提供一个起点,思考一下机器学习的数学教育。
- 不同的问题需要不同的数学水平。我鼓励你首先弄清楚目标是什么。
- 如果你想构建产品,可以通过问题寻找同行和学习小组,并通过深入研究最终目标来激励你的学习。
- 在研究领域中,广泛的数学基础可以为你提供工具,通过提供新的基础构建快来推动该领域的发展。
- 一般来说,数学(尤其是研究论文形式的数学)是令人生畏的,但“沉浸其中”是学习过程中的重要组成部分。
祝你好运!
原文链接:
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/58926.html 。