精通数据科学(4)第3章 数学基础:微积分

微积分是高等数学的基础,也是现代数学的开端。

正如其名字,微积分主要包含两个互补的方面:导数 (微分)和积分 。

  • 导数主要研究函数在局部的变化速率,比如根据物体的位置函数求其移动速度。
  • 积分与之相反,常被用于计算函数在一段范围内的累积效应。

比如上一节中,针对连续型随机变量,根据它的概率密度函数,计算随机变量落在某区间内的概率。

在数据科学领域,积分更多地被用于理论研究,接触的机会较少;而导数则被大量使用,主要用于工程实现(求解最优化问题)。因此后者是本节介绍的重点。

导数和积分:位置、速度

与前文内容类似,本节依然通过一个例子来引入微积分的基本概念。这个例子读者都无比熟悉:行走(是的,在走路时,我们就在接触微积分)。

为了易于理解,假设我们研究的对象叫小明,小明的行走路线是直线。行走的过程中会涉及两个量:位置和速度,记$l(t)$ 为 $t$时刻离起点的距离,而 $v(t)$为$t$ 时刻的速度。

这两个函数是相互关联的,速度是位置的瞬间变化,而位置是速度在一段时间内的积累。

微积分解决的就是如何从函数$l(t)$ 中导出函数 $v(t)$(导数),以及如何从函数$v(t)$ 中导出函数 $l(t)$(积分),如图所示。

当已知时刻$t_1$ 的位置$l(t_1)$ 以及时刻$t_2$ 的位置$l(t_2)$ 时,可以很容易地得出这段时间内的平均速度为$\overline{v}=\frac{l(t_2)-l(t_1)}{t_2-t_1}$ 。

当小明匀速前进时,那么这段时间内任一时刻的速度 $v(t),t_1 \leq t \leq t_2$都等于这个平均速度 $\overline{v}$。

如果小明不是匀速前行呢?那么 $t_1$时刻的速度就和平均速度存在一定的差异,但显然时间间隔越短,平均速度 $\overline{v}$离 $t_1$的速度 $v(t_1)$也就越接近。当时间间隔达到极限0时,$\overline{v}$ 就会等于$v(t_1)$ 。用数学语言表述就是平均速度的极限等于起点时刻的速度,如公式所示 :

$$\lim_{t_2 \rightarrow t_1}\frac{l(t_2)-l(t_1)}{t_2-t_1}=\lim_{t_2 \rightarrow t_1}\overline{v}=v(t_1)$$

这个计算过程在数学上被称为求函数的导数,记为$l^{\prime}(t)=v(t)$ 。

当然公式和公式之前的表述在数学上并不严谨,因为函数 $l(t)$可能并不是可微函数。也就是说,极限 $\lim_{t_2 \rightarrow t_1}\frac{l(t_2)-l(t_1)}{t_2-t_1}$并不存在。因此严谨的表述为,如果 函数 $l(t)$是可微函数,则起点时刻的速度等于平均速度的极限。

导数的物理含义是非常明确的,当自变量 $t$变化很小的量 $dt(d代表\Delta)$时(在数学上, $dt$被称为无穷小量),因变量 $l(t)$的变化幅度大约为 $v(t)dt$ ,记为 $dl(t)=l^{\prime}(t)dt$ 。在数学上,上面的公式叫作微分。

我们可以对速度函数 $v(t)$继续求导,得到 $v(t)$的一阶导数,同时也是$l(t)$ 的二阶导数,它表示小明前进的加速度 $a(t)=v^{\prime}(t)=l^{{\prime}{\prime}}(t)$。以此类推可以定义函数$l(t)$ 的$n$ 阶导数 ,记为$l^n(t)$ 。

与一阶和二阶导数不同,高阶导数在现实世界里的意义其实很模糊。正因为如此,微积分的发明者之一牛顿先生曾宣称,三阶及其以上的导数都是无意义的。但现实并非如此,高阶导数的应用范围还是非常广泛的。比如1972年美国总统竞选期间,尼克松号称他在任内让通货膨胀的加速度减缓。这让尼克松成为历史上第一位用三阶导数证明自己才能的国家领导人。

