week7 Auto-Encoder

Auto-Encoder

什么是AE? 资料:【【变分自编码器VAE】可视化讲明白】 https://www.bilibili.com/video/BV1f34y1e7EK?share_source=copy_web&vd_source=078ecc13a0655f48c14ea779210b8653

相对熵 交叉熵

  1. 离散情况:给定两个离散分布p和q

Kullback-Leibler (KL) divergence 相对熵: K L ( p , q ) = ∑ i = 1 d p i log ⁡ p i q i K L(p, q)=\sum_{i=1}^{d} p_{i} \log \frac{p_{i}}{q_{i}} KL(p,q)=i=1dpilogqipi

Cross-entropy (CE) 交叉熵:

C E ( p , q ) = − ∑ i = 1 d p i log ⁡ q i = K L ( p , q ) + H ( p )  where  H ( p ) = − ∑ i = 1 d p i log ⁡ p i  is the entropy of  p .  C E(p, q)=-\sum_{i=1}^{d} p_{i} \log q_{i}=K L(p, q)+H(p) \text { where } H(p)=-\sum_{i=1}^{d} p_{i} \log p_{i} \text { is the entropy of } p \text {. } CE(p,q)=i=1dpilogqi=KL(p,q)+H(p) where H(p)=i=1dpilogpi is the entropy of p

熵的计算:

在这里插入图片描述

Cross-entropy between two Bernoulli distributions:

  • Given 0≤𝑎,𝑏 ≤1, we have two Bernoulli distributions 𝐵𝑒𝑟(𝑎)and 𝐵𝑒𝑟(𝑏), the CE divergence between them is: C E ( [ a , 1 − a ] , [ b , 1 − b ] ) = − a log ⁡ b − ( 1 − a ) log ⁡ ( 1 − b ) C E([a, 1-a],[b, 1-b])=-a \log b-(1-a) \log (1-b) CE([a,1a],[b,1b])=alogb(1a)log(1b)
  1. 连续情况:给定两个连续分布p和q

相对熵 KL divergence between 𝒑and 𝒒 公式: K L ( p , q ) = ∫ p ( x ) log ⁡ p ( x ) q ( x ) d x K L(p, q)=\int p(\boldsymbol{x}) \log \frac{p(\boldsymbol{x})}{q(\boldsymbol{x})} d \boldsymbol{x} KL(p,q)=p(x)logq(x)p(x)dx

相对熵基于高斯分布的公式: K L ( N ( μ , diag ⁡ ( σ 2 ) ) , N ( 0 , I ) ) = 1 2 ( ∥ σ ∥ 2 2 + ∥ μ ∥ 2 2 − 1 − ∑ i = 1 d log ⁡ ( σ i 2 ) ) K L\left(N\left(\mu, \operatorname{diag}\left(\sigma^{2}\right)\right), N(0, I)\right)=\frac{1}{2}\left(\|\sigma\|_{2}^{2}+\|\mu\|_{2}^{2}-1-\sum_{i=1}^{d} \log \left(\sigma_{i}^{2}\right)\right) KL(N(μ,diag(σ2)),N(0,I))=21(σ22+μ221i=1dlog(σi2))

高斯分布: N ( x ∣ μ , Σ ) = 1 det ⁡ ( 2 π Σ ) 1 / 2 exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } N(x \mid \mu, \Sigma)=\frac{1}{\operatorname{det}(2 \pi \Sigma)^{1 / 2}} \exp \left\{-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right\} N(xμ,Σ)=det(2πΣ)1/21exp{21(xμ)TΣ1(xμ)}

KL证明过程:

img

img

PCA

定义

一种常见的线性降维方法广泛应用于图像处理、人脸识别、数据压缩、信号去噪等领域

原理

  • 设原数据大小为 N × M,****经过PCA降维****后的数据大小为 N × K,其中 K < M。
  • PCA的中心思想是:**将高维数据投影到具有最大方差的低维空间中,**只要将数据投影到方差最大的低维(K维)空间中就行。

PCA执行步骤

  1. 分别求每个维度的平均值,然后对于所有的样例,都减去对应维度的均值,得到去中心化的数据;
  2. 求协方差矩阵C:用去中心化的数据矩阵乘上它的转置,然后除以(N-1)即可,N为样本数量;
  3. 求协方差的特征值和特征向量;
  4. 将特征值按照从大到小排序,选择前k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵;
  5. 将样本点从原来维度投影到选取的k个特征向量,得到低维数据;
  6. 通过逆变换,重构低维数据,进行复原。

PCA实例求解
步骤1:数据去中心化:

在这里插入图片描述

步骤2:计算协方差矩阵:

在这里插入图片描述

步骤3:对协方差矩阵进行奇异值分解:(也成矩阵的相似对角化)

