我们该如何学习机器学习中的数学

标签: 学习 机器学习 数学 | 发表时间:2018-08-04 17:58 | 作者:机器之心
出处:https://www.jiqizhixin.com/

数学在机器学习中非常重要,不论是在算法上理解模型代码,还是在工程上构建系统,数学都必不可少。通常离开学校后很难有机会静下心学习数学知识,因此我们最好能通过阅读小组或读书会等形式营造环境,并专注学习那些在实践中常常需要用到的数学知识。

数学达到什么水平才可以开始机器学习?人们并不清楚,尤其是那些在校期间没有研究过数学或统计学的人。

本文的写作目的是介绍构建机器学习产品或进行相关学术研究所必需的数学背景,以及数学在工程和研究中的重要性。这些建议是根据我和机器学习工程师、研究者和教育者交流而得到的,当然也有我自己在机器学习研究和业界工作中的个人经验。

为了构建必备的数学背景,我首先提出不同的思维模式和策略,帮助大家在学校之外也可以接受数学教育。然后,我会给出不同种类机器学习工作所需的数学背景,从高中水平的统计学和微积分到概率图模型(PGM)的最新进展。希望大家读完本文后,能够对自己在机器学习工作中所需要的数学教育有清楚的认知。

关于数学焦虑

很多人害怕数学,包括工程师。首先,我想解决「擅长数学」这一迷思。

一般精通数学的人有大量和数学有关的实践经验。因此,他们在研究数学时更容易保持专注。相比内在能力,学生的思维模式才是决定一个人学习数学能力的关键。

不过要想达到这种状态需要付出大量时间和努力,但是这并不会让你感到无聊。下文将帮助大家确定你所需要的数学水平,以及学习策略。

机器学习中的数学

作为软件工程的开发者,我们一般有基础的线性代数与矩阵微分学知识,也有一些概率论和编程的基础。因此以它们为基础,我们只需要根据不同的方向与领域调整知识结构就行。

那么我们该如何在校外学习数学呢?我相信学习数学最好的方法是将其作为一份全职工作,也就是学生。因为离开了学校,我们很难进行结构化的学习,也很难有正向的同龄压力和众多的学习资源。但是在校外学习中,我比较推荐成立学习小组或研讨会,它们同样能提供类似学校的学习环境。

在研究实验室中,这种课外学习可能是以阅读小组的形式进行。我们可以讨论课本中难以理解的地方,也可以讨论自己对它们的见解。而学习的环境是支持长期数学学习的动力,因此建立这种环境并意识到数学在工程与研究中的重要性非常关键。

数学与代码

数学和代码在机器学习工作流程中高度交织在一起。代码通常可以根据数学直观地构建,它甚至会共享数学符号与句法。实际上,NumPy 等现代数据科学框架令数学运算很容易转化为直观的代码。我们可以将代码作为巩固学习的方式,且数学和代码都依赖于对概念的精确理解与符号表示。例如,手动用 NumPy 实现损失函数或最优化算法是理解它们概念非常好的方式。

作为通过代码学习数学的案例,我们可以考虑一个实际的案例,即为神经网络实现反向传播和 ReLU 激活函数。作为入门级概念,反向传播是一种依赖于微积分链式求导法则的技术,它能高效计算梯度。为了在神经网络中利用链式求导法则,我们可以使用 ReLU 激活函数的梯度乘以上游导数。

为了完成反向传播的案例,首先我们可以可视化 ReLU 激活函数

为了计算 ReLU 的梯度或斜率,我们可以将其可视化为分段函数,其中自变量小于零的地方斜率为 0,自变量大于零的地方斜率恒等于 1。

NumPy 可以帮助我们构建 ReLU 函数,使用 maximum 函数可以只输出该函数中所有参数中相对较大的值。如下所示 x 为输入,relu 为输出:

relu = np.maximum(x, 0)

ReLU 激活函数的梯度值可以表示为以下,其中 grad 表示为上游梯度:

grad[x < 0] = 0

如果没有首先手动推导出梯度,上述代码可能并不是那么容易理解。在我们的代码中,其将所有满足条件 [x < 0] 的元素梯度 grad 都设置为零,也就是说上游梯度只有在 x>0 的情况下才能继续向前传播。在数学上,这等价于 ReLU 激活函数梯度的分段线性表征,它将所有小于 0 的值压缩为 0,并乘上上游梯度。

如上所示,若对于微积分有一定的理解,那么我们可以清晰地理解这两行基本代码。因为机器学习中很多代码都在描述数学运算,因此了解数学原理对于理解机器学习模型过程非常重要。

构建机器学习产品中的数学

