关于深度学习中“分布与概率”的一些思考(参考自花书)
前言
本文章内容全来自个人思考,欢迎各位指出其中的错误。
概率统计中的“分布”
在多维随机变量分布中:
- 离散类型: P ( X = x ) P(X=x) P(X=x)表示X等于x的概率。
- 连续类型: f ( x ) f(x) f(x)表示 X X X在 x x x邻域内取值的概率。 F ( x ) = ∫ − ∞ x f ( x ) d x F(x)=\int_{-\infty}^{x} f(x) dx F(x)=∫−∞xf(x)dx表示 X X X在 − ∞ -\infty −∞到 x x x区间上取值的概率。
深度学习中的“分布”
什么是深度学习中的分布
我先说一下我的思考,如果各位还有更好的解释请告诉我。
想法一
深度学习中的分布就是自然界确确实实存在的一些关系,这些关系虽然确实存在但是我们无法量化。例如,我们都知道那是猫,但是我们又无法解释它为什么是猫,我们可以很容易的区分出来猫和狗的区别,但是深度学习模型却很难。众所周知,深度学习模型还不具备可解读性,所以只能通过引入概率来引导模型学习其中的关系。例如,特征向量
x
x
x服从某一种分布它就是猫,而特征向量服从另一种分布它就是狗。这种特征向量服从的分布我们很难理解,但是模型很好理解,我愿意称其为特征向量
x
x
x内部特征存在某种关系使得下次遇见这种关系就对应某一种状态。我们经常看到样本是独立同分布的,这个概念在统计上很普遍,在深度学习中我认为它可以理解为你的每一次采样都必须与上一次采样没有关系,并且特征向量都源自于同一指标的相同标准。例如,做猫狗二分类时上一只猫的测量结果不能对下一只猫产生影响这就是独立,猫和狗采样相同的特征(不能一个选择耳朵长度,一个选择耳朵数量并且放到一起比较,这样没有实际意义)并且使用相同的单位(不能一个用厘米,一个用毫米,也没有实际意义)。
说了那么多,简单一句话就是:特征向量
x
x
x中特征间的某种特定的关系,这种关系我们无法感知,但是模型会察觉到并且根据我们赋予的任务来合适的使用它。
想法二
在监督学习中的分布就是给定输入的特征向量
x
x
x,经过一个从
P
n
P^{n}
Pn到
P
P
P的一个确定映射(但不一定已知)(我认为也可以映射到
P
m
P^m
Pm上,其中
m
m
m为监督学习中的目标数,实际上就是one-hot操作),将
x
x
x映射到
y
y
y,随机变量
Y
Y
Y落在
y
y
y附近的概率。
在非监督学习中的分布就是数据集 X X X中样本间所服从的固定概率分布(这个分布我们不一定已知,但是一定是确定的)。例如:在离散情况下统计每个值出现的次数做成分布列,或者在连续情况下在 x x x邻域取值的概率。
有关分布各符号的含义(来源于花书中文版115页)
- P d a t a ( x ) P_{data}(x) Pdata(x): m个样本中的数据集 X = { x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) } X=\{ x^{(1)}, x^{(2)}, \cdots, x^{(n)} \} X={x(1),x(2),⋯,x(n)},独立地由未知真实数据生成分布 P d a t a ( x ) P_{data}(x) Pdata(x)生成。
- P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ): P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ)是一族由 θ \theta θ确定在相同空间上的概率分布。换言之, P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ)将任意输入 x x x映射到实数来估计真实概率 P d a t a ( x ) P_{data}(x) Pdata(x)。
- P ^ d a t a ( x ) \hat{P}_{data}(x) P^data(x): 训练集上的经验分布 P ^ d a t a ( x ) \hat{P}_{data}(x) P^data(x)。
举一个例子来说明
假设这里有一个二分类问题,给定
(
耳朵,鼻子,体型
)
(耳朵,鼻子,体型)
(耳朵,鼻子,体型)三个特征,判别动物是猫还是狗。给定输出层为2个结点,第一个结点为猫的概率,第二个结点为狗的概率(可以使用softmax激活函数,NLLLoss损失函数。如果不使用激活函数也可以判定返回值大的为预测结果)。
在分类问题中,一个样本一般包含输入数据(data)和目标(target)(data就是特征向量,target就表示哪个动物)。在这个问题中属于二分类问题,如果0表示猫,1表示狗。经过one-hot编码后,
y
=
(
1
,
0
)
T
y=(1,0)^T
y=(1,0)T表示猫,
y
=
(
0
,
1
)
T
y=(0,1)^T
y=(0,1)T表示狗。
模型可以表示为如下图所示:
其中 x ∈ P 3 , y ∈ P 2 x\in P^3, y\in P^2 x∈P3,y∈P2, P P P为数域。
借助例子解释分布
为了更好的解释,在这里从数据集
X
X
X中提取一个样本
x
(
1
)
x^{(1)}
x(1),并且该特征向量对应的目标是猫(target=0)。
- P d a t a ( x ) P_{data}(x) Pdata(x):表示物理世界真实存在的关系,不以外部因素改变而转移。在这个例子中:猫就是猫,狗就是狗,谁都无法改变。所以 P d a t a ( x ( 1 ) ) = ( 1 , 0 ) T P_{data}(x^{(1)}) = (1,0)^T Pdata(x(1))=(1,0)T。
- P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ):通过参数 θ \theta θ就可以看出来这个结果一定与模型有密切关联。事实上,这个值就是模型所给出的结果,如果对其进行softmax激活那么得到的结果就是每个分类结果都概率,如果不对其进行softmax激活那么得到的结果也隐含了每种类别的概率。假设softmax激活后的结果为 P m o d e l ( x ( 1 ) ; θ ) = ( 0.75 , 0.25 ) T P_{model}(x^{(1)}; \theta) = (0.75, 0.25)^T Pmodel(x(1);θ)=(0.75,0.25)T,那么表示猫的可能性为0.75,狗的可能性为0.25。
- P ^ d a t a ( x ) \hat{P}_{data}(x) P^data(x): 表示训练集的分布,虽然也是不随模型的变化而变化,但是它具有训练集的局限性。例如:训练集常常无法收集到所有特征的信息,还有就是最关键的训练集样本的有限性(我们无法得到无穷多的样本,甚至常常无法得到足够大的样本)。这些训练集的局限性决定了我们训练的模型只能基于训练集的分布,而不是基于真实的分布。当训练集足够完备时,我们可以得到近似的真实分布,也就是为什么我们常常需要大样本和足够的特征。
关于样本多说一句,在深度学习模型中我们经常会遇见过拟合现象,提升样本数量[有时需要同时增加模型容量以获得更好的预测结果,花书中文版第103页]就是一个不错的解决方案。但是样本数目常常在模型训练前就固定了,所以我们常用的方案有:dropout[卷积,激活,池化,dropout],batchnorm[卷积,归一化,激活,池化],残差模型[卷积,relu激活,池化,最后一层池化加入了上一层池化后结果],这些方法参考自:deep learning with pytorch。花书在理论上给出了很多解决办法,例如:降低模型容量,正则化(代价函数))
一些疑惑
- 在上面的定义中, P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ)将任意输入 x x x映射到实数来估计真实概率 P d a t a ( x ) P_{data}(x) Pdata(x)。我不知道这个映射是只针对最大似然估计这一部分,还是对所有的模型都是这样。如果对所有模型都成立的话,那么就不能使用one-hot操作将其映射到 P m P^m Pm上(其中 m m m为监督学习中的目标数)。
- 在上面的定义中,数据集为 X = { x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) } X=\{ x^{(1)}, x^{(2)}, \cdots, x^{(n)} \} X={x(1),x(2),⋯,x(n)},一般来说监督学习的数据集包含特征向量data和目标target,所以这里的 x ( i ) x^{(i)} x(i)也应该为两部分构成,但是在下面直接使用 P m o d e l ( x ( i ) ; θ ) P_{model}(x^{(i)};\theta) Pmodel(x(i);θ)。