在这里插入图片描述

步骤4:取最大的 K 个特征值与特征向量构成一个变换矩阵 PK (取 K = 1)

在这里插入图片描述

步骤5:将原始数据投影到 K 维空间:

在这里插入图片描述

最后结果的投影线如图所示:

在这里插入图片描述

Auto-Encoder

自编码器(autoencoder, AE)是一类在半监督学习和非监督学习中使用的人工神经网络(Artificial Neural Networks, ANNs),其功能是通过将输入信息作为学习目标,对输入信息进行表征学习(representation learning)。如果算法把x作为监督信号来学习,这里算法称为自监督学习(Self-supervised Learning)。特征降维(Dimensionality Reduction)在机器学习中有广泛的应用, 比如文件压缩(Compression)、 数据预处理(Preprocessing)等。 最常见的降维算法有主成分分析法(Principal components analysis, 简称 PCA),通过对协方差矩阵进行特征分解而得到数据的主要成分,但是 PCA 本质上是一种线性变换,提取特征的能力极为有限。

Deep Auto-encoder

编码器和解码器共同完成了输入数据𝒙的编码和解码过程,把整个网络模型f_{\theta }叫做自动编码器(Auto-Encoder),简称自编码器。 如果使用深层神经网络来参数化g_{\theta 1}h_{\theta 2}函数, 则称为深度自编码器(Deep Auto-encoder)。

在这里插入图片描述

  • Reconstruction error

Q1:如何证明latent code 𝒛 可以保留x中的关键信息?

Q2:如何计算重构的x(即 x ~ = g Φ ( z ) \tilde{x}=g_{\Phi}(z) x~=gΦ(z))与原x的准确度?

A:计算 Reconstruction error: d ( x , x ~ ) d(x,\tilde{x}) d(x,x~),然后最小化reconstruction error

​ 1. 距离的定义方式: d为x与 x ~ \tilde{x} x~的距离,可以用L2 distance表示 : d ( x , x ~ ) = 1 2 ∥ x − x ~ ∥ 2 2 d(\boldsymbol{x}, \tilde{\boldsymbol{x}})=\frac{1}{2}\|\boldsymbol{x}-\tilde{\boldsymbol{x}}\|_{2}^{2} d(x,x~)=21xx~22

  1. 交叉熵的定义方式:将x与 x ~ \tilde{x} x~控制在[0,1]范围内(applied sigmoid on the output)

    那么

    d ( x , x ~ ) = ∑ i = 1 d C E ( [ x i , 1 − x i ] , [ x ~ i , 1 − x ~ i ] ) = ∑ i = 1 d [ − x i log ⁡ x ~ i − ( 1 − x i ) log ⁡ ( 1 − x ~ i ) ] \begin{aligned} d(\boldsymbol{x}, \tilde{\boldsymbol{x}}) &=\sum_{i=1}^{d} C E\left(\left[x_{i}, 1-x_{i}\right],\left[\tilde{x}_{i}, 1-\tilde{x}_{i}\right]\right) \\ &=\sum_{i=1}^{d}\left[-x_{i} \log \tilde{x}_{i}-\left(1-x_{i}\right) \log \left(1-\tilde{x}_{i}\right)\right] \end{aligned} d(x,x~)=i=1dCE([xi,1xi],[x~i,1x~i])=i=1d[xilogx~i(1xi)log(1x~i)]

Undercomplete Auto-Encoder

在这里插入图片描述

  • Q:Why would one want to learn to copy the input to the output 为什么要学习将输入复制到输出

​ A:

  1. We are not actually interested in the output

  2. The hope is that by learning to perform copying from input to output via the intermediate code 𝑧, this code will capture useful and key properties of the data

    希望通过学习通过中间代码从输入到输出进行复制,此代码将捕获数据的有用和关键属性

  • Ensure the code 𝑧learn useful information is through ‘compression’

    • Letting dimension of the code 𝑧 to be smaller than the dimension of the input.

    • This is called an undercomplete AE

  • When the decoder is linear and mean squared error loss is used, this is identical to Principal Component Analysis (PCA)

    当decoder 是线性的并且使用平均平方误差损失时,这与主组件分析(PCA)相同

Overcomplete Auto-Encoder 过度完备自编码

  • Overcomplete AE is when the latent code dimension 𝑚 is greater than the input dimension 𝑑

    Overcomplete AE 是潜在代码z维度𝑚大于输入维度𝑑

  • In undercomplete AE, 𝑚<𝑑, hence the code can learn salient features of the data,

    在过度完备自编码中,𝑚<𝑑,因此代码可以学习数据的显着特征

For overcomplete case, the encoder/decoder could be too powerful, hence it can copy (even perfectly) without learning any useful code 𝑧

