大学时期学的数学如今可能派上用场了,机器学习背后的原理涉及许多数学知识。深刻挖掘一下,你会发现,线性代数、微积分和几率论等都和机器学习背后的算法息息相关。

机器学习算法背后的数学知识你了解吗?在构建模型的过程当中,若是想超越其基准性能,那么熟悉基本细节可能会大有帮助,尤为是在想要打破 SOTA 性能时,尤为如此。
机器学习背后的原理每每涉及高等数学。例如,随机梯度降低算法创建在多变量微积分和几率论的基础上。所以掌握基础的数学理论对于理解机器学习模型很重要。但若是你是没有数学基础的初学者,这里有一份学习路线图,带你从零开始深刻理解神经网络的数学原理。
大多数机器学习都创建在三种数学理论的基础上:线性代数、微积分和几率论,其中几率论的理论又基于线性代数和微积分
。

微积分
微积分包括函数的微分和积分。神经网络本质上是一个可微函数,所以微积分是训练神经网络的基本工具。
首先,函数的导数定义以下

在极限定理中,这也是点 x 处切线的斜率。下图说明了这个概念:

将函数的导数可视化。
微分能够用来优化函数:导数在局部极大值和极小值处为零。(也有例外,例如:f(x) = x³,x=0),导数为零的点称为临界点。临界点是最小值仍是最大值能够经过查看二阶导数来肯定:

求导存在一些基本法则,其中最重要的多是链式求导法则:

上式告诉咱们如何计算复合函数的导数。
微分和积分互为逆运算,这是由于:

它适用于任何可积函数 f(x)。函数的积分也能够看做是曲线下的有符号面积。例如:

由于当函数是负的时候,这里的面积也有一个负号:

在 -π到π的区间内,正弦函数曲线下的有符号面积。
推荐一些比较好的学习资源,麻省理工学院的单变量微积分课程和 Gilbert Strang 的教科书。
-
MIT 课程连接:https://www.youtube.com/playlist?list=PL590CCC2BC5AF3BC1
-
教科书连接:https://ocw.mit.edu/resources/res-18-001-calculus-online-textbook-spring-2005/textbook/

线性代数
神经网络本质上是函数,它是用微积分工具训练的。然而,又涉及线性代数,如矩阵乘法。线性代数是一门涉及机器学习许多方面的庞大学科,所以这将是一个重要的部分。
向量空间
为了更好地理解线性代数,建议从向量空间开始。首先介绍一个特例,把平面上的每一个点看做一个元组:

这些本质上是从零指向(x₁,x2)的向量。向量之间能够相加,向量也可与标量相乘:

这是向量空间的原型模型。通常来讲,若是能够将向量相加并将向量与实数相乘,那么这组向量 V 就是实数上的向量空间,那么如下属性成立:

这些保证了向量能够相加和缩放。当考虑向量空间时,若是你在内心把它们建模为 R^2 会颇有帮助。
范数空间
若是你很了解向量空间,下一步就是理解怎样测量向量的大小。在默认状况下,向量空间自己并无提供这样的工具。但咱们有:

这是一种特殊的范数,一般,若是存在函数,则向量空间 V 是范数的:

范数为:

但这是一个简单而基本的概念,有不少范数存在,但最重要的是 p 范数家族:

当 p=2 时,咱们获得上述特例以及最高范数。

有时,例如对于 p = 2,范数来自所谓的内积,即双线性函数。

所以:

具备内积的向量空间称为内积空间。经典的是欧几里得积。

每个内积均可以变成一个范数。

当两个向量的内积为零时,这两个向量彼此正交。
基正交 / 正交基
虽然向量空间是无穷的(在本文的例子中),你能够找到一个有限的向量集,用来表示空间中的全部向量。例如,在平面上,咱们有:

其中 e1,e2 函数以下

这是基和正交基的一个特例。通常来讲,基(basis)是向量的最小集合:

它们的线性组合跨越了向量空间:

任何向量空间都存在一个基(它可能不是一个有限集,但这里没必要关心)。毫无疑问,在讨论线性空间时,基大大简化了问题。
当基中的向量相互正交时,咱们称之为正交基(orthogonal basis)。若是每一个正交向量的范数在正交基础上均为 1,则咱们说它是正交的。
线性变换
与向量空间很是相关的是线性变换(linear transformation)。若是你以前了解神经网络,就应该知道其基本的构建基块是如下形式的层:

其中,A 为矩阵,b 和 x 为向量,σ为 sigmoid 函数(或是其余激活函数)。Ax 是线性变换的一部分,则函数:

是向量空间 V 和 W 之间的线性变换

