从Autoencoder到VAE及其变体

本文从Autoencoder出发,逐步介绍了多种改进版本,包括Denoising Autoencoder、Sparse Autoencoder等,直至发展到VAE及其变种。涵盖了变分自编码器的基础知识、损失函数推导、重参数技巧等内容。

本文主要是对博文1进行翻译;其中“VAE with AF Prior”小节中大部分转自博文2。侵删。

  • 博文1:《From Autoencoder to Beta-VAE》 链接
  • 博文2:《干货 | 你的 KL 散度 vanish 了吗?》 链接

目录

符号定义

1. Autoencoder, 2006 [paper]

2. Denoising Autoencoder, 2008, [paper]

3. Sparse Autoencoder, [paper]

k-Sparse Autoencoder

4. Contractive Autoencoder, 2011, [paper]

5. VAE: Variational Autoencoder, 2014, [paper]

损失函数推导:ELBO/VLB(変分下界)

方式1: 根据KL散度

方式2: 根据极大似然估计进行推导

Reparameterization Trick重参数技巧

6. VAE with AF Prior, [paper]

补充:博文2:《干货 | 你的 KL 散度 vanish 了吗?》链接

7. β-VAE, 2017, [paper]

8. VQ-VAE, 2017, [paper]

9. VQ-VAE2, 2019, [paper], 比肩BigGAN的生成模型

10. TD-VAE, 2019, [paper]

 


符号定义

1. Autoencoder, 2006 [paper]

自编码器Autoencoder,是一个神经网络,采用无监督的方式学习一个Identity Function(一致变换):先对数据进行有效的压缩,然后再重建原始输入。

它由两部分组成:

  • Encoder网络:它将原始的high-dimensional输入转换为latent low-dimensional code。输入的大小>输出的大小。
  • Decoder网络:将latent low-dimensional code恢复为原始数据。

Encoder网络主要实现dimensionality reduction,与PCA和Matrix Factorization(矩阵因子分解)的功能类似。

Autoencoder的优化过程就是最小化reconstructed input与input之间的差异。一个好的latent representation不仅能够蕴含隐变量信息,也能很好的进行压缩和解压。

2. Denoising Autoencoder, 2008, [paper]

由于Autoencoder是学习一个Identity function,因此当网络的参数远远大于样本点数量时,会存在过拟合的问题。为了缓解过拟合问题,提高模型的鲁棒性,Denoising Autoencoder被提出。

Inspiration: 算法的思路来源于人类能够很好地识别对象,哪怕这个对象被部分损坏。因此,Denoise Autoencoder的目的是能够发现和捕获输入维度之间的关系,以便推断缺失的片段。

算法思路:为输入数据添加扰动,如:添加噪声/随机遮盖掉输入vector的部分值等方式,构造corrupted data;然后令Decoder恢复original input,而不是被扰动后的数据(corrupted data)。

3. Sparse Autoencoder, [paper]

Sparse Autoencoder(稀疏自编码) 在hidden unit activation上添加一个“sparse”约束,以避免过拟合和提高鲁棒性。它迫使模型在同一时间只有少量的隐藏单元被激活,换句话说,一个隐藏的神经元在大部分时间应该是不激活的。

 

回顾常用的激活函数,例如:sigmoid, tanh, relu, leaky relu, etc。当激活函数的值接近1时,神经元被激活;当接近于0时,神经元被抑制。

 

设第l层hidden-layer包含𝑠𝑙个神经元,那么第l层的第j个神经元的激活函数可以表示为:

k-Sparse Autoencoder

k-Sparse Autoencoder(Makhzani and Frey, 2013),在bottlenect layer只保留k个神经元被激活,即:units with top k highest activations。

计算过程

  • 根据encoder network计算compressed code: z=g(x)
  • 对code vector z的值进行排序,只保留前k个最大的值,其余的值置为0:𝑧^′=𝑆𝑝𝑎𝑟𝑠𝑖𝑡𝑦(𝑧){z}' = Sparsity(z)。(可以通过ReLU layer withan adjustable threshold实现)
  • Decoder对𝑧′进行解码,重建输入数据

损失函数

 

注意,反向传播时梯度只通过top k activated hidden units进行传播。

4. Contractive Autoencoder, 2011, [paper]

好的表征就要具有两个特点:

  1. 可以很好地重构输入数据,如:Autoencoder, sparse autoencoder
  2. 对输入数据中包含的一定程度的扰动具有鲁棒性,如:denoising autoencod
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值