面试总复习 数学基础

线性代数#

矩阵乘法#

(m×n)(n×p)(m×p)A(BC)=(AB)CA(B+C)=AB+AC(m×n)(n×p)→(m×p) \\ A(BC)=(AB)C \\ A(B+C)=AB+AC

转置#

行列互换.

(AT)T=A(A+B)T=AT+BT(AB)T=BTAT(A^T)^T = A \\ (A + B)^T = A^T + B^T \\ (AB)^T = B^T A^T

逆矩阵#

AA1=A1A=I(AB)1=B1A1AA^{-1} = A^{-1}A = I \\ (AB)^{−1}=B^{−1}A^{−1}

n×nn×n 矩阵可逆的条件:

  • 行列式不为 0
  • 秩为 n
  • Ax=0Ax=0 只有零解
  • 特征值不包括 0

单位矩阵#

这也能忘的话我找块豆腐撞死算了.

矩阵的秩#

矩阵中真正包含多少个相互独立的信息方向.

最大线性无关列向量个数, 最大线性无关行向量个数, 且二者一定相等.

线性相关#

如果某个向量能够由其他向量线性组合出来, 就存在信息冗余, 因此线性相关.

给定向量 v1,v2,,vnv_1, v_2, \cdots, v_n , 如果

c1v1+c2v2++cnvn=0c_1 v_1 + c_2 v_2 + \cdots + c_n v_n = 0

只有零解, 则这些向量线性无关, 否则线性相关.

向量内积#

xTy=xy=i=1nxiyix^T y = x \cdot y = \sum_{i=1}^{n} x_i y_i

向量范数#

一般 LpL_p 范数:

xp=(ixip)1/p\|x\|_p = \left( \sum_{i} |x_i|^p \right)^{1/p}

L1 范数即绝对值之和, L2 范数即欧几里得长度.

L1 正则:

L(w)+λiwiL(w) + \lambda \sum_{i} |w_i|

L2 正则:

L(w)+λiwi2L(w) + \lambda \sum_{i} w_i^2

L1 正则倾向于得到稀疏参数 (很可能会让一些特征的权重变成 0), L2 正则倾向于让参数整体变小.

矩阵范数#

Frobenius 范数:

AF=i,jaij2\|A\|_F = \sqrt{\sum_{i,j} a_{ij}^2}

把所有元素摊平为一个长向量, 计算 L2 范数.

特征值和特征向量#

对非零向量 vv , 有:

Av=λvAv = \lambda v

vv 是特征向量, λ\lambda 是对应特征值.

矩阵代表一个线性变换, 而特征向量是经过这个变换之后方向不发生改变的特殊方向, 特征值表示这个方向被缩放多少倍.

计算特征值的方法:

(AλI)v=0(A - \lambda I)v = 0

由于有非零解, 所以:

det(AλI)=0\det(A - \lambda I) = 0

得到特征方程.

正交#

xTy=0x^Ty=0

则称这两个向量正交, 也就是垂直.

若一组向量两两正交且长度均为 1, 则称为标准正交.

对方阵 QQ :

QQT=QTQ=IQQ^T = Q^TQ = I

则称 QQ 为正交矩阵, 并且有 Q1=QTQ^{-1}=Q^T .

正交矩阵的每一列都是单位向量, 且任意两列互相垂直, 行向量同理.

常见正交矩阵包括

正交变换前后, 长度和角度不变.

线性变换#

T(x+y)=T(x)+T(y)T(cx)=cT(x)T(x+y) = T(x) + T(y) \\ T(cx) = cT(x)

任何有限维线性变换都可以写成左乘一个矩阵.

Hadamard 逐元素乘法#

对应位置元素直接相乘, Python 中是 * .

广播机制#

NumPy, PyTorch 中的张量运算规则, 当两个张量形状不同但形状兼容时,自动把较小的张量扩展后进行逐元素运算。

例如:

[a11a12a13a14a21a22a23a24a31a32a33a34]+[b1b2b3b4]\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \end{bmatrix} + \begin{bmatrix} b_1 & b_2 & b_3 & b_4 \end{bmatrix}

bb 自动作用到每一行, 得到:

[a11+b1a12+b2a13+b3a14+b4a21+b1a22+b2a23+b3a24+b4a31+b1a32+b2a33+b3a34+b4]\begin{bmatrix} a_{11} + b_1 & a_{12} + b_2 & a_{13} + b_3 & a_{14} + b_4 \\ a_{21} + b_1 & a_{22} + b_2 & a_{23} + b_3 & a_{24} + b_4 \\ a_{31} + b_1 & a_{32} + b_2 & a_{33} + b_3 & a_{34} + b_4 \end{bmatrix}