对于 V 中的全部 x、y 值都成立,并且都是实数。
矩阵及其运算
矩阵最重要的运算是矩阵乘积。一般,矩阵 A、B 以及乘积 AB 表示为:


下图演示了计算过程:

矩阵乘法是线性变换的组合。若是你想了解更多,这里有一篇很棒的文章:
https://towardsdatascience.com/why-is-linear-algebra-taught-so-badly-5c215710ca2c

决定因素
行列式是线性代数中最具挑战性的概念之一。要了解这一律念,请观看下面的视频。
总而言之,矩阵的行列式描述了在相应的线性变换下,对象的体积是如何缩放的。若是变换改变方向,行列式的符号为负。
特征值、特征向量和矩阵分解
标准的线性代数课程一般以特征值 / 特征向量和一些特殊的矩阵分解(如奇异值分解)结束。假设咱们有一个矩阵 A,而且若是有一个向量 x(称为特征向量),那么λ就是矩阵 A 的特征值:

换句话说,由 A 表示的线性变换对向量 x 进行一个λ缩放,这个概念在线性代数中起着重要做用(实际上在普遍使用线性代数的每一个领域都是如此)。
你须要熟悉矩阵分解,从计算的角度来看,对角矩阵是最好的选择,若是一个线性变换有一个对角矩阵,那么计算它在任意向量上的值是很简单的。

大多数特殊形式的目的是将矩阵 A 分解为矩阵乘积,矩阵分解后最好有一个是对角矩阵。奇异值分解(SVD),是指有一个特殊的矩阵 U 和一个对角矩阵Σ,使得:

U 和 V 是酉矩阵,是一个特殊的矩阵族。奇异值分解(SVD)也被用来进行主成分分析,这是最简单和最著名的降维方法之一。
线性代数有许多教授方法,本文列出的学习路径是受 Sheldon Axler 教材《Linear Algebra Done Right》的启发。对于在线讲座,MIT 的网络公开课值得推荐。
-
Sheldon Axler 的教材地址:http://linear.axler.net/
-
MIT 的网络公开课地址:https://www.youtube.com/playlist?list=PL49CF3715CB9EF31D

多变量运算
多变量运算中将线性代数和微积分结合在一块儿,为训练神经网络的主要工具奠基了基础。从数学上讲,神经网络只是多个变量的函数(尽管变量数量可达数百万)。
与单变量运算类似,两个重点是微分和积分。假设存在映射:

将向量映射到实数。在二维(即 n=2)的状况下,能够将其图象想象为一个曲面(因为人类生活在三维世界,所以很难将具备两个以上变量的函数可视化)。

两变量的函数图像。
多变量微分
在单变量中,导数是切线的斜率。那么在此应该如何定义切线呢?表面上的一个点处不仅有一条切线,而是多条。这些切线中有两条特殊的切线:分别为平行于 x-z 平面的切线和平行于 y-z 平面的切线。
这两条切线的斜率由偏导数决定,以下:

这些特殊方向的切线横跨切平面。

切平面。
梯度
另外一个特殊的方向是梯度方向:

梯度始终指向增长最快的方向,所以沿这个方向前进一小步,高度上的增长相对于其余方向是最大的。这就是梯度降低的基本思想,它是让函数最大化的算法。其步骤以下:
-
计算当前位置 x_0 处的梯度。
-
在梯度方向上走一小步便可到达点 x_1(步长称为学习率)。
-
返回步骤 1,重复该过程,直至收敛为止。
固然,这种算法也存在一些缺陷,多年来这些缺陷也获得了一些改善。基于现代梯度降低的优化器采用了许多技巧,例如自适应步长、动量等。
在实践中计算梯度是一件很困难的事,函数常常由其余函数的组成部分构成。例如,线性层:

其中 A 是矩阵,b 和 x 是矢量,σ是 sigmoid 函数(固然还有其余激活函数)。如何计算梯度?

写成以下的矢量 - 标量函数:

g 的梯度由矩阵定义,该矩阵的第 k 行是第 k 个份量的梯度

该矩阵被称为 g 的总导数。在该例中

包含两个函数

和

定义中用到了单变量 sigmoid 份量。将函数进一步分解为从 n 维向量空间映射到实数空间的 m 个函数:

其中:

若是计算总导数,则会看到:

这是多元函数的链式规则,具备通用性。没有它就没有简单的方法来计算神经网络的梯度。而神经网络是许多函数的组合。
高阶导数
与单变量的状况相似,梯度和导数在肯定空间中的给定点是局部极小值仍是极大值方面(或者二者都不是)也起做用。
举一个具体的例子,训练神经网络等效于最小化参数训练数据上的损失函数。这就是找到最佳参数配置 w 的目的:

其中:

