一个算法工程师必须有着良好的数学基础,否则很容易变成一个掉包侠。本文介绍一个算法工程师需要会的一些高数基础。下面的部分中,
1.初等函数
$tanh$经常作为激活函数使用
$$tanh=\frac{e^x-e^{-x}}{e^x+e^{-x}}$$
2.函数极限
函数极限只需要记住如下运算
$$ ^{limf(x)}_{x\rightarrow{x_0}}=A $$
函数极限存在与左右极限存在且相等是充要条件
$$\lim\limits_{x\rightarrow{x_0}}f(x)=A\Leftrightarrow\lim\limits_{x\rightarrow{x_0^+}}f(x)=\lim\limits_{x\rightarrow{x_0^-}}f(x)=A$$
3.两个重要极限
下面两个极限都是通过夹逼定理证明得到
$$\lim\limits_{x\rightarrow0}\frac{sinx}{x}=1$$
$$\lim\limits_{x\rightarrow\infin}(1+\frac{1}{x})^x=\lim\limits_{x\rightarrow\infin}(1+\frac{1}{x})^x=\lim\limits_{x\rightarrow\infin}(1+\frac{1}{x})^x=e$$
4.极限的运算规律
在同一运算过程下,极限运算满足如下规律
$$\lim(f(x)+-\times\div g(x))=limf(x)+-\times\div limg(x)$$
复合函数满足如下运算
$$\lim\limits_{x\rightarrow{x_0}}f(\varphi(x))=\lim\limits_{u\rightarrow{u_0}}f(u)=A,前提是\varphi(x_0)=u_0$$
5.无穷小量
无穷小量很重要,它将函数和极限进行转化,即极限形式我们可以将其转化为函数形式
$$^{limf(x)}_{x\rightarrow{x_0}}=A\Leftrightarrow f(x)=A+\alpha(x),\alpha(x)为x\rightarrow x_0的无穷小$$
等价无穷小(相除)是比较重要的性质,可以通过等价无穷小将极限进行等价代换转化求解,即当$f_1(x)\sim g_1(x),f_2(x)\sim g_2(x)$
$$\lim\limits_{x\rightarrow x_0}\frac{f_1(x)}{f_2(x)}=\lim\limits_{x\rightarrow x_0}\frac{g_1(x)}{g_2(x)}$$
一些常用的等价无穷小如下,过程均为$x\rightarrow 0$:
$$ 1-cosx\sim 1/2x^2,tanx\sim x,sinx\sim x,ln(1+x)\sim x,e^x-1\sim x$$
6.函数连续性
函数连续的定义是:极限存在,函数在此处有定义,并且极限值等于函数值,公式形式如下:
$$\begin{cases}\lim\limits_{x\rightarrow x_0}f(x)=f(x_0)\\\ \lim\limits_{\Delta x\rightarrow 0}\Delta y=\lim\limits_{\Delta x\rightarrow 0}[f(x_0+\Delta x)-f(x_0)]=0,x增量\rightarrow0,y增量\rightarrow0\end{cases}$$
函数连续则函数左连续且右连续,且二者相等但是,可导一定连续,连续不一定可导!$Relu$激活函数在$x=0$处连续,但不可导
当进行复合运算时,即使$\varphi(x)$在$x_0$处不连续,只要$\lim\limits_{x\rightarrow x_0}=u_0$存在,并且$f(u)在u_0$处连续,那如下结论仍然成立
$$\lim\limits_{x\rightarrow{x_0}}f(\varphi(x))=\lim\limits_{u\rightarrow{u_0}}f(u)$$
7.一致连续性
定义:只要$|x_1-x_2|<\delta,就有|f(x_1)-f(x_2)|<\epsilon$,则称为一致连续
开区间上,一致连续则连续
闭区间上,连续则一定一致连续
8.导数
导数真的太太太重要了,一切基于梯度的优化算法都要涉及到导数,甚至深度学习的反向传播均基于导数计算,理解导数至关重要
导数可以通过极限来定义
$$f'(x_0)=\lim\limits_{\Delta x\rightarrow0}\dfrac{f(x_0+\Delta x)-f(x_0)}{\Delta x}=\lim\limits_{\Delta x\rightarrow0}\dfrac{\Delta y}{\Delta x}$$
还是那句话,一定要记住:可导一定连续,连续不一定可导
其他的记住如下几条:
- 导数运算法则:$(uv)'=u'v+uv',(\frac{v}{u})'=\frac{v'u-vu'}{u^2}$,可以通过导数的极限定义来证明
- 莱布尼茨公式:$(uv)^{(n)}=\sum\limits_{k=0}^{n}C_n^ku^{(n-k)}v^k$
- 隐函数求导:$F(x,y)=0$,应用隐函数求导法则
9.微分
提起导数,一定要说一下微分,二者是充要条件。可导一定可微,可微则一定可导。微分的思想主体就是“以直代曲”:以直线方程在局部近似曲线。
以下是这一系列方程的推导
$$\begin{cases}f'(x)=\lim\limits_{x\rightarrow x_0}\frac{f(x)-f(x_0)}{x-x_0}\\\ \Rightarrow\frac{f(x)-f(x_0)}{x-x_0}=f'(x_0)+\alpha(x\rightarrow x_0)\\\ \Rightarrow f(x)=f(x_0)+f'(x_0)(x-x_0)+\alpha(x-x_0)\\\ \Rightarrow L(x)=f(x)\approx f(x_0)+f'(x_0)(x-x_0)\end{cases}$$
直线$L(x)$可在$x_0$处近似函数$f(x)$。具体到微分的定义,就是存在常数A,使得$\Delta y=A\Delta x+\alpha(\Delta x) 或\Delta y\approx A\Delta x$,则称函数在$x_0$可微
到目前,微分给出的是一种$\Delta y$近似形式,而拉格朗日中值定理给出的是精确形式,具体如下:
微分形式:$\Delta y=f'(x_0)\Delta x+\alpha(\Delta x)$
拉格朗日:$\Delta y=f'(x_0+\theta\Delta x)\Delta x,\theta\in(0,1)$
微分部分还需要掌握洛必达法则,高中就学过:
$$\lim\limits_{x\rightarrow x_0}\dfrac{f(x)}{g(x)}=\lim\limits_{x\rightarrow x_0}\dfrac{f'(x)}{g'(x)}$$
10.泰勒公式
泰勒公式更为重要,在GBDT、XGB、牛顿法、梯度下降都有用到其思想,泰勒公式就是用多项式近似函数。泰勒展开的形式:$f(x)=P_n(x)+R_n(x)$,其中第一项为泰勒展开式,后一项为皮亚诺余项。
$P_n(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{1}{2}f''(x_0)(x-x_0)^2+...+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n=\bold{\sum\limits_{k=0}^{n}\dfrac{f^{(k)}(x_0)}{k!}(x-x_0)^k}$
至于泰勒公式是怎么得来的,简单说一下:$P_n(x)$要近似$f(x)$,需要满足以下条件:
$$\begin{cases}P_n(x_0)=f(x_0)\\\ P_n'(x_0)=f'(x_0)\\\ P_n''(x_0)=f''(x_0)\\\\......\\\ P_n^{(n)}(x_0)=f^{(n)}(x_0)\end{cases}$$
由此也就得到了泰勒公式的形式。特别地,当$x_0=0$即在0点处对函数进行泰勒展开时,称作麦克劳林公式,因为形式简单也非常有用:
$$P_n(x)=f(0)+f'(0)x+\frac{1}{2}f''(0)x^2+...=\sum\limits_{k=0}^{n}\dfrac{f^{(k)}(0)}{k!}x^k$$
至于$R_n(x)$,皮亚诺余项是不精确表示,想要精确表示还是要用到我们前面说的拉格朗日中值定理来搞,也就得到了拉格朗日余项:
$$L_n(x)=\dfrac{f^{(n+1)}(x_0)}{(n+1)!}(x-x_0)^{n+1}$$
11.牛顿法
这里的牛顿法指的是牛顿切线法,属于迭代法求根的一种方法,并不是优化算法中的牛顿法,那个后面会讲
对问题$f(x_0)=0$求解时,运用微分思想以直代曲,或者说对函数做一阶泰勒展开,会得到$f(x)=f(x_0)+f'(x_0)(x-x_0),令f(x_0)+f'(x_0)(x-x_0)=0$,可以得到:
$$x_1=x_0-\dfrac{f(x_0)}{f'(x_0)}$$
如此迭代求解,当x不再有明显变化时,即得$f(x)=0$的根。使用牛顿法收敛速度快,但是对初值的选取要求很高
12.积分上限函数
之所以要理解积分,是因为在概率密度函数求概率分布函数时需要用到积分。而算法工程师的概率论是绕不开的。对于积分,暂且只需记住牛顿-莱布尼茨公式和变上限积分函数公式即可
牛顿莱布尼茨公式:$\int_{a}^{b}f(x)dx=F(b)-F(a)$
变上限积分函数:$\begin{cases}\int f(\varphi(x))\varphi'(x)dx=F(\varphi(x))+C \\\ \dfrac{d}{dx}\int_{a}^{\varphi(x)}f(t)dt=f(\varphi(x))\varphi'(x) \\\ \int_{a}^{b}f(x)dx=\int_{\alpha}^{\beta}f(\varphi(t))\varphi'(t)dt,x=\varphi(t)\space and\space \varphi(\alpha)=a\space and\space \varphi(\beta)=b\end{cases}$
13.外积
只需要记住外积是个啥就行了,平时我们用的最多的是内积或者说是点积,$a=(a_1,a_2,a_3),b=(b_1,b_2,b_3)$,外积定义如下:
$$a\times b=\bigg(\begin{vmatrix}a_2\quad a_3\\\ b_2\quad b_3\end{vmatrix},\begin{vmatrix}a_3\quad a_1\\\ b_3\quad b_1\end{vmatrix},\begin{vmatrix}a_1\quad a_2\\\ b_1\quad b_2\end{vmatrix}\bigg)$$
若$a//b,则a\times b=0$
14.平面方程
平面方程为啥子要学?都知道导数运算是沿线相乘,分线相加,尤其深度学习反向传播过程的计算,可有没有想过这样做的道理是什么?看了平面方程与微分后,相信你会有自己的理解
点法式:$A(x-x_0)+B(y-y_0)+C(z-z_0)=0$
一般方程:$Ax+By+Cz+D=0$
点到平面的距离:$d=\dfrac{|Ax_0+By_0+Cz_0+D|}{\sqrt{A^2+B^2+C^2}}$,距离计算公式在Perceptron和SVM会见到
15.n重极限
向量$x(x_1,x_2,...,x_n)$以任意路径趋近于$x_0$时,$f(x)\rightarrow a$,值得注意的是,当累次极限存在,那么其必定等于极限$\lim\limits_{x\rightarrow x_0}\lim\limits_{y\rightarrow y_0}f(x,y)=\lim\limits_{y\rightarrow y_0}\lim\limits_{x\rightarrow x_0}f(x,y)=\lim\limits_{x\rightarrow x_0,y\rightarrow y_0}f(x,y)$
16.偏导数
$Z=f(x,y)$关于$x$的偏导数:令$y=y_0,\dfrac{\partial z}{\partial x}=\dfrac{df(x,y_0)}{dx}\bigg|_{x=x_0}=f'_x(x_0,y_0)$
偏导数的极限形式:$\lim\limits_{\Delta x\rightarrow 0}\dfrac{\Delta _xZ}{\Delta x}=\lim\limits _{\Delta x\rightarrow0}\dfrac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}$,相当于函数$Z在y=y_0时沿x轴曲线的斜率$
极为重要的一点是:如果二阶导数$\dfrac{\partial^2 z}{\partial x\partial y}和\dfrac{\partial^2 z}{\partial y\partial x}存在且连续,则二者相等$,这也就是为什么Hessian矩阵是一个实对称矩阵
17.全微分
全微分与微分类似,只不过这里一元函数变成了多元函数的微分。思想是“以平面代曲面”,这是指:
$$\Delta Z=f_x'(x_0,y_0)\Delta x+f_y'(x_0,y_0)\Delta y+\alpha(\sqrt{\Delta x^2+\Delta y^2})\\\ \Rightarrow dZ=f'_x(x_0,y_0)dx+f'_y(x_0,y_0)dy$$
我们会发现,这不就是平面方程嘛:
$$f(x,y)=f(x_0,y_0)+f'_x(x_0,y_0)(x-x_0)+f'_y(x_0,y_0)(y-y_0)$$
也就是说,我们用$dz近似代替\Delta z$,所以全微分就是一个平面方程,所以多元函数求导或者说求全微分就是沿线相乘,分线相加,符合叠加原理
18.隐函数求导数
运用上述全微分叠加原理,我们可以得到隐函数求导法则:
$$F(x,y(x))=0\Rightarrow F'_x+F'_y\dfrac{d_y}{d_x}=0\Rightarrow \dfrac{d_y}{d_x}=-\dfrac{F'_x}{F'_y}$$
19.方向导数与梯度
这里是比较重要的一个知识点,无论平时或者面试经常会被问到。偏导数是沿着坐标轴的导数,而方向导数是沿着任意向量$u(cos\alpha,cos\beta)$的导数:
$$D_uf(x_0,y_0)=\lim\limits_{t\rightarrow 0}\dfrac{f(x_0+cos\alpha,y_0+cos\beta)-f(x_0,y_0)}{t}$$
如果函数可微,则方向导数存在,且方向导数也是平面的形式:
$$D_uf(x_0,y_0)=f_x'(x_0,y_0)cos\alpha+f_y'(x_0,y_0)cos\beta$$
当方向向量为u(1,0)时,是关于x的偏导数,当是u(0,1)时,是关于y的偏导数。梯度向量为$grad=\nabla f(x,y)=(\partial f/\partial x,\partial f/\partial y)$,则方向导数可以写为梯度向量和方向向量的点积形式:$D_uf(x_0,y_0)=\nabla f(x,y).u=|\nabla f(x,y)||u|cos\theta$。
一个重要的思想是:当我们只考虑一阶导数时(如果考虑二阶导,可能情况并不是这么简单),方向导数最大的方向可以认为是函数增长最快的方向,方向导数最小的方向可以认为是函数下降最快的方向。则,当方向向量u与梯度向量方向相反时,方向导数最小,此时夹角为180°,这也就是梯度下降的核心思想:沿着梯度的反方向更新参数,损失函数将极有可能以最快的速度减小。
梯度下降还有另一种解释,就是将目标函数进行一阶泰勒展开,具体在后面会讲。
20.多元函数泰勒公式
混个眼熟,记住就行,二阶泰勒展开式如下:
$$f(x)=f(x_0)+\nabla f(x_0)(x-x_0)^T+\dfrac{1}{2}(x-x_0)H(x_0)(x-x_0)^T+\alpha(|x-x_0|^2)$$
其中,H为Hessian矩阵,当Hessian矩阵正定时,则当前值为极小值,负定时,当前值为极大值
21.拉格朗日乘子法
拉格朗日乘子法在很多地方都会用到,比如求对偶问题,经验分布导出最大熵分布的求解,MEMM等等,不过这些用的是广义拉格朗日函数。
拉格朗日乘子法是求解等式约束条件下的极值问题。在g(x,y)=0时,求z=f(x,y)的最小值。约束条件与函数z的交点处梯度向量平行,由此可以导出方程组:
$$\begin{cases}\nabla f(x_0,y_0)//\nabla g(x_0,y_0)\\\ g(x_0,y_0)=0\end{cases}\Rightarrow\begin{cases}f'_x+\lambda g'_x=0\\\ f'_y+\lambda g'_y=0\\\ g(x_0,y_0)=0\end{cases}$$
构造的拉格朗日函数为$L(x)=f(x,y)+\lambda g(x,y)$