广播规则:

  • 维度相等:可以
  • 其中一个维度为 1:可以
  • 某一方不存在该维度:可以补 1
  • 其他情况:不可以

微积分#

梯度#

f=[fx1fx2fxn]\nabla f = \begin{bmatrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \vdots \\ \frac{\partial f}{\partial x_n} \end{bmatrix}

例如对 f(x,y)=x2+y2f (x, y) = x^2 + y^2 , 有:

f=[2x2y]\nabla f = \begin{bmatrix} 2x \\ 2y \end{bmatrix}

梯度方向是函数值增长最快的方向, -\nabla 是函数值下降最快的方向, 这就是梯度下降的原理.

方向导数#

函数沿单位向量 u\mathbf{u} 方向的方向导数是:

Duf=fuD_{\mathbf{u}}f = \nabla f \cdot \mathbf{u}

沿梯度方向时, 方向导数最大.

链式法则#

Lx=Lz3z3z2z2z1z1x\frac{\partial L}{\partial x} = \frac{\partial L}{\partial z_3} \frac{\partial z_3}{\partial z_2} \frac{\partial z_2}{\partial z_1} \frac{\partial z_1}{\partial x}

多元函数求导#

向量到标量的函数导数通常用梯度表示, 例如 $ f (x, y, z) = x^2 + yz $ :

f=[2xzy]\nabla f = \begin{bmatrix} 2x \\ z \\ y \end{bmatrix}

如果是向量到向量的函数需要使用 Jacobian 矩阵.

f(x,y)=[f1(x,y)f2(x,y)]\mathbf{f}(x, y) = \begin{bmatrix} f_1(x, y) \\ f_2(x, y) \end{bmatrix}

Jacobian 矩阵为:

J=[f1xf1yf2xf2y]J = \begin{bmatrix} \frac{\partial f_1}{\partial x} & \frac{\partial f_1}{\partial y} \\ \frac{\partial f_2}{\partial x} & \frac{\partial f_2}{\partial y} \end{bmatrix}

例如:

f(x,y)=[x2+yxy]\mathbf{f}(x, y) = \begin{bmatrix} x^2 + y \\ xy \end{bmatrix}

求导有:

J=[2x1yx]J = \begin{bmatrix} 2x & 1 \\ y & x \end{bmatrix}

Hessian 矩阵#

梯度是一阶偏导数, 那么再对梯度求导就得到二阶偏导数.

Hessian 矩阵定义为:

H=[2fx22fxy2fyx2fy2]H = \begin{bmatrix} \frac{\partial^2 f}{\partial x^2} & \frac{\partial^2 f}{\partial x \partial y} \\ \frac{\partial^2 f}{\partial y \partial x} & \frac{\partial^2 f}{\partial y^2} \end{bmatrix}

例如

f(x,y)=x2+3xy+2y2f(x, y) = x^2 + 3xy + 2y^2

梯度:

f=[2x+3y3x+4y]\nabla f = \begin{bmatrix} 2x + 3y \\ 3x + 4y \end{bmatrix}

Hessian:

H=[2334]H = \begin{bmatrix} 2 & 3 \\ 3 & 4 \end{bmatrix}

Hessian 矩阵可以得到函数沿 v\mathbf{v} 方向的弯曲程度, 例如对 g(t)=f(x+tv)g (t) = f (\mathbf{x} + t\mathbf{v}) , 有方向导数:

g(0)=f(x)Tvg'(0) = \nabla f(\mathbf{x})^T \mathbf{v}

二阶导数:

g(0)=vTHf(x)vg''(0) = \mathbf{v}^T H_f(\mathbf{x}) \mathbf{v}

极值#

梯度为 0 为驻点.

  • Hessian 正定则局部最小
  • Hessian 负定则局部最大
  • Hessian 不定则通常是鞍点

泰勒展开#

多元函数的一阶泰勒展开:

f(x+Δx)f(x)+f(x)TΔxf(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x}

概率统计#

贝叶斯公式#

P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A)P(A)}{P(B)}

主要思想是:

后验概率似然×先验概率\text{后验概率} \propto \text{似然} \times \text{先验概率}

方差#

Var(X)=E[(Xμ)2]Var(X) = E[(X - \mu)^2]

也写作:

