摘要: 机器学习到底须要怎么样的数学基础?高段位机器学习如何练成?来瞧瞧。
到目前为止,咱们都还不彻底清楚开始机器学习须要什么样的数学水平,特别是那些没有在学校学习数学或统计学的人。算法
在这篇文章中,个人目标是提出创建产品或进行机器学习学术研究所需的数学背景。这些建议源于与机器学习工程师、研究人员和教育工做者的对话以及我在机器学习研究和行业角色方面的经验。编程
首先,我会提出不一样的思惟模式和策略,以便在传统课堂以外接近真正的数学教育。而后,我将概述不一样类型的机器学习工做所需的具体背景,这些学科的范围涉及到高中统计和微积分到几率图形模型(PGM)。网络
关于数学焦虑的一个解释架构
事实证实,不少人包括工程师都惧怕数学。首先,我想谈谈“善于数学”的神话。框架
事实是,擅长数学的人有不少练习数学的习惯。并非他们先天就是擅长数学,你可能在看他们作数学时发现他们驾轻就熟。要清楚,要达到这种温馨状态须要时间和精力,但这确定不是你生就有的。本文的其他部分将帮助你肯定所需的数学基础水平,并概述构建它的策略。机器学习
入门函数
做为先决条件,咱们假设你有线性代数/矩阵运算以及几率计算的基本知识点。我还但愿你有一些基本的编程能力,这将支持做为在上下文中学习数学的工具。以后,你能够根据你感兴趣的工做类型调整你的主要方向。工具
如何在校外学习数学?这个问题几乎困扰咱们不少人。我相信专心学习数学的最佳方式是在学生的时代。在这种环境以外,你可能不会拥有学术课堂中的氛围、同伴和可用资源。性能
在校外学习数学,我建议组成学习小组,并学会及时分享各自的资源。相互激励在这里发挥着重要做用,这种“额外”的研究应该受到鼓励和激励,这样在学习上就会颇有动力。学习
数学和代码
数学和代码在机器学习工做流程中是高度交织在一块儿的。代码一般是由数学模型构建,它甚至共享了数学符号。实际上,现代数据科学框架(例如NumPy)使得将数学运算(例如矩阵/矢量积)转换为可读代码变得直观和有效。
我鼓励你将写代码做为巩固学习的一种方式,数学和代码都是基于理性思考,写代码的过程其实就是理解数学公式的过程。例如,损失函数或优化算法的手动实现能够是真正理解基础概念的好方法。
经过代码学习数学的一个例子:在神经网络中实现ReLU激活的反向传播。做为简要的入门读物,反向传播是一种依赖于微积分链规则来有效计算梯度的技术。
首先,咱们可视化ReLU激活,定义以下:
要计算梯度(直观地说,斜率),你能够想象一个分段函数,由指标函数表示以下:
NumPy为咱们提供了有用、直观的语法,咱们的激活函数(蓝色曲线)能够在代码中解释,其中x是咱们的输入,relu是咱们的输出:
relu = np.maximum(x, 0)
接下来是渐变(红色曲线),其中grad描述了upstream渐变:
grad[x < 0] = 0
在没有首先本身推导出梯度的状况下,这行代码你可能看的不是很明白。在咱们的代码行中,(grad)对于知足条件的全部元素,将upstream梯度中的全部值设置为0 [h<0]。在数学上,这实际上至关于ReLU梯度的分段表示,当乘以upstream梯度时,它会将小于0的全部值压缩为0!
正如咱们在这里看到的那样,经过咱们对微积分的基本理解,咱们能够清楚地思考代码。能够在此处找到此神经网络实现的完整示例。
为构建机器学习产品的数学
为了写这部分,我与机器学习工程师进行了交谈,以肯定数学在调试系统时最有帮助的地方。如下是工程师本身回答的数学在机器学习中的问题。但愿你能从中发现一些有价值的问题。
问:我应该使用什么样的聚类方法来可视化高维客户数据?
方法:
PCA与tSNE
问:我应该如何校准“阻止”欺诈性用户交易的阈值?
方法:
几率校准
一般,统计和线性代数能够以某种方式用于这些问题中的每个。可是,要得到满意的答案一般须要针对特定领域的方法。若是是这样的话,你如何缩小你须要学习的数学类型?
定义你的系统
市场上有不少资源(例如,数据分析的scikit-learn,深度学习的keras)它们将帮助你跳转编写代码来为你的系统建模。在你打算这样作的时候,尝试回答如下有关你须要构建管道的问题:
1.你系统的输入/输出是什么?
2.你应该如何准备数据以适合你的系统?
3.如何构建特征或策划数据以帮助你的模型进行归纳?
4.你如何为你的问题定义合理的目标?
你可能会感到惊讶,定义一个系统居然须要处理那么多问题!以后,管道建设所需的工程也是很是重要的。换句话说,构建机器学习产品须要大量繁重的工做,不须要深刻的数学背景。
资源
• Google的研究科学家Martin Zinkevich 为ML工程提供的最佳实践
须要什么数学知识就须要什么!
当你的头脑中彻底进入到机器学习工做流程时,你可能会发现有一些步骤会被卡住,特别是在调试时。当你被困住时,你知道要查找什么吗?你的权重是否合理?为何你的模型不能与特定的损失定义融合?衡量成功的正确方法是什么?此时,对数据进行假设,以不一样方式约束优化或尝试不一样的算法可能会有所帮助。
一般,你会发现建模/调试过程当中存在数学直觉(例如,选择损失函数或评估指标),这些直觉可能有助于作出明智的工程决策。这些都是你学习的机会!来自Fast.ai的 Rachel Thomas 是这种“按需”学习方法的支持者。
资源:
•课程:计算线性代数 by fast.ai ;
•YouTube:3blue1brown:线性代数和微积分的本质;
•教科书:线性代数,Axler;
•教科书:Tibshirani等人的统计学习元素;
•课程:斯坦福大学的CS229(机器学习)课程笔记。
数学用于机器学习研究
我如今想要描述对于机器学习中以研究为导向的工做有用的数学思惟方式。机器学习研究的观点指向即插即用系统,在这些系统中,模型会投入更多计算以训练出更高的性能。在某些圈子里,研究人员仍然怀疑缺少数学严谨性的方法能够将咱们带入人类智慧的圣杯。
值得关注的是,研究人员须要提供原始资源,例如新的基础构建模块,可用于获取全新的洞察力和实地目标的方法。这可能意味着从新思考用于图像分类的卷积神经网络等基础模块,正如Geoff Hinton在他最近的Capsule Networks 论文中所作的那样。
为了实现机器学习的下一步,咱们须要提出基本问题。这须要深度数学成熟,由于整个过程涉及数千小时的“卡住”,提出问题,并在追求新问题时翻转问题观点。“有趣的探索”使科学家们可以提出深入,富有洞察力的问题,而不只仅是简单的想法/架构的结合。
ML研究是一个很是丰富的研究领域,在公平性、可解释性和可访问性方面都存在紧迫问题。愈来愈多的研究者但愿从数学的角度来解决这些问题,而非辩证性的去看待问题。
本文做者:【方向】
本文为云栖社区原创内容,未经容许不得转载。