类似地,当已知小明时刻 $t_1$的速度等于$v(t_1)$ ,位置等于 $l(t_1)$时,假设小明是匀速前进的,那么$t_2$ 时刻,小明所在的位置是 $l(t_2)=l(t_1)+v(t_1)(t_2-t_1)$。如果小明不是匀速前进,显然按匀速前进估算的位置(即 $l(t_1)+v(t_1)(t_2-t_1)$)和实际位置(即 $l(t_2)$)存在一定误差。那应该如何减少这个误差呢?我们考虑将时间区间$[t_1,t_2]$ 分为$n+1$ 段,不妨设相应的分段时间点为 $x_0,x_1,...,x_n$,具体的计算公式如下:

$$x_0=t_1;x_{i+1}=x_i+\frac{t_2-t_1}{n}$$

在每一个小的时间段内,小明的移动可以近似为匀速前进。那么 $t_2$时刻估算的位置为:

$$l(t_1) + \sum_{i=0}^nv(x_i)\frac{t_2-t_1}{n}$$

数学上可以证明,在一定条件下 ,$n$ 越大,公式得到的估算结果离$l(t_2)$ 就越近。当 $n$趋近于正无穷大时,这两者就完全相等了。

$$l(t_2)-l(t_1)=\lim_{n \to \infty}\sum_{i=0}^nv(x_i)\frac{t_2-t_1}{n}=\int_{t_1}^{t_2}v(t)dt$$

在数学上,该公式被称为积分,记为$l(t)=\int v(t)d(t)$ 。因此可以看到导数和积分就像加减法一样,可以相互推导,互为逆运算。

当以上公式的极限存在时,函数 $v(t)$称为可积函数。更准确地说,它是黎曼可积函数(Riemann integral)。在数据科学领域,常遇到的函数都是可积可微的函数。

在数学上,除了黎曼积分外,常用的积分还有勒贝格积分(Lebesgue integral)。这个积分的定义涉及实变函数理论,比较复杂,而且它在数据科学领域多用于理论研究,因此在这里就不做讨论了。

数学上的导数计算其实就是求函数的极限,而后者通常是比较复杂的。因此数学家们提供了简单函数的导数,以及将复杂函数导数分解为简单函数导数的计算法则。下面将列举导数计算的四则运算法则以及常见简单函数的导数。其中, $f$和 $g$ 都是可导函数。

$$(f\pm g)^{\prime}=f^{\prime} \pm g^{\prime}$$

$$(f g)^{\prime}=f^{\prime}g \pm fg^{\prime}$$

$$(\frac{f}{g})^{\prime}=\frac{f^{\prime}g - fg^{\prime}}{g^2}$$

$$c^{\prime}=0$$

$$(x^n)^{\prime}=nx^{n-1}$$

$$\sin(x)^{\prime}= \cos(x);\cos(x)^{\prime}=- \sin(x)$$

$$(e^x)^{\prime}=e^x;\ln(x)^{\prime}=\frac{1}{x}$$

极限:变化的终点

在导数的定义中,我们使用了极限这个数学概念。在研究函数微分时,我们又引入了另一个概念:无穷小量 $dt$ 。这两个概念是数学上非常深刻的结论,在历史上,还曾引起了所谓的第二次数学危机,在此做一个简单的介绍。

当牛顿和莱布尼兹各自独立发明微积分时,他们都使用如图所示的推导方法计算函数的导数(以函数 $x^2$为例)。在计算过程中,无穷小量 $\Delta x$时而不等于0,时而又等于0。这就是著名的贝克莱悖论:“幽灵般的无穷小”。

为了解决这个危机,以柯西为首的数学家建立了严格的实数极限理论,将无穷小量理解为一个过程而非一个确定的量。具体地,函数$f(x)$ 在点 $x_0$的导数 定义为:对于任意一个 $\varepsilon >0$ ,都存在一个 $\delta >0$,使得任何 $x \in (x_0-\delta,x_0+ \delta)$且 $x\not ={x_0}$ ,都能使如下公式成立(这段表述在数学上是非常著名的 $\varepsilon - \delta$语言,相信数学背景较强的读者一定对它非常熟悉)。

$$|\frac{f(x)-f(x_0)}{x-x_0} -f^{\prime}(x_0)| \leq \varepsilon$$

类似地,微分公式 $df(x)=f^{\prime}dx$ 也表示这样一个动态过程,而非通常意义上的静态相等。

戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz),德国数学家、哲学家。他与牛顿谁先发明微积分的争论是数学界至今最大的公案。事实上,莱布尼茨对微积分的纪录方法更为简洁明了,现代微积分的数学符号大多起源于他。

奥古斯丁·路易·柯西(Augustin Louis Cauchy),法国数学家。他建立了一系列严格的微积分准则,使后者摆脱了贝克莱悖论的困扰。柯西毕业并任教于法国辉煌灿烂的巴黎综合理工学院(Ecole Polytechnique),大学基础课程《高等数学》里的绝大部分理论都源于此学校。

复合函数:链式法则

该节中之前列举的导数计算的四则运算法则以及常见简单函数的导数公式中,列举了一些常用函数的导数,但这在现实生活中是不够用的,有很多常用的函数都没有被包括在内。

比如多项式函数 $f(x)=(x^2+1)^2$,它并没有在里面。当然,我们可以根据乘法分配律,将函数 $f(x)$改写成最标准的多项式函数,即$f(x)=x^4+2x^2+1$ ,然后再根据导数的加法公式,求得$f(x)$ 的导数$f^{\prime}(x)=4x^3 + 4x=4x(x^2+1)$ 。

但这样计算的效率不高,而且并不是所有的复杂函数都可以如上面那样通过四则运算被分解为简单函数。因此下面将介绍另一种简化复杂函数求导运算的方法:链式法则 。

事实上,多项式函数 $f(x)$ 可以被看为两个简单函数的复合。不妨设 $g(x)=x^2+1$, $h(x)=x^2$,则 $f(x)=h(g(x))$。通常 $f(x)$被称为复合函数 ,记为 $f(x)=h\circ g$ 。

对于复合函数,数学上可以证明如下的等式:

$$(h\circ g)^{\prime}=(h^{\prime} \circ g)g^{\prime}$$

根据该公式,又因为 $h^{\prime}=2x$,所以 $h^{\prime} \circ g = 2g(x)=2(x^2+1)$。由此可以很容易得到$f^{\prime}(x)=4x(x^2+1)$ 。

根据链式法则,可以得到反函数 的导数公式。不妨设 $g$是 $f$ 的反函数,即 $f(g(x))=x$。对这个等式的两边求导数,可以得到:

$$(f^{\prime} \circ g)g^{\prime}=1$$

$$g^{\prime}=\frac{1}{f^{\prime} \circ g}$$

比如 $f(x)=x^3$ 的反函数为 $g(x)=x^{\frac{1}{3}}$,则根据常见简单函数的导数公式以及 $f^{\prime}(x)=3x^2$可以得到 $g^{\prime}(x)=\frac{1}{3(x^{\frac{1}{3}})^2}=\frac{1}{3x^{\frac{2}{3}}}$

根据链式法则,可以得到反三角函数的导数:

$$[arcsin(x)]^{\prime}=\frac{1}{\sqrt{1-x^2}}$$

$$[arccos(x)]^{\prime}=\frac{-1}{\sqrt{1-x^2}}$$

$$[arctan(x)]^{\prime}=\frac{1}{\sqrt{1+x^2}}$$

$$[arccot(x)]^{\prime}=\frac{-1}{\sqrt{1+x^2}}$$

多元函数:偏导数

之前讨论的函数都是单变量函数,即一元函数,但在实际生产中,我们常面对的是多变量函数,即多元函数。因为在数据建模实践中,通常会使用多个自变量,这对应着数学上的多元函数。

对于多元函数,我们使用偏导数来研究函数的局部变化情况。偏导数的基础就是上面介绍的导数,它的定义思路为,选择多元函数中的一个变量作为变量,其他变量被当作常数。然后按照一元函数导数的定义,计算相应的偏导数。

比如多元函数 $f(x,y)=xy+xy^2$。当对变量 $x$ 求偏导时, $y$就被当作常数,反之亦然。由此可以得到:

$$\frac{\partial f}{\partial x}=y+y^2$$

$$\frac{\partial f}{\partial y}=x+2xy$$

显然,上面介绍的导数计算法则对偏导数同样适用。其中加减乘除法则都比较简单,就不再赘述。而多元复合函数的链式法则比较复杂,接下来着重介绍一下。