σ2=Var(X)\sigma^2 = Var(X)

标准差:

σ=Var(X)\sigma = \sqrt{Var(X)}

常用计算公式:

Var(X)=E[X2]E[X]2Var(X) = E[X^2] - E[X]^2

协方差#

衡量两个变量是否倾向于一起变化.

Cov(X,Y)=E[(XE[X])(YE[Y])]Cov(X,Y)=E[XY]E[X]E[Y]Cov(X, Y) = E[(X - E[X])(Y - E[Y])] \\ Cov(X, Y) = E[XY] - E[X]E[Y]

协方差大于 0, 则 X 大的时候 Y 通常较大; 协方差小于 0, 则 X 大的时候 Y 通常较小.

协方差接近 0, 则 X 和 Y 没有明显的线性关系.

X, Y 独立则协方差为 0, 但反过来一般不成立, 例如 XU(1,1)X \sim U (-1, 1) , 则 XXX2X^2 协方差为 0, 而显然不独立.

高斯分布#

正态分布.

p(x)=12πσ2exp((xμ)22σ2)p(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( - \frac{(x - \mu)^2}{2\sigma^2} \right)

Bernoulli 分布#

只有两种结果的一次随机实验.

期望为 pp , 方差为 p(1p)p (1-p) .

最大似然估计#

Maximum Likelihood Estimation, MLE.

模型参数为 θ\theta , 数据为 x1,x2,,xnx_1, x_2, \dots, x_n , 模型认为:

xip(xθ)x_i \sim p(x|\theta)

如果样本独立,那么观察到这些数据的概率是:

L(θ)=i=1np(xiθ)L(\theta) = \prod_{i=1}^{n} p(x_i|\theta)

称为似然函数, 即对某个特定参数, 出现观察到的数据的概率.

最大似然估计:

θ^MLE=argmaxθi=1np(xiθ)\hat{\theta}_{MLE} = \arg\max_{\theta} \prod_{i=1}^{n} p(x_i|\theta)

由于连乘计算很麻烦, 也有对数版本:

θ^MLE=argmaxθilogp(xiθ)\hat{\theta}_{MLE} = \arg \max_{\theta} \sum_{i} \log p(x_i|\theta)

最大后验估计#

Maximum A Posteriori, MAP.

根据贝叶斯公式有:

P(θD)=P(Dθ)P(θ)P(D)P(\theta|D) = \frac{P(D|\theta)P(\theta)}{P(D)}

对于参数优化而言, P(D)P (D) 应该是和模型参数无关的, 因此有:

θ^MAP=argmaxθP(Dθ)P(θ)\hat{\theta}_{MAP} = \arg\max_{\theta} P(D|\theta)P(\theta)

其中 P(Dθ)P (D|\theta) 是似然, P(θ)P (\theta) 是参数的先验分布.

也就是说, 最大后验估计 = 先验知识 + 最大似然估计.

对数形式:

θ^MAP=argmaxθ[logP(Dθ)+logP(θ)]\hat{\theta}_{MAP} = \arg\max_{\theta} [\log P(D|\theta) + \log P(\theta)]

如果参数的先验分布 P(θ)P (\theta) 是均匀分布, 则最大后验估计=最大似然估计.

正则化可以理解为对参数加入先验.

交叉熵#

熵:

H(p)=xp(x)logp(x)H(p) = -\sum_{x} p(x) \log p(x)

交叉熵: 真实世界按照 p 产生数据, 而我们使用 q 描述它时所需付出的总平均信息代价, 是总代价.

H(p,q)=xp(x)logq(x)H(p, q) = -\sum_{x} p(x) \log q(x)

KL 散度#

用概率分布 q 近似真实分布 p 会损失多少信息, 因为用了错误分布而额外增加的代价.

DKL(pq)=xp(x)logp(x)q(x)D_{KL}(p\|q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)}

展开有:

DKL(pq)=xp(x)logp(x)xp(x)logq(x)D_{KL}(p\|q) = \sum_{x} p(x) \log p(x) - \sum_{x} p(x) \log q(x)

即:

H(p,q)=H(p)+DKL(pq)H(p, q) = H(p) + D_{KL}(p\|q)

因此, 交叉熵=真实分布的熵+KL散度交叉熵 = 真实分布的熵 + KL 散度 .

训练时真实分布固定, 因此最小化交叉熵也就是最小化 KL 散度, 等价于最大化训练数据的似然, 等价于让模型分布尽可能接近真实分布.