算法工程獅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

相關文章
相關標籤/搜索