提示:仅供自己学习、复习需要,有任何问题可在评论区提出。
深度学习--自编码器
一、自编码器AE
自编码器是一种无监督的特征学习,其目的是利用无标签数据找到一个有效的低维的特征提取器。那什么是特征学习呢?在机器学习领域,特征学习是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。
我们希望输入一个特征,通过编码器能够输出一个低维的数据,进行特征的降维,让特征里面尽量包含主要的信息,这就是自编码器的基本核心思想。
编码器主要有编码器与解码器组成。
输入数据x通过编码器得到特征z,我们希望Z通过解码器得到的 x ^ \hat{x} x^与输入x尽可能的相似。在卷积神经网络流行后,主要用ReLU+CNN来实现自编码器。
在真实训练的时候把 ∣ ∣ x − x ^ ∣ ∣ 2 \mid\mid x-\hat{x} \mid\mid^2 ∣∣x−x^∣∣2作为L2损失当做我们监督的信息,这不就是一个网络吗?一个编码层,一个解码层,中间Z也算一个,但是这里不作考虑,具体情况具体分析。
自编码器是将输入与输出比,即
∣
∣
x
−
x
^
∣
∣
2
\mid\mid x-\hat{x} \mid\mid^2
∣∣x−x^∣∣2如果差异大,调整解码器编码器参数,其实就是反向传播。除均方误差损失函数外,还有交叉熵损失函数:
∑
i
=
1
n
(
x
log
(
x
^
)
+
(
1
−
x
)
log
(
1
−
x
^
)
)
\sum_{i=1}^n(x\log (\hat x)+(1-x)\log (1-\hat x))
∑i=1n(xlog(x^)+(1−x)log(1−x^))
其实我们在学好了以后,可以将解码器给剔除,因为学好了以后,得到的z一定是有意义的,所以我们可以做少量的分类,样本很少的时候,不足以我们用VGG去训练一个模型。
那我们应该怎么做呢?直接用特征的z后面连接一个全连接神经网络去预测标签,跟真实标签比一比,如果差别很大,反过来微调编码器,但是此时的编码器是已经学习过的,也就是说在降维的时候让z尽量的保持这个数据里面最核心最重要的东西,当然这个最核心最重要的东西适不适合分类,那不一定,只能说是对分类有比较大的帮助。比如说在人脸分类时,自编码器会记下人的基本重要特征,但是可能脸上的一个痣不一定记下,但是在分类的时候,那颗痣可能就是区分人的最重要的特征,所以自编码器并没有找分类的最重要特征。
解码器可以用做图像生成任务。
二、变分自编码器VAE
1.为什么要有VAE
我们学习AE是为了将输入数据编成一组码code,但是AE有缺点,即映射空间不连续,无规则,无界。而我们希望的是从码空间采一个值,但是这个值神经网络都没学过,他肯定不能输出正确的值,神经网络只是稀疏的记录了上图中满月图对满月图的对应,半月图对半月图的对应,它是输出不了3/4月的图片的,所以提出了VAE。
VAE与AE的区别就是,编码器输出的不再是特征z,而是一个分布,其中
m
i
m_i
mi是均值,
σ
i
\sigma_i
σi取exp是标准差(加exp是因为标准差一定是正数),其中
e
i
e_i
ei相当于是噪声。z=
c
i
c_i
ci=
m
i
m_i
mi+exp(
σ
i
\sigma_i
σi)
×
\times
×
e
i
e_i
ei我们输出的时候是通过在码空间采一个点,生成图像。
并且要求
σ
\sigma
σ最小,如下图
exp(
σ
i
\sigma_i
σi)就是图中蓝色线,(1+
σ
i
\sigma_i
σi)是红色直线,它俩合起来就是图中绿色线。
(
m
i
)
2
(m_i)^2
(mi)2是L2正则化,希望产生的z编码分散一点
在从码空间采样的时候,因为噪声的原因,有些点可能即学习过满月又学习过半月,如果采到这样的码,就会综合信息,生成3/4月
2.VAE推导
高斯混合模型
每一个蓝线都表示一个高斯模型,黑线是蓝线叠加的结果。m代表高斯模型的个数(1~7).p(1)表示选到1号高斯模型的概率。
如何采样?
m~P(m)(多项式分布)
x|m~N(
μ
m
\mu^m
μm,
∑
m
\sum^m
∑m)
我们认为数据集中的每个样本也是这样产生的,先从七个高斯组件里面选择一个,然后从选择的高斯组件里产生当前的样本。
我们认为Z~N(0,1)(不一定正态分布,尽量简单就可以),x|z ~N(
μ
(
z
)
\mu(z)
μ(z),
σ
(
z
)
\sigma(z)
σ(z))我们现在从N ~(0,1)中采样一个z,然后利用这个z去生成高斯组件,这样可以生成无限个高斯组件。
z和高斯组件之间的关系,是神经网络学习得到的。
在上图中的P(x)就有无限个z,刚才的z只有7个,因为现在的z是从标准正态中采样的,所以上公式用的积分。
变分自编码器的思想就是用无限个高斯逼近真实的分布,跟高斯混合模型最大的区别就是高斯混合模型只能解决有限高斯的混合问题。(无限高斯交给神经网络来做)
“给定一个z,并没有生成一个具体的图像,生成的是高斯分布,高斯分布是在图像空间里面的,要想生成图像还得用高斯分布的均值和方差再去生成一张图像。”
如上图,
∫
z
P
(
z
)
P
(
x
∣
z
)
d
z
\int_z P(z)P(x|z){\rm d}z
∫zP(z)P(x∣z)dz其中P(x|z)是由神经网络学习得到,所以不可以积分,然而选取的z并不是所有点都会生成高斯组件,所以我们引入了了另一个分布q(z|x),z|x~N(
μ
′
(
x
)
\mu'(x)
μ′(x),
∑
′
(
x
)
\sum'(x)
∑′(x)),即通过训练样本x确定比较感兴趣的z,这些z周围肯定是有较好的分布。
q(z|x)可以是任何分布。
贝叶斯:P(z,x) = P(z|x)P(x)
log
P
(
X
)
\log P(X)
logP(X) =
∫
z
q
(
z
∣
x
)
P
(
x
)
d
z
\int_z q(z|x)P(x){\rm d}z
∫zq(z∣x)P(x)dz =
∫
z
q
(
z
∣
x
)
log
P
(
z
,
x
)
P
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(z,x)}{P(z|x)}{\rm d}z
∫zq(z∣x)logP(z∣x)P(z,x)dz =
∫
z
q
(
z
∣
x
)
log
P
(
z
,
x
)
⋅
q
(
z
∣
x
)
q
(
z
∣
x
)
⋅
P
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(z,x)\cdot q(z|x)}{q(z|x)\cdot P(z|x)}{\rm d}z
∫zq(z∣x)logq(z∣x)⋅P(z∣x)P(z,x)⋅q(z∣x)dz =
∫
z
q
(
z
∣
x
)
log
P
(
z
,
x
)
q
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(z,x)}{q(z|x)}{\rm d}z
∫zq(z∣x)logq(z∣x)P(z,x)dz +
∫
z
q
(
z
∣
x
)
log
q
(
z
∣
x
)
P
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{q(z|x)}{P(z|x)}{\rm d}z
∫zq(z∣x)logP(z∣x)q(z∣x)dz
其中
∫
z
q
(
z
∣
x
)
log
q
(
z
∣
x
)
P
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{q(z|x)}{P(z|x)}{\rm d}z
∫zq(z∣x)logP(z∣x)q(z∣x)dz就是KL散度KL(q(z|x)||P(z|x)),KL散度的度量是两个分布之间的距离,一定大于等于0,所以
log
P
(
X
)
≥
∫
z
q
(
z
∣
x
)
log
P
(
z
,
x
)
q
(
z
∣
x
)
d
z
\log P(X) \geq\int_z q(z|x) \log \frac{P(z,x)}{q(z|x)}{\rm d}z
logP(X)≥∫zq(z∣x)logq(z∣x)P(z,x)dz 即
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
P
(
z
)
q
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(x|z) \rm P(z)}{q(z|x)}{\rm d}z
∫zq(z∣x)logq(z∣x)P(x∣z)P(z)dz 使
log
P
(
X
)
\log P(X)
logP(X)越大越好,只要使
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
P
(
z
)
q
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(x|z) \rm P(z)}{q(z|x)}{\rm d}z
∫zq(z∣x)logq(z∣x)P(x∣z)P(z)dz越大越好,也就是L越大越好。这个函数就叫做下界函数
L
b
L_b
Lb。所以VAE叫做近似方法。
L
b
L_b
Lb =
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
P
(
z
)
q
(
z
∣
x
)
d
z
\int_z q(z|x) \log \frac{P(x|z) \rm P(z)}{q(z|x)}{\rm d}z
∫zq(z∣x)logq(z∣x)P(x∣z)P(z)dz =
∫
z
q
(
z
∣
x
)
log
(
P
(
z
)
q
(
z
∣
x
)
)
d
z
\int_z q(z|x) \log (\frac{P(z)}{q(z|x)}){\rm d}z
∫zq(z∣x)log(q(z∣x)P(z))dz +
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
\int_z q(z|x) \log {P(x|z)}{\rm d}z
∫zq(z∣x)logP(x∣z)dz
其中
∫
z
q
(
z
∣
x
)
log
(
P
(
z
)
q
(
z
∣
x
)
)
d
z
\int_z q(z|x) \log (\frac{P(z)}{q(z|x)}){\rm d}z
∫zq(z∣x)log(q(z∣x)P(z))dz就是-KL(q(z|x)||P(z))(负KL散度),要让其越小越好,也就是要让q(z|x)与P(z)尽可能的一致。
而
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
\int_z q(z|x) \log {P(x|z)}{\rm d}z
∫zq(z∣x)logP(x∣z)dz是给定一个x生成z,然后z去重构x,让这个式子的值越大越好,也就是
∣
∣
x
−
x
^
∣
∣
2
||x-\widehat{x}||^2
∣∣x−x
∣∣2越小越好,也就是x与
x
^
\widehat{x}
x
越接近越好。
设
A
1
A_1
A1 =
∫
z
q
(
z
∣
x
)
log
(
P
(
z
)
q
(
z
∣
x
)
)
d
z
\int_z q(z|x) \log (\frac{P(z)}{q(z|x)}){\rm d}z
∫zq(z∣x)log(q(z∣x)P(z))dz =
−
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
)
)
-KL(q(z|x)||P(z))
−KL(q(z∣x)∣∣P(z))
A
2
A_2
A2 =
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
\int_z q(z|x) \log {P(x|z)}{\rm d}z
∫zq(z∣x)logP(x∣z)dz
A
1
A_1
A1就是让神经网络的输出
q
(
z
∣
x
)
q(z|x)
q(z∣x)尽量满足
P
(
z
)
P(z)
P(z),即要满足
∑
1
n
(
e
x
p
(
σ
i
)
−
(
1
+
σ
i
)
+
(
m
i
)
2
)
\sum_1^n(exp(\sigma_i)-(1+\sigma_i)+(m_i)^2)
∑1n(exp(σi)−(1+σi)+(mi)2)最小
A
2
A_2
A2要最大化
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
)
d
z
\int_z q(z|x) \log {P(x|z)}{\rm d}z
∫zq(z∣x)logP(x∣z)dz=
E
q
(
z
∣
x
)
[
log
P
(
x
∣
z
)
]
E_{q(z|x)}[\log P(x|z)]
Eq(z∣x)[logP(x∣z)]也就是
∣
∣
x
−
x
^
∣
∣
2
||x-\widehat{x}||^2
∣∣x−x
∣∣2越小越好
视频来自b站链接:https://www.bilibili.com/video/BV1Uj411Y7Zq/?spm_id_from=333.337.search-card.all.click&vd_source=ce384c1ab775f62228b1966cd93401b7