@sambodhi
2018-08-05T09:14:55.000000Z
字数 5096
阅读 2701
作者 | Vincent Chen
译者 | Sambodhi Liu
编辑 | Chen Si
AI前线导读:我们知道,机器学习的特点就是:以计算机为工具和平台,以数据为研究对象,以学习方法为中心;是概率论、线性代数、数值计算、信息论、最优化理论和计算机科学等多个领域的交叉学科。尽管机器学习和深度学习有巨大的发展潜力,但要深入掌握算法的内部工作原理并获得良好的结果,就必须透彻地了解许多技术的数学原理。但是,据我观察,一些人缺乏必要的数学直觉和框架,无法获得有用的结果。如果你真的想成为一名人工智能人才,必须要严格自律,拿出很大一块时间投入到学习数学中。
人们并不完全清楚机器学习入门都需要什么样的数学水平,尤其是那些没在学校里研究过数学或统计学的人,更是迷茫。
我写本文的初衷是介绍构建机器学习产品或进行机器学习的学术研究所需的数学背景。我提到的这些建议,都是源于我跟机器学习工程师、研究人员和教育工作者的交谈,以及我自己在机器学习研究和业界工作中的个人经验。
为了构建数学的先决条件,我首先提出不同的思维模式和策略,以便帮助大家在传统课堂环境之外也可接受数学教育。然后,我会概述不同类型的机器学习工作所需的数学背景,因为这些学科的范围很广,从高中水平的统计和微积分到概率图模型(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的梯度。
AI前线注: ReLU(Rectified Linear Unit),线性整流函数,是一种人工神经网络中常用的激活函数,通常指代以斜坡函数机器变种为代表的非线性函数。广泛引用于诸如图像识别等计算机视觉人工智能领域。
链式法则(chain rule)是求复合函数导数的一个法则。
首先,我们将ReLU激活函数可视化,定义如下:
要计算梯度(直观地说,是斜率),可以想象成一个分段函数,由指标函数表示如下:
NumPy就提供了有用、直观的语法,可用于构建ReLU函数。ReLU激活函数(蓝色曲线)可以在代码中解释,如下所示,其中x是我们的输入,relu是输出:
relu = np.maximum(x, 0)
接下来是梯度值(红色曲线),其中grad描述了上游梯度,如下所示:
grad[x < 0] = 0
如果不先自己推导出梯度,这几行代码就可能就无法理解。在这段代码行中,将上有梯度(grad)
中所有满足条件[x<0]
的元素的值设置为0。从数学上讲,这实际上等价于ReLU梯度的分段表示,所有小于0的值都压缩为0,并与上游梯度相乘。
如上所示,通过对微积分的基本理解,我们就可以清楚地理解这两行代码的作用。这个神经网络的实现的完整示例在此:http://u6.gg/eaYJg
为完成这一部分,我曾与机器学习工程师进行了交谈,了解数学在调试系统时最有帮助的地方。下面一些工程师从数学角度来回答的问题:
一般来说,统计学和线性代数都可以用某些方式用在这些问题上。然而,要得到满意的答案,通常需要针对特定领域的方法。如果是这样的话,你该如何缩小需要学习数学的范围呢?
现在,我们并不缺乏资源(例如,用于数据分析的scikit-learn,用于深度学习的keras),这些资源将有助于你编写代码来为系统建模。在这样做的时候,你可以试着回答以下关于你需要构建的机器学习工作流的问题:
你可能会感到惊讶:定义机器学习系统如此困难!构建机器学习工作流所需的工程也很重要。换言之,构建机器学习产品需要的是大量繁杂的工程工作,而不需要深厚的数学背景。
资源
深入到机器学习的工作流中,你可能会发现有一些步骤会让你“卡壳”,特别是在调试时。当你被捆住的时候,你知道应该要查找什么吗?你的权重合理吗?为什么模型使用特定的损失函数后不收敛?衡量成功的正确方法是什么?这时候,对数据进行假设,以不同方式约束优化或尝试不同算法都可能会有所帮助。
通常,你会发现在建模/调试过程中融入了数学直觉(如,选择损失函数或评估指标),这些直觉有可能有助于你做出明智的工程决策。这些就是你学习的好机会!
Fast.ai的Rachel Thomas是这种“按需”方法的支持者。在教育学生时,他发现对于深度学习的学生而言,更重要的是要走得足够远,对这些材料产生兴趣是非常重要的。之后,他们的数学教育就包括了按需填补漏洞。
资源
我现在想要描述对机器学习研究的工作有帮助的数学思维方式。对机器学习研究有一种嘲讽的观点是,它只不过是即插即用的系统,把大量计算投入到模型中从而挤出更好的性能。在某些圈子里,研究人员仍然质疑缺乏数学严谨性的经验方法(如某些深度学习方法)是不是真的可以带领我们拿到人类智慧的圣杯。(详见http://u6.gg/ebaW7)
值得关注的是,研究界可能是建立在现有系统和假设的基础上,而这些并没有扩展我们对机器学习领域的基础理解。研究人员需要贡献新的、基础构建模块,可用来获得全新的洞见和领域目标的研究方法。例如像深度学习教父Geoff Hinton提出Capsule网络那样,重新考虑图像分类常用的卷积神经网络基础。
要实现机器学习的下一个飞跃,我们需要提出一些基础问题。这需要对数学的掌握,《深度学习》(deep Learning book)的作者Michael Nielsen对我说,这是一种“好玩的探索”。在这个过程中,你会被“困住”,问问题,翻来覆去地寻找新的视角。“好玩的探索”让科学家们可以在简单的想法/架构的组合之外,提出深度而富有洞见的问题。
显而易见的是,在机器学习研究中,仍然不可能学到所有的东西!要正确地进行“好玩的探索”,你需要遵循的是你的兴趣,而不是关注最热门的新研究。
机器学习研究是一个非常丰富的研究领域,有很多有待解决的问题:公平性、可解释性和易用性。在所有的学科中都是如此,基本思想不是一种按需的过程,需要耐心地用高级数学框架思考重大问题的解决方案。
资源
我希望我没有将“研究数学”描绘得太深奥,因为使用数学的思路应该以直观的形式呈现!遗憾的是,许多机器学习论文仍然充斥着复杂的、矛盾的术语,这使得关键直觉难以理解。作为学生,你可以这样为自己和这个领域做出卓越的贡献:通过博客、推特等方式,将这些密集的论文转写为可消化的直觉知识块。distll.pub就是这样的,它专注于为机器学习研究提供清晰的解释。换句话说,将技术概念转为清晰的解释作为““好玩的探索”的一种方式,你将会因此受益,机器学习领域也会因此感谢你!
最后,我希望为你提供一个起点,思考一下机器学习的数学教育。
祝你好运!
原文链接: Learning Math for Machine Learning
https://blog.ycombinator.com/learning-math-for-machine-learning/