算法工程狮1、数学基础 高数

一个算法工程师必须有着良好的数学基础,不然很容易变成一个掉包侠。本文介绍一个算法工程师须要会的一些高数基础。下面的部分中,面试

1.初等函数

$tanh$常常做为激活函数使用
$$tanh=\frac{e^x-e^{-x}}{e^x+e^{-x}}$$算法

2.函数极限

函数极限只须要记住以下运算
$$ ^{limf(x)}_{x\rightarrow{x_0}}=A $$app

函数极限存在与左右极限存在且相等是充要条件函数

$$\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$$spa

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$$blog

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)$

image.png

相关文章
相关标签/搜索