假设 $f(u,v)$ 是一个二元函数,其中$u=g(x,y),v=h(x,y)$ 。数学上可以证明如下等式:

$$\frac{\partial f}{\partial x}=\frac{\partial f}{\partial u}\frac{\partial u}{\partial x} + \frac{\partial f}{\partial v}\frac{\partial v}{\partial x} $$

$$\frac{\partial f}{\partial y}=\frac{\partial f}{\partial u}\frac{\partial u}{\partial y} + \frac{\partial f}{\partial v}\frac{\partial v}{\partial y} $$

与一元函数的微分类似,在一定条件下 ,多元函数 $f(x_1,x_2,...x_n$ 的微分和偏导数存在如下关系:

$$df = \sum_{i=1}^n\frac{\partial f}{\partial x_i}dx_i$$

当多元函数 $f$ 在给定点某邻域内的各个偏导数存在且偏导函数在该点都连续,则此函数在该点可微,这时以上公式成立。当然在数据科学领域,处理的函数几乎都是可微函数。

事实上,$f$ 的全部一阶偏导数 $(\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_n})$组成了线性空间中的一个向量。这个向量被称为函数的梯度 ,记为 $\bigtriangledown f$ 。梯度在模型的工程实现上发挥了巨大的作用.

极值与最值:最优选择

上面的章节利用大量篇幅讨论了函数的导数和偏导数,那它们的用途是什么呢?答案是求函数的极值 (局部最小最大值)和最值 (全局最小最大值)。其中求函数的最值常被称为最优化问题 ,是数据科学工程实现的核心问题。

为了表述简便,先考虑一元可微函数 $f(x)$ ,此函数在 $x_0$处取得最小值。那么根据导数的定义,可以得到 $f^{\prime}(x_0)=\lim_{x \to x_0}\frac{f(x)-f(x_0)}{x-x_0}$。由于 $f(x_0)$是函数的最小值,因此:

当 $x>x_0$时,

$$\frac{f(x)-f(x_0)}{x-x_0} \geq0$$

当 $x<x_0$时,

$$\frac{f(x)-f(x_0)}{x-x_0} \leq0$$

综合以上两个公式, $f^{\prime}(x_0)=0$。对于最大值,可以证明有相同的结论。拓展到多元可微函数$g(X)$ (其中$X$ 为向量),假设它在$X_0$ 处取得最值,则它的梯度在此点等于0,即 $\bigtriangledown g(X_0)=0$ 。

当然,函数在某点的导数或梯度等于0,并不能保证它在此点一定取得最值,可能只是函数的极值点 或鞍点 (saddle point)等,如图所示。用学术的话来表述,导数或梯度等于0是函数取得最值的必要非充分条件。

尽管不是充要条件,但导数或梯度等于0这个条件提供了筛选可能最值点的方法。在实际中,我们常常使用这个条件来得到备选最值集合,再通过其他方法来最终得到函数的最值。具体细节请参考第6章。

本章小结

本章简单罗列了数据科学领域常用的数学知识,为之后的模型做理论铺垫。

正如本章开头所写的,本章的目的是让读者熟悉后面章节中常遇到的数学概念和数学符号。因此,对于数学定理的证明,往往只做了简单说明,有些定理的严格表述也没有完全展开。

还有一些比较复杂的数学工具,比如凸优化(convex optimization),限于篇幅也没有介绍。

当然,如果将这些内容全部写完,估计本书就会变成好几本“翻开第一页就不想看的数学书”(这是物理学家杨振宁先生对数学书的评论,原文为“数学书有两种:一种是看了第一章就看不下去的,一种是看了第一页就看不下去的”) 。

对数学细节感兴趣的读者,可参考其他专业的数学书籍。比如:

  • Kaare Brandt Petersen和Michael Syskind Pedersen编写的The Matrix Cookbook
  • Eric Lehman编写的Mathematics for Computer Science
  • Gilbert Strang编写的Calculus
  • Stephen Boyd和Lieven Vandenberghe编写的Convex Optimization
© Licensed under CC BY-NC-SA 4.0

想象力比知识更重要! 因为知识是有限的, 而想象力概括着世界的一切, 推动着进步, 并且是知识进化的源泉。——爱因斯坦

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!