深度学习--自编码器(AE)、变分自编码器(VAE)

提示:仅供自己学习、复习需要,有任何问题可在评论区提出。


一、自编码器AE

自编码器是一种无监督的特征学习,其目的是利用无标签数据找到一个有效的低维的特征提取器。那什么是特征学习呢?在机器学习领域,特征学习是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。

我们希望输入一个特征,通过编码器能够输出一个低维的数据,进行特征的降维,让特征里面尽量包含主要的信息,这就是自编码器的基本核心思想。

编码器主要有编码器与解码器组成。

输入数据x通过编码器得到特征z,我们希望Z通过解码器得到的 x ^ \hat{x} x^与输入x尽可能的相似。在卷积神经网络流行后,主要用ReLU+CNN来实现自编码器。

在真实训练的时候把 ∣ ∣ x − x ^ ∣ ∣ 2 \mid\mid x-\hat{x} \mid\mid^2 ∣∣xx^2作为L2损失当做我们监督的信息,这不就是一个网络吗?一个编码层,一个解码层,中间Z也算一个,但是这里不作考虑,具体情况具体分析。

自编码器是将输入与输出比,即 ∣ ∣ x − x ^ ∣ ∣ 2 \mid\mid x-\hat{x} \mid\mid^2 ∣∣xx^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^)+(1x)log(1x^))
在这里插入图片描述
其实我们在学好了以后,可以将解码器给剔除,因为学好了以后,得到的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(xz)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(zx)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(zx)logP(zx)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(zx)logq(zx)P(zx)P(z,x)q(zx)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(zx)logq(zx)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(zx)logP(zx)q(zx)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(zx)logP(zx)q(zx)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(zx)logq(zx)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(zx)logq(zx)P(xz)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(zx)logq(zx)P(xz)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(zx)logq(zx)P(xz)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(zx)log(q(zx)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(zx)logP(xz)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(zx)log(q(zx)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(zx)logP(xz)dz是给定一个x生成z,然后z去重构x,让这个式子的值越大越好,也就是 ∣ ∣ x − x ^ ∣ ∣ 2 ||x-\widehat{x}||^2 ∣∣xx 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(zx)log(q(zx)P(z))dz = − K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) -KL(q(z|x)||P(z)) KL(q(zx)∣∣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(zx)logP(xz)dz
A 1 A_1 A1就是让神经网络的输出 q ( z ∣ x ) q(z|x) q(zx)尽量满足 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(zx)logP(xz)dz= E q ( z ∣ x ) [ log ⁡ P ( x ∣ z ) ] E_{q(z|x)}[\log P(x|z)] Eq(zx)[logP(xz)]也就是 ∣ ∣ x − x ^ ∣ ∣ 2 ||x-\widehat{x}||^2 ∣∣xx 2越小越好
在这里插入图片描述

视频来自b站链接:https://www.bilibili.com/video/BV1Uj411Y7Zq/?spm_id_from=333.337.search-card.all.click&vd_source=ce384c1ab775f62228b1966cd93401b7

  • 42
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值