生成模型学习笔记
(文章中大部分内容从网上学习笔记中摘录,推荐阅读原文,吴恩达深度学习课程笔记暂时停更一段时间,学习AI绘图原理是为了搞定毕业设计,等忙完再回头把基础补完,推荐读物《深度学习》花书)
文章目录
- 生成模型综述
- 监督学习下的生成模型
- 贝叶斯公式
- 朴素贝叶斯算法
- 非监督学习下的生成模型
- 极大似然法
- 经验分布函数
- 构建生成模型
- 自回归网络
- 完全可见置信网络
生成模型综述
生成模型综述(川陀学者)
什么是生成模型
生成模型(generative model)描述的是这一类的模型:我们接收了从分布
p
d
a
t
a
p_{data}
pdata取样的若干样本构成我们的训练集,我们的模型会学习到一个模拟这一分布的概率分布 ,在有些情况下,我们可以直接的估计概率分布
p
m
o
d
e
l
p_{model}
pmodel,如下图所示的密度概率分布模型:
有些情况,我们需要从
P
m
o
d
e
l
P_{model}
Pmodel中生成一些样本,如下图所示训练数据为ImageNet中的样本,训练的生成模型可以生成以假乱真的图片:
为什么要研究生成模型
那么研究生成模型的意义何在呢?尤其是对于非直接密度估计而只能从模型中生成样本的一类情况,特别是对于图像,这类模型只能提供更多的图像,而我们并不缺少海量的图像。
主要原因如下:
- 这是对我们能够表示和操控高维概率分布的能力的有效检验。
- 我们可以将生成模型结合到强化学习(reinforcement learning)中,例如对于model-based RL可用生成模型来模拟可能发生的未来情况,以便RL算法进行规划(planning),例如这篇论文[1610.00696] Deep Visual Foresight for Planning Robot Motion。
- 生成模型可以用有损失(部分样本无标记)的数据进行训练,进行半监督学习(semi-supervised learning),降低了我们获得数据样本的难度。
- 生成模型可以处理多峰值(multi-modal)的输出。对于很多任务,一个输入可能对应多个可能的输出,一些传统的机器学习模型只能学到一种输出而无法学习多种可能的输出。
- 还有一些任务需要产生看起来真实的样本。如由低分辨率图片产生高分辨率图片,图像转换等等。
(输入低分辨率图片,生成模型产生接近原分辨率的图片。)
(从街道轮廓图生成真实图,从卫星图片生成地图,从草图生成真实图片)
监督学习下的生成模型
监督学习是学习一个模型,然后利用该模型对给定的输入预测相应的输出,我们可将模型写成函数形式 Y = f ( x ) Y =f(x) Y=f(x) 或条件概率分布形式 p ( Y ∣ X ) p(Y|X) p(Y∣X) ,并根据条件概率分布的计算方式将其分为判别模型和生成模型。
贝叶斯公式
先验概率:P(Y),即Y发生的概率,但是与其他事件是否发生无关。
朴素贝叶斯算法
通过对训练集学习从而得到先验概率分布 p ( Y ) p(Y) p(Y)和条件概率分布 p ( X ∣ Y ) p(X|Y) p(X∣Y),从而计算出联合概率分布 p ( X , Y ) p(X,Y) p(X,Y)
非监督学习下的生成模型
根据前两节,生成模型意味着对输入特征X和标签信息Y的联合分布进行建模,无监督学习意味着不存在标签信息,则在无监督生成模型中,希望对输入特征X的概率密度函数 p ( X ) p(X) p(X)建模。假设存在一个由N个训练样本 { x ( 1 ) , x ( 2 ) , . . . , x ( N ) } \lbrace x^{(1)} , x^{(2)},... , x^{(N)} \rbrace {x(1),x(2),...,x(N)}构成的训练集(N足够大),则可以使用训练集训练一个概率模型 p θ ( X ) p_θ(X) pθ(X),训练完成后,概率模型 p θ ( X ) p_θ(X) pθ(X)应接近于X的概率密度函数 p ( X ) p(X) p(X),接着我们就可以从概率模型 p θ ( X ) p_θ(X) pθ(X)中采样来“生成”样本了。
极大似然法
极大似然法
最大似然法与最大后验概率估计
在生成模型中,概率密度函数
p
(
x
)
p(x)
p(x)一直扮演着核心的位置。对于一批从
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)中独立采样得到的训练样本集
{
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
N
)
}
\lbrace x^{(1)} , x^{(2)},... , x^{(N)} \rbrace
{x(1),x(2),...,x(N)},(注意我们要求训练样本集的数据是独立同分布的),我们希望用训练数据来训练一个生成模型
p
θ
(
x
)
p_θ(x)
pθ(x),这个生成模型可以显式或隐式地学习到数据的分布
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)或者
p
θ
(
x
)
p_θ(x)
pθ(x)获得的(近似)表达式,即
p
d
a
t
a
(
x
)
≈
p
θ
(
x
)
p_{data}(x)≈p_θ(x)
pdata(x)≈pθ(x)。接下来在推断过程中,可以通过在上显式或隐式地采样而得到一批样本,并且使获得的样本(近似)符合概率分布
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)。
我们先介绍使用极大似然估计的生成模型,充分理解极大似然原理对理解生成模型有非常重要的意义。需要说明,并不是所有的生成模型都使用极大似然法,有些生成模型默认不使用极大似然法, 但是也可以做一些修改令其使用最大似然法 (GAN就属于这一类)。
极大似然估计是对概率模型参数进行估计的一种方法,例如有一个包含N个样本的数据集 { x ( 1 ) , x ( 2 ) , . . . , x ( N ) } \lbrace x^{(1)} , x^{(2)},... , x^{(N)} \rbrace {x(1),x(2),...,x(N)},数据集中每个样本都是从某个未知的概率分布 p d a t a ( x ) p_{data}(x) pdata(x)中独立采样获得的,若我们已经知道 p θ ( x ) p_θ(x) pθ(x)的形式,但是 p θ ( x ) p_θ(x) pθ(x)的表达式里仍包含未知参数θ,那问题就变成了:如何使用数据集来估算 p θ ( x ) p_θ(x) pθ(x)中的未知参数θ?例如 p θ ( x ) p_θ(x) pθ(x)是一个均值和方差参数还未确定的正态分布,那么如何用样本估计均值和方差的准确数值?
在极大似然法中,首先使用所有样本计算似然函数 L ( θ ) L(θ) L(θ):
L ( θ ∣ x ) = ∏ i = 1 N P θ ( X = x i ∣ θ ) L(θ|x)=\displaystyle\prod^{N}_{i=1} P_θ(X=x^{i}|θ) L(θ∣x)=i=1∏NPθ(X=xi∣θ)
极大似然法
经验分布函数
经验分布
如果我们想知道某个随机变量X的分布F,这在一般情况下当然是无法准确知道的,但如果我们手上有它的一些独立同分布的样本,可不可以利用这些样本?一个很简单的办法就是,把这些样本的“频率”近似为随机变量的“概率”
经验分布函数(empirical distribution function):给每个点
1
n
\frac {1}{n}
n1的概率质量(大概类似n个样本的均匀分布?),得到CDF:
F ^ n ( x ) = ∑ i = 1 n I ( X i ≤ x ) n \hat F_n(x)=\frac {\sum ^n_{i=1} I(X_i \leq \space x) }{n} F^n(x)=n∑i=1nI(Xi≤ x)
构建生成模型
生成模型的基本任务是生成样本,例如生成逼真的人脸图片、生成高质量的语音等;当然也可以通过改进生成模型从而实现样本之间的映射转换,例如图像风格迁移、语音增强等。本文将关注前者,其常见范式通常为:生成模型接受随机噪声 z z z作为输入,然后产生输出样本 x x x。
由上述过程可知,构建生成模型的核心步骤包括两点:1.如何设计好的建模方式 p ^ θ ( X ) \hat p_θ(X) p^θ(X)?2.如何根据样本从而训练估计模型中的参数 p ^ θ ( X ) \hat p_θ(X) p^θ(X)?对于第一个问题,不同的生成模型各自有所考虑,例如玻尔兹曼机使用基于能量的模型构建了 p ^ θ ( X ) \hat p_θ(X) p^θ(X) ,完全可见置信网络对 p ^ θ ( X ) \hat p_θ(X) p^θ(X) 进行了链式解析等等,而扩散模型创造性地通过扩散过程构建了一个精巧的建模方式;关于第二个问题,显式生成模型使用的训练准则为极大似然法,这里又具体分为两类,第一类是对似然函数本身直接进行优化的精确推断方法(例如流模型,自回归模型);第二类是对似然函数的近似值进行优化的近似推断方法(例如VAE和玻尔兹曼机)。扩散模型使用的训练方法同样为极大似然法,并且其对似然函数的处理方式类似于VAE的近似推断。另外,GAN之类的隐式生成模型首先使用两类样本学习到了 p ^ θ ( X ) \hat p_θ(X) p^θ(X)和 q ( X ) q(X) q(X) 的距离,然后再以减少距离为目标训练生成模型。
自回归网络
将预测对象按照时间顺序排列起来,构成一个所谓的时间序列,从所构成的一组时间序列的变化规律,推断今后变化的可能性及变化趋势、变化规律,就是时间序列预测法。
时间序列模型其实也是一种回归模型,其基于的原理是,一方面承认事物发展的延续性,运用过去时间序列的数据统计分析就能推测事物的发展趋势;另一方面又充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据,进行统计分析,并对数据进行适合的处理,进行趋势预测。
简单来说自回归模型是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一个常见形式。用自己若干时刻的序列值来预测未来某个时刻的序列值。
模型:
y
t
=
Φ
0
+
Φ
1
y
t
−
1
+
Φ
2
y
t
−
2
+
…
+
Φ
p
y
t
−
p
+
ε
t
y_t=Φ_0+Φ_1y_{t−1}+Φ_2y_{t−2}+…+Φ_py_{t−p}+ε_t
yt=Φ0+Φ1yt−1+Φ2yt−2+…+Φpyt−p+εt
自回归模型
完全可见置信网络
完全可见置信网络
在完全可见置信网络中,不存在不可观察的潜在变量,观察变量的概率被链式法则从维度上进行分解,对于n维观察变量x,其概率表达式为:
p ( x ) = ∏ i = 1 N p ( x i ∣ x i − 1 , x i − 2 . . . x 1 ) p(x)=\displaystyle\prod^{N}_{i=1} p(x_i|x_{i-1},x_{i-2}...x_{1}) p(x)=i=1∏Np(xi∣xi−1,xi−2...x1)
自回归网络是最简单的完全可见置信网络,其中每一个维度的观察变量 都构成概率模型的一个节点,而这些所有的节点 { x 1 , x 2 . . . x n } \lbrace x_1,x_2...x_n \rbrace {x1,x2...xn}共同构成一个完全有向图,即图中任意两个节点都存在连接关系,如图所示