为了完成这一章节,我曾与机器学习工程师探讨到底哪些数学对于调试他们的系统最重要。以下一些问题与回答是工程师站在数学的角度下的看法。


  • 我们可以使用什么样的降维算法可视化高维用户数据?

  • 方法:主成分分析与 t 分布随机近邻嵌入


  • 我们该怎样校准阈值(例如置信度选择 0.9 或 0.8)以阻止一些欺骗性的用户数据?

  • 方法:概率校准


  • 将卫星数据偏向硅谷或阿拉斯加等世界某块具体地区的最好方法是什么?

  • 方法:开放性问题,也许可以是人口统计学方法


一般而言,统计学和线性代数能以某些方式应用于这些问题。然而,为了获得令人满意的回答,我们通常需要特定领域的方法。如果是这样的话,我们该如何选择一些我们需要学习的数学内容?

定义你的系统

目前有非常多的资源可以帮助我们跨越写代码而直接调用函数构建机器学习系统,例如数据分析中常用的 scikit-learn 和深度学习中常用的 keras。所以你们可以尝试回答以下关于搭建机器学习流程的问题:

  1. 机器学习系统中输入和输出都是什么?

  2. 我们该如何准备合适的数据以拟合系统?

  3. 如何构建特征或数据以帮助模型提高泛化性能?

  4. 如何为我们的任务定义合适的目标函数

你可能会比较惊讶,定义机器学习系统可能会比较困难,但搭建的流程并不复杂。换而言之,构建机器学习产品要求非常多的工程工作,但并不要求有非常深厚的数学背景。

资源:谷歌机器学习应用的四十三条经验法则(附 PDF)

学习必要的数学

如果一头钻进机器学习工作流,你可能会发现在调试机器学习系统时会遇到一些困难。当遇到困难时你知道需要查找什么吗?你的权重是不是合理?为什么模型使用一些损失函数不能收敛?用什么样的度量方法衡量模型性能才是合理的?在这个时候,对数据分布做出假设、约束最优化方法或采用不同的算法都是非常有帮助的。

通常,你可能会发现在建模和调试过程背后有直观的数学原理,例如选择损失函数或评估度量,这些数学原理都会帮助我们实现更优的工程决策。

因此,根据实际工程中遇到的数学,再进一步学习这些数学才是更好的方法。

机器学习研究中的数学

这里,我想要描述下对机器学习研究有帮助的数学心态。对机器学习研究比较嘲讽的观点认为,它是一种即插即用的系统,把大量计算层级堆叠在一起而获得好的表现。在一些圈子里,研究人员依然质疑经验性的方法缺乏严谨的数学推导(例如,一些深度学习方法),无法为我们带来广义上的智能。

它担忧研究界可能是建立在已有的系统与假设上,并未扩展我们对机器学习领域的基础理解。研究员们需要贡献新的、基础的研究模块,从而用于启发全新的洞见与研究方法。例如像深度学习先驱 Geoff Hinton 提出 Capsule 网络一样,它重新考虑图像分类中常用的 CNN 基础。

为了机器学习的下一步跃迁,我们需要提出基础问题。这需要对数学的熟练掌握,就像深度学习书籍的作者 Michael Nielsen 描述的「有趣的多探索」。这个过程可能经历数千小时的思考、提问、推翻问题寻求新的视角。「有趣的探索」能让科学家提出深度、有洞见的问题,超越简单的想法和架构。

要清楚,在机器学习研究中,不可能什么都学。为了正确地「有趣探索」,需要你遵照自己的兴趣,而不是一直计较最热的新研究。

机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正、可解释性、易用性。如同所有的学科一样,基本思想不是请求式的过程,需要耐心地用高级数学框架思考重大难题的解决方案。

民主化机器学习研究

我希望我没有把「研究数学」描述得过于难懂,因为使用数学的思路应该以直观的方式表现。悲哀的是,许多机器学习论文仍然充满大量复杂的、前后矛盾的术语,关键直觉难以理解。作为学生,你可以为自己、为这个领域做个伟大贡献:通过博客、推特等方式把这些密集的论文转写为可消化的直觉知识块。以 distill.pub 为例,它就专注于提供对机器学习研究的清晰解释。换言之,把技术思路的解释作为学习探索的方式,有趣而又有帮助。

总结

希望本文能够帮助大家针对机器学习提高数学水平。

  • 不同的问题要求不同的数学水平,我鼓励大家首先理清自己的目标。

  • 如果你希望构建产品,那么寻求同伴和研究小组,通过向最终目标的前进而激励自己学习。

  • 在学界研究中,广泛的数学基础可以帮助贡献新的基础构造块,进而推动领域发展。

  • 通常,数学(尤其是研究论文形式的数学)令人望而生畏,但是「沉醉其中」是学习过程的一大部分。