对于 overcomplete 的情况,编码器/解码器可能太强大了,因此它可以复制(甚至完美)而无需学习任何有用的代码𝑧

ft代码:
在这里插入图片描述

Implementation of Standard Auto-Encoder
在这里插入图片描述

Sparse Auto-Encoder

稀疏自编码器简单地在训练时结合编码层的稀疏惩罚 Ω(h) 和重构误差:L(x,g(f(x))) + Ω(h),其中 g(h) 是解码器的输出,通常 h 是编码器的输出,即 h = f(x)。稀疏自编码器一般用来学习特征,以便用于像分类这样的任务。稀疏正则化的自编码器必须反映训练数据集的独特统计特征,而不是简单地充当恒等函数。以这种方式训练,执行附带稀疏惩罚的复制任务可以得到能学习有用特征的模型。
在这里插入图片描述

****稀疏惩罚Ω(𝒛)有以下选择方式

在这里插入图片描述

Sparse Auto-Encoder代码实现:

在这里插入图片描述

在这里插入图片描述

正则化参数的影响:

在这里插入图片描述

Contractive Auto-Encoder (CAE-收缩自编码)

在这里插入图片描述

  • 正则化AE:

    $ \min {\theta, \Phi} \mathbb{E}{\boldsymbol{x} \sim \mathbb{P}}\left[d\left(\boldsymbol{x}, g_{\Phi}\left(f_{\theta}(\boldsymbol{x})\right)\right]+\lambda \Omega(\boldsymbol{x}, \boldsymbol{z})\right.
    where \Omega(\boldsymbol{x}, \boldsymbol{z})=\sum_{i=1}^{d}\left|\nabla_{x} \mathbf{Z}{i}\right|^{2}=\left|\frac{\partial f{\theta}(x)}{\partial x}\right|_{F}^{2} .$

  • 这种类型的自动编码器适用于部分损坏的输入,并训练以恢复原始未失真的图像。

  • 目标是网络将能够复制图像的原始版本。通过将损坏的数据与原始数据进行比较,网络可以了解数据的哪些特征最重要,哪些特征不重要/损坏。换句话说,为了让模型对损坏的图像进行去噪,它必须提取图像数据的重要特征。

  • 为了防止神经网络记忆住输入数据的底层特征, Denoising Auto-Encoders 给输入数据添加随机的噪声扰动,如给输入𝒙添加采样自高斯分布的噪声𝜀: x ′ = x + ϵ  where  ϵ ∼ N ( 0 , η I )  and learn such that  g Φ ( f θ ( x ′ ) ) ≈ x x^{\prime}=x+\epsilon \text { where } \epsilon \sim N(0, \eta I) \text { and learn such that } g_{\Phi}\left(f_{\theta}\left(x^{\prime}\right)\right) \approx x x=x+ϵ where ϵN(0,ηI) and learn such that gΦ(fθ(x))x

    添加噪声后,网络需要从学习到数据的真实隐藏变量 z,并还原出原始的输入𝒙。也就是Denoising auto-encoder:$\min {\theta, \Phi} \mathbb{E}{\boldsymbol{x} \sim \mathbb{P}}\left[\mathbb{E}{\boldsymbol{x}^{\prime} \sim N(\boldsymbol{x}, \eta I)}\left[d\left(\boldsymbol{x}, g{\Phi}\left(f_{\theta}\left(\boldsymbol{x}^{\prime}\right)\right)\right]\right]\right. $
    在这里插入图片描述

代码实现Denoising Auto-Encoder

在这里插入图片描述

Implementation of Denoising Auto-Encoder

在这里插入图片描述

Variational Auto-Encoder (VAE)(变分自编码器)(重点)

基本的自编码器本质上是学习输入𝒙和隐藏变量𝒛之间映射关系, 它是一个判别模型(Discriminative model),并不是生成模型(Generative model)。

变分自编码器(Variational AutoEncoders,VAE):给定隐藏变量的分布P(𝒛), 如何可以学习到条件概率分布P(𝒙|𝒛), 则通过对联合概率分布P(𝒙, 𝒛) = P(𝒙|𝒛)P(𝒛)进行采样, 生成不同的样本:
2

从神经网络的角度来看, VAE 相对于自编码器模型,同样具有编码器和解码器两个子网络。解码器接受输入𝒙, 输出为隐变量𝒛;解码器负责将隐变量𝒛解码为重建的𝒙。 不同的是, VAE 模型对隐变量𝒛的分布有显式地约束,希望隐变量𝒛符合预设的先验分布P(𝒛)。在损失函数的设计上,除了原有的重建误差项外,还添加了隐变量𝒛分布的约束项。

从概率的角度,假设数据集都采样自某个分布𝑝(𝒙|𝒛), 𝒛是隐藏变量,代表了某种内部特征, 比如手写数字的图片𝒙, 𝒛可以表示字体的大小、 书写风格、 加粗、斜体等设定,它符合某个先验分布𝑝(𝒛),在给定具体隐藏变量𝒛的情况下,可以从学到了分布𝑝(𝒙|𝒛)中采样一系列的生成样本,这些样本都具有𝒛所表示的共性。

通常假设𝑝(𝒛)符合已知的分布𝒩(0,1)。 在𝑝(𝒛)已知的条件下, 希望能学会生成概率模型𝑝(𝒙|𝒛)。这里可以采用最大似然估计(Maximum Likelihood Estimation)方法: 一个好的模型,应该拥有很大的概率生成真实的样本𝒙 ∈ 𝔻。 如果生成模型𝑝(𝒙|𝒛)是用𝜃来参数化, 那么的神经网络的优化目标是:

\underset{\theta }{maxp(x)} = \int_{z}^{}p(x|z)p(z) dz

img

由于z是连续变量,这个积分不能转换为离散形式,不能直接优化。

利用变分推断,再经过一系列化简VAE模型优化目标:

max(\pounds (\theta ,\phi )) = max(-\mathbb{D}_{KL}(q_{\phi }(z|x)||p(z)) + \mathbb{E}_{z-q}[logp_{\theta }(x|z)])

可以用编码器网络参数化𝑞 (𝒛|𝒙)函数,解码器网络参数化𝑝𝜃(𝒙|𝒛)函数,通过计算解码器的输出分布𝑞 (𝒛|𝒙)与先验分布𝑝(𝒛)之间的 KL 散度,以及解码器的似然概率log 𝑝𝜃(𝒙|𝒛)构成的损失函数,即可优化ℒ(𝜃, 𝜙)目标。优化函数转换为:

min\mathbb{D}_{KL}(q_{\phi }(z|x)||p(z))

该项可以基于自编码器中的重建误差函数实现。其中,当𝑞 (z |𝑥)和𝑝(z )都假设为正态分布时:

\mathbb{D_{KL}}(q_{\phi }(z|x)||p(z)) = log(\frac{\sigma _{2}}{\sigma _{1}}) + \frac{\sigma _{1}^{2} + (u_{1}-u_{2})^2} {2\sigma _{2}^{2}}-\frac{1}{2}

各分量独立的多元正态分布之间的 KL 散度即为:(最终目标函数-需要记住)

img

其中,d 是隐变量 Z 的维度。

img \Rightarrow img

当𝑞 ( |𝑥)为正态分布𝒩(, ), 𝑝( )为正态分布𝒩(0,1)时,即 = 0, =1,此时

\mathbb{D}_{KL}(q_{\phi }(z|x)||p(z)) = -log\sigma_{1} + 0.5\sigma _{1}^{2} + 0.5u_{1}^{2} - 0.5

也可以把公式写成:(单元的KL散度推导公式-离散变量)

img

对于连续变量,我们有如下推导过程:

img

隐变量采样自编码器的输出𝑞 ( |𝑥),当𝑞(z|𝑥)和𝑝(z )都假设为正态分布时, 编码器输出正态分布的均值𝜇和方差𝜎2,解码器的输入采样自𝒩(𝜇, 𝜎2)。由于采样操作的存在,导致梯度传播是不连续的,无法通过梯度下降算法端到端式地训练 VAE 网络:

img

VAE执行过程和结构:

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: Auto-encoder是一种深度学习模型,用于将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。在降维方面,PCA会将不同类别的数据混合在一起,而auto-encoder则可以将它们分开。除了降维之外,auto-encoder还有其他用途,比如图片搜索。 引用: 训练一个auto-encoder的过程通常会先固定一些权重参数,然后逐层训练多个自编码器,每个自编码器的输入和输出维度逐渐逼近目标维度。最后,可以使用反向传播来微调网络参数。现在也可以不进行预训练,直接训练auto-encoder。此外,auto-encoder还可以与卷积神经网络(CNN)一起使用。 引用: 特征区分技术是指在auto-encoder中,通过编码器获取的Embedding向量中,可以区分出不同输入数据的特征信息。比如,对于语音输入,可以分别提取出语音内容和说话者的特征。这就是Feature Disentangle的目标。 根据李宏毅老师的讲解,auto-encoder是一种用于降维、重构和特征提取的深度学习模型。它可以将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。除了降维之外,auto-encoder还可以用于图片搜索等任务。训练auto-encoder时,可以使用预训练和微调的方法,也可以直接进行训练。此外,auto-encoder还可以与卷积神经网络(CNN)结合使用。特征区分技术可以用于auto-encoder中,用于提取不同输入数据的特征信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值