分别是神经网络和损失函数。
对于 n 个变量的通用可微分矢量 - 标量函数,存在 n^2 个二阶导数。造成 Hessian 矩阵。

在多变量的状况下,Hessian 的行列式充当二阶导数的角色。相似地,它还能够用来判断临界点(即全部导数均为零的状况)是最小值、最大值、鞍点中的哪种。
关于多元微积分有不少很棒的在线课程。课程地址:
-
https://www.youtube.com/playlist?list=PLSQl0a2vh4HC5feHa6Rc5c0wbRTx56nF7,
-
https://www.youtube.com/playlist?list=PL4C4C8A7D06566F38。
如今咱们准备开始最后一个主题:几率论!

几率论
几率论是将机率数学化的学科,它是全部科学领域的理论基础。
假设掷硬币,有 50%的几率(或 0.5 的几率)为正面。重复实验 10 次后,获得多少个正面?若是你回答了 5,你就错了。正面几率为 0.5 并不能保证每两次投掷都有一面是正面。相反,这意味着若是你重复实验 n 次,其中 n 是一个很是大的数字,那么正面的数量将很是接近 n/2。
为了更好的掌握几率论,推荐一篇文章:https://towardsdatascience.com/the-mathematical-foundations-of-probability-beb8d8426651

除了基础知识以外,你还须要了解一些高阶知识,首先是指望值和熵。
指望值
假设你和朋友玩游戏。你掷一个经典的六边形骰子,若是结果是 1 或 2,你将赢得 300 美圆。不然,你就输 200 美圆。若是你玩这个游戏的时间够长,你每轮的平均收入是多少?你应该玩这个游戏吗?
那么,你有 1/3 的几率赢 300 美圆,2/3 的几率输 200 美圆。也就是说,若是 X 是编码掷骰子结果的随机变量,那么:

一般来讲,当用于离散型随机变量时,指望值定义以下:

当用于实值连续型随机变量时,定义以下

在机器学习中,训练神经网络所用的损失函数在某种程度上是指望值。
大数定律
人们经常错误地把某些现象归因于大数定律。例如,那些连输的赌徒相信,根据大数定律,他们很快就会赢。这是彻底错误的。让咱们看看这究竟是什么。假如:

是表明同一实验中独立重复的随机变量 (例如,掷骰子或扔硬币)。
本质上,大数定律指出:

从长远来看,结果平均值等于指望值。
给出的一种解释是,若是一个随机事件重复了不少次,则单个结果可能可有可无。所以,若是你在赌场玩一个指望值为负的游戏,那么偶尔也会赢。但大数定律意味着你会赔钱。
此外,随机梯度降低中 LLN 很重要。
信息论
让咱们玩个游戏。玩家心理想着 1-1024 的任意数字,而后你来猜。你能够问问题,但你的目标是使用尽量少的问题。你须要多少问题?
若是你玩得很聪明,则可使用二分搜索方法处理问题。首先你可能会问:这个数字在 1 和 512 之间吗?这样一来,搜索空间就减小了一半。使用此策略,你能够在

问题中找出答案。
可是若是在选数字时没有使用均匀分布呢?例如,能够用泊松分布。

泊松分布的几率质量函数。图源:https://en.wikipedia.org/wiki/Poisson_distribution
使用泊松分布可能须要较少的问题,由于分布每每集中在特定的点上(这取决于参数)。
在极端状况下,当分布集中在一个数字上时,你不须要任何问题来猜它。通常来讲,问题的数量取决于分布所携带的信息。均匀分布包含的信息量最少,而奇异分布是纯信息。
熵是一种量化的方法。当用于离散随机变量时,定义以下:

当用于连续实值变量,定义以下:

若是你之前使用过度类模型,可能会遇到交叉熵损失,定义以下:

其中 P 是真实值(集中到单个类的分布),而 P^ 表示类预测。这衡量了预测与实际状况相比有多少信息。当预测相匹配时,交叉熵损失为零。
另外一个经常使用量是 Kullback-Leibler 散度(KL 散度),定义为:

其中 P 和 Q 是两个几率分布。这本质上是交叉熵减去熵,熵能够被认为是对两个分布的不一样程度的量化。例如,在训练生成式对抗网络时,这是颇有用的。最小化 KL 散度能够保证两个分布是类似的。
在这里推荐两本书:
-
Pattern Recognition and Machine Learning by Christopher Bishop
-
The Elements of Statistical Learning by Trevor Hastie, Robert Tibshirani, and Jerome Friedman
基于此,咱们回顾了理解神经网络所必需的数学知识。可是要真正理解神经网络是如何工做的,你还必须学习一些优化和数理统计。这些科目创建在数学的基础之上,在这就不进行介绍了。