自编码器即 Auto Encoders,简称 AE,假设存在一个神经网络:
容易发现,该神经网络的输入与输出维度相同,隐藏层的张量维度远小于输入或输出数据,通常目标是用输入还原输出,应使两者相接近,所以有损失函数 L ( x , x ^ ) L(x,\widehat{x}) L(x,x ),参数前者是输入,后者是网络输出;可以看出,自编码器是一种无监督学习,在这种技术中,利用神经网络进行表征学习;
理想的自编码器模型应具备如下性质:
通常,将自编码器中生成的最小维度张量称为 Embedding Space 或者 Latent Space:
自编码器是一个包含编码器和解码器的神经网络;编码器以数据点 X X X 作为输入,并将其转换为低维表达 Z Z Z;解码器取低维的表达 Z Z Z,返回一个与输入 X X X 相似的重构数据 X ^ \widehat{X} X ;下图给出了一个以MNIST图像为输入的自编码器的例子:
自编码器的损失函数用于衡量重建过程中丢失的信息:
L ( X , X ^ ) = ∣ ∣ X − X ^ ∣ ∣ 2 L(X,\widehat{X})=||X-\widehat{X}||^{2} L(X,X )=∣∣X−X ∣∣2
将高维输入转为低维embedding的意义在于:
低维embedding的可视化举例:
这样,可以直观看出,高维图像各自所属于的分布;对embedding空间的数据进行分类,将会更加方便,提高准确率,提高计算速度
变分自编码器 Variational Auto Encoders,简称VAE;在传统的 AE 里,只能生成与原始输入相似的图像。然而,VAE 可以从原始数据集中生成新数据;VAE 不需要像 AE 一样让输出数据非常接近输入数据;
VAE 的主要思想是将输入 X X X 嵌入到一个分布而不是一个点上,然后从分布中抽取一个随机样本 Z Z Z,而不是直接从编码器中产生;VAE 的编码器通常写为 P ( z ∣ x ; φ ) P(z|x;\varphi) P(z∣x;φ),它取一个数据点 X X X,产生一个分布(多元高斯),编码器预测高斯分布的均值和标准差;从这个分布中采样低维嵌入 Z Z Z,解码器为 P ( x ∣ z ; θ ) P(x|z;\theta) P(x∣z;θ),它取一个嵌入 Z Z Z,产生输出 x ^ \widehat{x} x ;
变分自编码器可以表示如下:
可见,编码器接收输入数据 X X X,并产生 μ \mu μ 和 l o g ( σ 2 ) log(\sigma^{2}) log(σ2),注意,如果直接输出 σ 2 \sigma^{2} σ2,必然要求必须为正值,使用对数后,值将映射到正负空间,这有利于帮助网络输出得更轻松;最后,从高斯分布中生成 embedding Z Z Z,生成的方式为:
z = μ + σ × ε , ε ∼ N ( 0 , 1 ) z=\mu+\sigma \times \varepsilon ,\varepsilon \sim N(0,1) z=μ+σ×ε,ε∼N(0,1)
将 embedding Z Z Z 传入解码器(和 AE 的解码器一样),得到一个输出 X ^ \widehat{X} X ;
变分自编码器的损失函数为:
l i ( θ , φ ) = − E z ∼ P ( z ∣ x i ; φ ) [ l o g P ( x i ∣ z ; θ ) ] + K L ( P ( z ∣ x i ; φ ) ∣ ∣ P ( z ) ) l_{i}(\theta,\varphi)=-E_{z\sim P(z|x_{i};\varphi)}[logP(x_{i}|z;\theta)]+KL(P(z|x_{i};\varphi)||P(z)) li(θ,φ)=−Ez∼P(z∣xi;φ)[logP(xi∣z;θ)]+KL(P(z∣xi;φ)∣∣P(z))
VAE 的损失函数分为两部分"变分下界+正则化器":
VAE的中“变分”,是因为损失函数的推导过程用到了KL散度及其性质
涉及到图数据的处理时,首先回顾邻接矩阵(Adjacency Matrix),邻接矩阵代表图的结构:
关于图数据,还要回顾特征矩阵(Feature Matrix),特征矩阵代表图的特征:
图变分自编码器 Variational Graph Autoencoders,简称 VGAE 或者 GVAE,是用于处理图数据的变分自编码器;VGAE的编码器(推理模型)由图卷积网络( GCN )组成,它以邻接矩阵 A A A和特征矩阵 X X X作为输入,输出 embedding 空间的变量 Z Z Z:
GCN回顾 第二课.图卷积神经网络
第一个GCN层生成一个低维特征矩阵:
X ‾ = G C N ( X , A ) = R e L U ( A ~ X W 0 ) , A ~ = D ~ − 1 2 ( A + λ I ) D ~ − 1 2 \overline{X}=GCN(X,A)=ReLU(\widetilde{A}XW_{0}),\widetilde{A}=\widetilde{D}^{-\frac{1}{2}}(A+\lambda I)\widetilde{D}^{-\frac{1}{2}} X=GCN(X,A)=ReLU(A XW0),A =D −21(A+λI)D −21
第二个GCN层生成 μ \mu μ和 l o g σ 2 log\sigma^{2} logσ2:
μ , l o g σ 2 = G C N μ , σ ( X , A ) = A ~ X ‾ W 1 \mu,log\sigma^{2}=GCN_{\mu,\sigma}(X,A)=\widetilde{A}\overline{X}W_{1} μ,logσ2=GCNμ,σ(X,A)=A XW1
联立一层GCN和二层GCN,可以得到编码器的计算:
μ , l o g σ 2 = A ~ [ R e L U ( A ~ X W 0 ) ] W 1 \mu,log\sigma^{2}=\widetilde{A}[ReLU(\widetilde{A}XW_{0})]W_{1} μ,logσ2=A [ReLU(A XW0)]W1
然后可以从分布中采样 Z Z Z:
z = μ + σ × ε , ε ∼ N ( 0 , 1 ) z=\mu+\sigma \times \varepsilon ,\varepsilon \sim N(0,1) z=μ+σ×ε,ε∼N(0,1)
解码器又称为生成模型,解码器(生成模型)由embedding变量 Z Z Z 之间的内积定义;解码器的输出是一个重构的邻接矩阵 A ^ \widehat{A} A ,定义为:
A ^ = s i g m o i d ( z z T ) \widehat{A}=sigmoid(zz^{T}) A =sigmoid(zzT)
注释:假设图数据中共 n n n个节点,得到隐变量的形状为 z ∈ R n × ∗ z\in \mathbb{R}^{n\times \ast} z∈Rn×∗, ∗ \ast ∗表示任意维数,经过内积, A ^ \widehat{A} A 的形状和邻接矩阵 A A A的形状一致,均为 n × n n\times n n×n;
Decoder使用内积的原因:想寻求一种方法,衡量各个顶点之间的相似性(存在顶点之间的关系信息),从而达到生成一个新邻接矩阵的目标,这个新邻接矩阵包含了节点之间的关系信息,因此是具有意义的
VGAE 的损失函数和 VAE 的损失函数形式一致:
L = − E Z ∼ P ( Z ∣ X , A ; W 0 , W 1 ) [ l o g P ( A ^ ∣ Z ) ] + K L ( P ( Z ∣ X , A ; W 0 , W 1 ) ∣ ∣ P ( Z ) ) L=-E_{Z\sim P(Z|X,A;W_{0},W_{1})}[logP(\widehat{A}|Z)]+KL(P(Z|X,A;W_{0},W_{1})||P(Z)) L=−EZ∼P(Z∣X,A;W0,W1)[logP(A ∣Z)]+KL(P(Z∣X,A;W0,W1)∣∣P(Z))
第一项变分下界用于测量网络重构数据的程度,以防重构数据过度偏离原始数据;第二项正则化器约束编码器输出的分布接近人为定义的隐分布 P ( Z ) P(Z) P(Z)(比如高斯分布);
GAN即Generative Adversarial Network,GAN由两部分组成,一个是生成器Generator,另一个是判别器Discriminator,GAN 的内容回顾 Pytorch笔记本-第十课.图片风格迁移和GAN;GAN 广泛用于图像生成和语音生成:
一般游戏开发和动画制作费用昂贵,往往需要雇佣许多艺术家从事相对常规的工作,通过GAN就能快速且低成本生成动画人物:
通过额外的姿态输入,也可以将图像转换为不同的姿态(多用于电商行业):
图对抗生成网络即 GraphGAN,由一个Generator和Discriminator组成;关于GraphGAN,需要注意以下符号说明:
GraphGAN的训练过程如下:
训练方式其实与GAN是一样的,也是交替训练,最开始固定生成器,训练判别器,再固定判别器,训练生成器,以此交替训练;
训练的目标:
m i n { θ G } m a x { θ D } V ( G , D ) min_{\left\{\theta_{G}\right\}}max_{\left\{\theta_{D}\right\}}V(G,D) min{θG}max{θD}V(G,D)
其中:
V ( G , D ) = ∑ c = 1 V ( E v ∼ p t r u e ( v ∣ v c ) [ l o g D ( v , v c ; θ D ) ] ) + ( E v ∼ G ( v ∣ v c ; θ G ) [ l o g ( 1 − D ( v , v c ; θ D ) ) ] ) V(G,D)=\sum_{c=1}^{V}(E_{v\sim p_{true}(v|v_{c})}[logD(v,v_{c};\theta_{D})])+(E_{v\sim G(v|v_{c};\theta_{G})}[log(1-D(v,v_{c};\theta_{D}))]) V(G,D)=c=1∑V(Ev∼ptrue(v∣vc)[logD(v,vc;θD)])+(Ev∼G(v∣vc;θG)[log(1−D(v,vc;θD))])
可看出,先对于 θ D \theta_{D} θD最大化 V ( G , D ) V(G,D) V(G,D),即固定 G G G,训练 D D D;再对于 θ G \theta_{G} θG最小化 V ( G , D ) V(G,D) V(G,D),即固定 D D D,训练 G G G