花书学习笔记 —— 数学篇(1)
前言:入坑深度学习一年有余,突感各方面基础仍有待加强,因此打算从Goodfellow大神的《Deep Learning》(俗称花书)入手,开始"回炉重造"。
为了辅助本人对Diffusion的学习,本篇先从概率论、信息论以及数理统计开始。
1. 概率和随机变量
概率可以表示一种信任度,对于概率而言,讨论时有两种观念,一种是频率学派的观念,一种是贝叶斯学派的观念。前者认为概率是一个确定的值,与事件发生的频率有关;而后者则认为概率建立在我们的认知水平上,是通过观测的事实(数据)来影响认知,最终求得时间的确定性水平(贝叶斯公式含义的一种著名的解读),讲道理感觉频率学派和贝叶斯学派的比较已经到哲学层面了doge。
从机器学习的角度来说,对于频率学派,我们要训练一个模型来预测结果,这个模型的最优参数其实是确定的,我们得到的要求结果的概率可以有函数:
P
(
x
∣
θ
)
P(x|θ)
P(x∣θ)表示在模型参数条件θ下求得结果x的概率,若前者确定,后者未知,则该函数为概率函数;反之,我们称之为似然函数——说到这,就不得不想到最大似然估计~我们后面会提到。
对于贝叶斯学派,我们可以看贝叶斯公式:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A|B) = \frac{P(B|A)P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)P(A)简单而言,就是我们已有先验概率P(A),似然概率P(B|A)来自于我们对已发生的随机事件的观测,它对先验概率做调整,得到后验概率P(A|B)。
随机变量可以随机取得不同数值,表示不同的状态,用概率分布来表征不同状态的可能性。
2. 概率分布
概率质量函数表示离散随机变量在某一状态的概率: P ( X = x ) = P ( x ) P(X=x) = P(x) P(X=x)=P(x)概率密度函数,则表示对于连续型随机变量,在极小的取值区间内(单位质量)的概率: ∫ a b p ( x ) d x \int_{a}^{b}p(x)dx ∫abp(x)dx累计分布函数,注意到是概率质量函数的累加或者是概率密度函数的积分: P ( X < x ) = P ( x ) P(X<x) = P(x) P(X<x)=P(x)
3. 条件概率和数据统计特征
-
条件概率
条件概率,指的是在某一个时间发生情况下的另一个事件发生的概率,从古典概型的视角来看,在某个事件发生后,改变了另一个事件的样本空间,计算公式如下: P ( A ∣ B ) = P ( A , B ) P ( B ) P(A|B) = \frac{P(A,B)}{P(B)} P(A∣B)=P(B)P(A,B) 链式法则: P ( A , B , C ) = P ( A ∣ B , C ) ∗ P ( B ∣ C ) ∗ P ( C ) P(A,B,C) = P(A|B,C)*P(B|C)*P(C) P(A,B,C)=P(A∣B,C)∗P(B∣C)∗P(C) -
独立性
若两个随机变量独立,$ P(AB)=P(A)P(B) $
若两个随机变量条件独立,则 $ P(AB|C) = P(A|C)P(B|C) $ -
期望、方差、协方差
以离散型随机变量为例,f(x)是某一基于随机变量x的线性映射 E x ∼ P = ∑ x P ( x ) f ( x ) E_{x\sim P} = \sum_x{P(x)f(x)} Ex∼P=x∑P(x)f(x)方差是 V a r ( f ( x ) ) = E [ ( f ( x ) − E ( f ( x ) ) 2 ] Var(f(x)) = E[(f(x)-E(f(x))^2] Var(f(x))=E[(f(x)−E(f(x))2]协方差则是: C o v ( f ( x ) , g ( y ) ) = E [ ( f ( x ) − E ( f ( x ) ) ] E [ ( g ( y ) − g ( f ( y ) ) ] Cov(f(x),g(y)) = E[(f(x)-E(f(x))]E[(g(y)-g(f(y))] Cov(f(x),g(y))=E[(f(x)−E(f(x))]E[(g(y)−g(f(y))]协方差给出了两个随机变量的线性相关的强度,可以认为是二者变化的一致性程度,如果上述公式不减去均值,就是我们熟悉的互相关函数,描述了两个变量之间相关程度(理解成两个向量之间的夹角)。
4. 概率分布
- Bernoulli分布
单个二值函数的随机变量分布, P ( X = x ) = p x p 1 − x P(X=x) = p^xp^{1-x} P(X=x)=pxp1−x其中x=0或1,p为随机变量等于1的概率。 - Multinoulli分布
指在具有k个不同状态的单个离散随机变量上的分布,其中k为一个有限值,就是不同的状态的概率集合对应的分布。 - 高斯分布
N
(
x
;
μ
,
σ
2
)
=
1
2
π
σ
2
e
−
(
x
−
μ
)
2
2
σ
2
N(x;μ,σ^2) = \sqrt{\frac{1}{2πσ^2}}e^{-\frac{(x-μ)^2}{2σ^2}}
N(x;μ,σ2)=2πσ21e−2σ2(x−μ)2一般会把
σ
2
σ^2
σ2 改成
β
−
1
β^{-1}
β−1
中心极限定理表示,很多独立同分布的随机变量的和会逼近正态分布,正态分布是对模型加入先验知识最少的分布。 - 指数分布 p ( x ; λ ) = λ e − λ x p(x;λ) = λe^{-λx} p(x;λ)=λe−λx其中,x非负。
- 狄拉克分布/经验分布
狄拉克分布就是所有概率集中到一个狄拉克函数上,经验分布则是把概率分布给不同中心的狄拉克函数上。 - 分布混合
通过一些简单的概率分布的组合定义新的概率分布,重点讲高斯混合模型。
简单理解用一系列不同特征的高斯分布组合逼近任意平滑的分布。 P ( x ∣ θ ) = ∑ α k N ( x ∣ θ k ) ; θ k = ( μ k , σ k 2 ) P(x|θ)=\sum{α_kN(x|θ_k)} ; θ_k={{(μ_k,{σ_k^2)}}} P(x∣θ)=∑αkN(x∣θk);θk=(μk,σk2)GMM模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量(Hidden variable)
可以将 GMM 称为 概率的KMeans,因为 KMeans 和 GMM 的起点和训练过程是相同的。 KMeans 使用基于距离的方法,而 GMM 使用概率方法。
5. 常用函数
- logistic sigmoid 函数
这个函数重要性不言而喻,是接触深度学习必不可少的激活函数之一: σ ( x ) = 1 1 + e − x σ(x) = \frac{1}{1+e^{-x}} σ(x)=1+e−x1该函数可以把输入压缩到(0,1)之间,可以用于逻辑回归、分类等,在神经网络中,要用反向传播,就要对它求导,其导数为:$ σ^{'}(x) = σ(x)(1-σ(x)) $
-
Relu函数
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)这是一个仿照神经兴奋电位变化的单侧抑制函数,容易求导,而由于大于零的部分导数为1,相对于其它双侧抑制函数(输入较大较小时都有很强的抑制,比如sigmoid),避免了在输入较大时,导数值很小,可以有效缓解梯度消失(导致参数迭代缓慢)问题。同时,由于在输入小于零时输出为零。同时,该函数还可以把输出小于零的神经元灭活,提供稀疏性,抵抗过拟合。当然,要注意该函数可能“灭活过度”,会导致神经元大面积死亡。 -
softplus
f ( x ) = l o g ( 1 + e x ) f(x) = log(1+e^x) f(x)=log(1+ex)
这是Relu函数的一个软化
激活函数还有softmax函数、tanh函数等。
5. 贝叶斯规则和马尔可夫链简述
- 贝叶斯规则
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)如之前所言而言,就是我们已有先验概率P(A),似然概率P(B|A)来自于我们对已发生的随机事件的观测,它对先验概率做调整,得到后验概率P(A|B)。
进一步用全概率公式,可以得到:
P ( A i ∣ B ) = P ( B ∣ A i ) P ( A i ) ∑ A i P ( B ∣ A i ) P ( A i ) P(Ai|B) = \frac{P(B|Ai)P(Ai)}{\sum_{Ai}{P(B|Ai)P(Ai)}} P(Ai∣B)=∑AiP(B∣Ai)P(Ai)P(B∣Ai)P(Ai),因此我们甚至不需要知道B事件的先验概率。 - 马尔可夫过程
下一个状态只和当前状态有关,而和过去的状态无关,从条件按概率来看, P ( X t + 1 ∣ X t , X t − 1 , . . . ) = P ( X t + 1 ∣ X t ) P(X_{t+1}|X_t, X_{t-1}, ...) = P(X_{t+1}|X_t) P(Xt+1∣Xt,Xt−1,...)=P(Xt+1∣Xt)当马尔克可夫链迭代步数足够大时,各个状态的概率密度分布逼近正态分布,我们可以将状态之间的转移描述成一个概率矩阵,那么当一次次迭代时,相当于当前的离散状态概率分布乘以这个矩阵,若想要最终稳定,当前概率分布和下一个概率分布相同,其实就是找到该矩阵的特征向量。
之前条件概率有一个链式法则,那么若加上马尔可夫性质,有一个事件链 C − > B − > A C->B->A C−>B−>A则我们可以得到: P ( A B C ) = P ( A ∣ B , C ) P ( B ∣ C ) P ( C ) = P ( A ∣ B ) P ( B ∣ C ) P ( C ) P(ABC) = P(A|B,C)P(B|C)P(C) = P(A|B)P(B|C)P(C) P(ABC)=P(A∣B,C)P(B∣C)P(C)=P(A∣B)P(B∣C)P(C)
6. 信息的度量和最大似然估计
在信息论中,我们定义了事件的信息
I
(
x
)
=
−
l
o
g
P
(
x
)
I(x)=-logP(x)
I(x)=−logP(x) 这也可以成为事件的自信息,若一个事件遵循某一个分布,那遵循这个分布的事件(数据)所产生的期望总量被定义为香农熵:
H
(
x
)
=
−
E
x
∼
P
[
L
o
g
(
P
(
x
)
]
H(x)=-E_{x\sim P}[Log(P(x)]
H(x)=−Ex∼P[Log(P(x)]顺道一提,根据香农第一定理,这个也是无失真信源编码的最小码长。注意到,分布越均匀,熵越大。
其实,我们可以根据得到的数据,通过香农熵等手段,来估计其对应的分布,这就涉及到了K-L散度(Kullbuck-Leibler divergence):
D
K
L
(
P
∣
∣
Q
)
=
E
x
∼
P
[
l
o
g
P
(
x
)
−
l
o
g
Q
(
x
)
]
D_{KL}(P||Q)=E_{x\sim P}[logP(x)-logQ(x)]
DKL(P∣∣Q)=Ex∼P[logP(x)−logQ(x)] KL散度描述了两个分布之间的“距离”,可以很自然联想到,我们若想通过神经网络预测真实值,训练时的优化目标也就可以是使得预测值的分布逼近真实值分布。
在损失函数中,我们经常会使用交叉熵函数,其表达式如下:
H
(
P
,
Q
)
=
−
E
x
∼
P
[
l
o
g
Q
(
x
)
]
H(P,Q) = -E_{x\sim P}[logQ(x)]
H(P,Q)=−Ex∼P[logQ(x)] 交叉熵就相当于KL散度减去已知样本分布的信息熵,因为后者可以认为是一个常数,所以在最小化KL散度时,可以等价于最小化交叉熵。
应用角度而言:
- 交叉熵通常用于监督学习任务中,如分类和回归等。在这些任务中,我们有一组输入样本和相应的标签。我们希望训练一个模型,使得模型能够将输入样本映射到正确的标签上。
- KL散度通常用于无监督学习任务中,如聚类、降维和生成模型等。在这些任务中,我们没有相应的标签信息,因此无法使用交叉熵来评估模型的性能,所以需要一种方法来衡量模型预测的分布和真实分布之间的差异,这时就可以使用KL散度来衡量模型预测的分布和真实分布之间的差异。
我们通常会听说某些模型是最大似然估计的模型,比如一些生成模型(e.g. Diffusion),那么,KL散度也好,交叉熵也好,和最大似然估计有什么关系呢?
我们从最小化交叉熵出发,最小化交叉熵是希望模型θ预测的分布最接近真实分布,设从数据集中抽出m个样本
x
1
,
x
2
,
.
.
.
x
m
{x_1,x_2,...x_m}~
x1,x2,...xm 预测的分布为
Q
θ
(
x
i
)
Q_θ(x_i)
Qθ(xi),真实分布为
P
(
x
i
)
P(x_i)
P(xi),那么最大似然估计是最大化似然函数:
L
(
θ
)
=
1
m
∑
i
=
1
m
l
o
g
(
Q
θ
(
x
i
)
)
L(θ) = \frac{1}{m}\sum^m_{i=1}{log(Q_θ(x_i))}
L(θ)=m1i=1∑mlog(Qθ(xi))但是,数据集抽取足够大时,
x
i
x_i
xi 服从
P
(
x
)
P(x)
P(x)分布,那么对所有样本求和除以总数可以等价于每个
l
o
g
(
l
o
g
(
Q
θ
(
x
i
)
)
)
log(log(Q_θ(x_i)))
log(log(Qθ(xi)))前面加权求均值,似然函数化为
L
(
θ
)
=
1
m
∑
i
=
1
m
l
o
g
(
Q
θ
(
x
i
)
)
=
∑
i
=
1
n
P
(
x
i
)
l
o
g
(
Q
θ
(
x
i
)
)
=
E
x
∼
P
[
l
o
g
Q
θ
(
x
)
]
L(θ) = \frac{1}{m}\sum^m_{i=1}{log(Q_θ(x_i))} = \sum^n_{i=1}{P(x_i)log(Q_θ(x_i))} = E_{x\sim P}[logQ_θ(x)]
L(θ)=m1i=1∑mlog(Qθ(xi))=i=1∑nP(xi)log(Qθ(xi))=Ex∼P[logQθ(x)]可以看到,最大似然函数最后化为了交叉熵函数的相反数,因此最大化最大似然函数就等价于最小化交叉熵。