一、线性代数 #
1、标量(Scalar): #
实数,只有大小,没有方向。
2、向量(Vector): #
向量:一组实数组成的有序数组,同时具有大小和方向。
点积:aTb=∑iaibi。
3、范数 #
满足以下条件的函数 f:Rn→R, domf=Rn 称为范数:
- f 是非负的:对所有的 x∈Rn 成立 f(x)≥0 ;
- f 是正定的:仅对 x=0 成立 f(x)=0 ;
- f 是齐次的:对所有的 x∈Rn 和 t∈R 成立 f(tx)=∣t∣f(x) ;
- f 满足三角不等式:对所有的 x,y∈Rn 成立 f(x+y)≤f(x)+f(y) ;
- ℓ∞ -范数:∥x∥∞=max{∣x1∣,…,∣xn∣} ;
- 更一般地:∥x∥p=(∣x1∣p+⋯+∣xn∣p)p1 。
4、矩阵(Matrix) #
A=a11a21⋮aM1a12a22⋮aM2⋯⋯⋱⋯a1Na2N⋮aMN
A 是一个由 M 行 N 列个元素排列成的矩形阵列,称为 M×N 的矩阵。
5、线性变换 #
矩阵 A 定义了一个从空间 RN 到空间 RM 的线性映射(线性变换)。
两个有限维欧氏空间的映射函数f:RN→RM可以表示为:
y=Ax≜a11x1+a12x2+⋯+a1NxNa21x1+a22x2+⋯+a2NxN⋮aM1x1+aM2x2+⋯+aMNxN
6、Hadamard积 #
矩阵 A 和矩阵 B 的Hadamard积也称为逐点乘积,为 A 和 B 中对应的元素相乘。
[A⊙B]mn=amnbmn
7、矩阵范数 #
算子范数:算子范数是衡量线性算子或矩阵对向量放大作用的最大倍数的范数。
∥A∥=max{∥x∥∥Ax∥:x∈Rn,x=0}=max{∥Ax∥:x∈Rn,∥x∥=1}
常见算子范数:
∥A∥p=x=0max∥x∥p∥Ax∥p
最大绝对列和:∥A∥1=max1≤j≤n∑i=1m∣aij∣ ;
A 的最大奇异值:∥A∥2=λmax(ATA) ;
最大绝对行和:∥A∥∞=max1≤i≤m∑j=1n∣aij∣ ;
Frobenius 范数:∥A∥Frob =[∑ijAij2]21。
8、特征值和特征向量 #
对于一个给定的线性变换 A ,它的特征向量 x ,经过这个线性变换之后,得到的新向量仍然与原来的 x 保持在同一条直线上,但其长度或方向也许会改变。Ax=λx,λ 为特征值。对称矩阵总会有相应的特征向量和特征值。
正定性:
∥x∥2=xTx≥0
一般化: ∀x=0,xTAx>0 ,称 A 为正定矩阵。设 A 是 n×n 对称矩阵,当且仅当 A 的特征值均为非负数,称 A 为半正定矩阵。
正交矩阵:
- 所有的列向量都是单位正交向量
- 所有的行向量都是单位正交向量
- 可以写为:UUT=I
置换矩阵:
- 矩阵的每一行和每一列的元素中只有一个 1 ,其余元素都为 0。置换矩阵是正交矩阵。
9、张量(Tensor) #
一个数组中的元素分布在若干维坐标的规则网格中。
二、微积分 #
1、标量求导 #
| y | a | xn | ex | log(x) | sin(x) |
|---|
| dxdy | 0 | nxn−1 | ex | x1 | cos(x) |
| y | u+v | uv | y=f(u),u=g(x) |
|---|
| dxdy | dxdu+dxdv | dxduv+dxdvu | dudydxdu |
2、矢量求导 #
若x=x1x2⋮xn,则∂x∂y=[∂x1∂y,∂x2∂y,…,∂xn∂y]
若y=y1y2⋮yn,则∂x∂y=∂x∂y1∂x∂y2⋮∂x∂ym
若x=x1x2⋮xn,y=y1y2⋮yn,则∂x∂y=∂x∂y1∂x∂y2⋮∂x∂ym=∂x1∂y1,∂x2∂y1,…,∂xn∂y1∂x1∂y2,∂x2∂y2,…,∂xn∂y2⋮∂x1∂ym,∂x2∂ym,…,∂xn∂ymm×n
3、矢量和矩阵求导 #
求导的分母形状不变,分子的形状变成倒数,最后形状按照分子加分母的形状拼接,将形状为1的部分舍弃。
| x(1,) | x(n,1) | X(n,k) |
|---|
| y(1,) | ∂x∂y(1,) | ∂x∂y(1,n) | ∂X∂y(k,n) |
| y(m,1) | ∂x∂y(m,1) | ∂x∂y(m,n) | ∂X∂y(m,k,n) |
| Y(m,l) | ∂x∂Y(m,l) | ∂x∂Y(m,l,n) | ∂X∂Y(m,l,k,n) |
4、自动微分 #
深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。根据设计好的模型,系统会构建⼀个计算图(computational graph),来跟踪计算是哪些数据通过哪些操作组合起来产生输出。
import torch
x=torch.arange(4.0)
x.requires_grad_(True)
y=2*torch.dot(x,x)
y.backward()
x.grad
正向传播
∂x∂y=∂un∂y(∂un−1∂un(…(∂u1∂u2∂x∂u1)))
反向传播
∂x∂y=(((∂un∂y∂un−1∂un)…)∂u1∂u2)∂x∂u1
三、信息论 #
1、熵 #
信息论的核心思想是量化数据中的信息内容。在信息论中,该数值被称为分布 P 的熵(entropy)。可以通过以下方程得到:
H[P]=j∑−P(j)logP(j)
信息论的基本定理之一指出,为了对从分布 p 中随机抽取的数据进行编码,我们至少需要 H[P] "纳特(nat)"对其进行编码。"纳特"相当于比特(bit),但是对数底为 e 而不是 2 。因此,一个纳特是 log(2)1≈1.44 比特。
2、交叉熵 #
交叉熵是按照概率分布 q 的最优编码对真实分布为 p 的信息进行编码的长度。
H(p,q)=Ep[−logq(x)]=−x∑p(x)logq(x)
在给定 q 的情况下,如果 p 和 q 越接近,交叉熵越小;如果 p 和 q 越远,交叉熵就越大。
3、KL散度 #
KL散度是用概率分布 q 来近似 p 时所造成的信息损失量。
KL散度是按照概率分布 q 的最优编码对真实分布为 p 的信息进行编码,其平均编码长度(即交叉熵) H(p,q) 和 p 的最优平均编码长度(即熵) H(p) 之间的差异。
KL(p,q)=H(p,q)−H(p)=x∑p(x)logq(x)p(x)
KL(p,q)=H(p,q)−H(p)=∫p(x)logq(x)p(x)dx
4、交叉熵损失 #
在分类任务中,最小化 KL 散度等价于最小化交叉熵,而当真实标签是 one-hot 时,交叉熵进一步简化为负对数似然。
KL 散度衡量两个分布的差异,最小化 KL 散度等价于让模型分布逼近真实分布。
DKL(pr(y∣x)∣∣pθ(y∣x))=y=0∑kpr(y∣x)logpθ(y∣x)pr(y∣x)=y∑pr(y∣x)logpr(y∣x)−y∑pr(y∣x)logpθ(y∣x)
化简后第一项为常数,第二项为交叉熵,即 KL 散度正比于交叉熵,最小化 KL 散度等价于最小化交叉熵。
- pr(y∣x) :真实的条件分布(ground truth),给定输入 x 时,输出为 y 的真实概率。
- pθ(y∣x) :模型预测的条件分布,由参数 θ 决定。