参考链接:https://blog.ycombinator.com/learning-math-for-machine-learning/

相关 [学习 机器学习 数学] 推荐:

我们该如何学习机器学习中的数学

- - 机器之心
数学在机器学习中非常重要,不论是在算法上理解模型代码,还是在工程上构建系统,数学都必不可少. 通常离开学校后很难有机会静下心学习数学知识,因此我们最好能通过阅读小组或读书会等形式营造环境,并专注学习那些在实践中常常需要用到的数学知识. 数学达到什么水平才可以开始机器学习. 人们并不清楚,尤其是那些在校期间没有研究过数学或统计学的人.

终结吧!机器学习的数学焦虑

- - 机器之心
本文作者Vincent Chen 是斯坦福大学计算机科学学生,同时也是斯坦福大学人工智能实验室的RA(研究助理). 开始机器学习之旅,需要什么层次的数学功底. 尤其是对于那些没有学过数学和统计学的同学们来说,这个问题当前不甚清楚,在这篇文章中,我将要为那些使用机器学习技术来开发产品或做学术研究的人们提供一些数学背景方面的建议.

机器学习五步走

- - 我爱机器学习
经常会有人问“我该如何在机器学习方面更进一步,我不知道我接下来要学什么了. 一般我都会给出继续钻研教科书的答案. 每当这时候我都会收到一种大惑不解的表情. 但是进步确实就是持续的练习,保持较强的求知欲,并尽你可能的完成具有挑战性的工作. 因为他是为数不多的几种可以让你真真让你获取坚实知识的媒介. 是的,你可以选择选一门课,注册MOOC,参加一些讨论班.

机器学习之路

- - 我爱机器学习
自从答应简二毛博士将自己的机器学习历程和心得分享给大家至今,转眼间半年已经过去了,感谢简博士分享和开源精神的鼓舞,这也正是本系列关于机器学习介绍博客的动力来源. 之前有些网友,师弟们问我,学习机器学习怎么入手,从看什么书开始. 如果你只愿意看一本书,那么推荐Bishop的PRML,全名Pattern Recognition and Machine Learning. 这本书是机器学习的圣经之作,尤其对于贝叶斯方法,介绍非常完善.

机器学习算法Boosting

- - 标点符
机器学习通常会被分为2大类:监督学习和非监督学习. 在监督学习中,训练数据由输入和期望的输出组成,然后对非训练数据进行预测输出,也就是找出输入x与输出y之间的函数关系F:y = F(x). 根据输出的精确特性又可以分为分类和回归. 分类和回归的区别在于输出变量的类型. 定量输出称为回归,或者说是连续变量预测.

Mahout实现的机器学习算法

- - ITeye博客
使用命令:mahout -h.   在Mahout实现的机器学习算法见下表:. EM聚类(期望最大化聚类). 并行FP Growth算法. 并行化了Watchmaker框架. 非Map-Reduce算法. 扩展了java的Collections类. Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能.

国内的机器学习几个人

- - 丕子
转: http://blog.csdn.net/playoffs/article/details/7588597. 推荐几个机器学习和数据挖掘领域相关的中国大牛:. 李航:http://research.microsoft.com/en-us/people/hangli/,是MSRA Web Search and Mining Group高级研究员和主管,主要研究领域是信息检索,自然语言处理和统计学习.

Apache Mahout 0.8 发布,机器学习库

- - 开源中国社区最新新闻
Apache Mahout 0.8 发布了,Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用. 该项目已经发展到了它的最二个年头,目前只有一个公共发行版.

Ruby的机器学习项目

- - 阳志平的网志-技术类
作者是辉瑞公司的小牛,可惜烂尾了. 我在改啊改啊,可惜现在是商业项目,暂时不能放出改掉的部分. 对了,顺便做个小广告,去年组织翻译的一本小书:社会网络分析:方法与实践. 已经上市了,感兴趣的可以翻翻:. 社会网络分析:探索关系背后的科学与技术. treat:自然语言处理. 类似于igraph,也是桥接处理nlp.

机器学习该如何入门

- - CSDN博客综合推荐文章
  对于这个问题的解释,说实话我很有压力,因为在分享篇文章之前就有朋友告诉我,这个百度上一搜一大片,还需要你讲吗. 正如同一千个读者眼里有一千个林黛玉一样,我解释的当然是我个人自从读研到工作这么多年对机器学习的学习到应用过程的独特见解.   首先我们看下图了解一下机器学习在AI(Artificial Intelligence 人工智能)领域的地位.