内容大部分参考《深入浅出图神经网络》
有些细节加入了自己的思考,可能有疏漏错误之处,请各位看官多多指教!
背景
深度学习的优势在于自动学习特征,卷积神经网络将表示学习与任务学习结合起来,其利用图像标签进行有监督的学习,可以学习到有判别性的特征对图像进行分类。
自编码器也是一种表示学习模型,但它没有利用标签信息进行监督,是一种无监督的学习模型,可以用于数据降维和特征提取。
基本思路
将输入映射到某个特征空间,再从该空间映射回输入空间中进行重构。其结构是由编码器和解码器组成,前者从输入数据提取特征,后者基于提取的特征重构输入数据。模型训练结束后,使用编码器进行特征提取。
最简单的自编码器有3层:1个输入层、1个隐藏层、1个输出层。从输入层到隐藏层为编码器,从隐藏层到输出层为解码器。
VAE原理
变分自编码器可以用于生成新的样本数据。其本质是生成模型。
假设样本服从某个复杂分布 P ( x ) P(x) P(x),生成模型的目的是对分布建模,这样就可以从分布中采样得到新的样本数据。
一般来说,每个样本点都可能受到一些因素的控制,比如对于手写数字,需要决定写什么数字、数字大小、笔画粗细等,这些因素被称为隐变量。用向量 z z z 表示隐变量,概率密度函数为 p ( z ) p(z) p(z),同时有一个这样的函数 f ( z ; θ ) f(z;\theta) f(z;θ)可以把从 p ( z ) p(z) p(z)中采样的数据 z z z 映射为与 X X X 比较相似的样本数据,即概率 p ( X ∣ z ) p(X|z) p(X∣z)更高。
p ( X ) = ∫ z p ( X ∣ z ) p ( z ) d z (1) p(X)=\int_z p(X|z)p(z)dz \tag{1} p(X)=∫zp(X∣z)p(z)dz(1) p ( X ) p(X) p(X)即为本问题的目标函数,希望其最大。
三个问题:
- 1.隐变量分布 p ( z ) p(z) p(z)如何选择;
- 2.条件分布 p ( X ∣ z ) p(X|z) p(X∣z)的选择;
- 3.(1)中积分的计算
对于隐变量的选择,VAE假设 z z z的每个维度都没有明确含义,仅仅要求采样方便,因此假设 z ∼ N ( 0 , I ) z \sim N(0,I) z∼N(0,I). 而 p ( X ∣ z ) p(X|z) p(X∣z)的选择通常也是正态分布:
p ( x ∣ z ) = N ( f ( z ; θ ) , σ 2 I ) p(x|z)=N(f(z;\theta),\sigma^2I) p(x∣z)=N(f(z;θ),σ2I) 注: f ( z ; θ ) f(z;\theta) f(z;θ)即解码器,其中 σ 2 \sigma^2 σ2为超参数。
上述假设的合理性:实际上任意一个d维的复杂分布都可以通过对d维正态分布使用一个复杂的变换得到。形象理解可以参考一篇知乎文章。
因此给定一个表达力足够强的函数,可以将服从正态分布的隐变量 z z z 映射为模型所需要的隐变量,再将这些隐变量映射为 x x x.
——《深入浅出图神经网络》
解决前两个问题后,来看第三个问题。
常规思路:
首先(1)这个积分可以转换为求和,即从 p ( z ) p(z) p(z)中采样得到 z ~ \tilde{z} z~,然后根据神经网络学习到的 f ( z ; θ ) f(z;\theta) f(z;θ),求出 p ( x ∣ z ~ ) p(x|\tilde{z}) p(x∣z~)值最后对 z ~ \tilde{z} z~ 取平均,即得到积分估计值。
但是,根据前面的假设, z z z服从标准正态分布, p ( x ∣ z