Variational Prototyping-Encoder: One-Shot Learning with Prototypical Images-阅读笔记
基础概念
分布: 分布可以指代不同的东西,比如数据分布或者概率分布。下面所涉及的是概率分布,也就是用于表述随机变量取值的概率规律。我们可以把分布想成一条落在两个轴(X轴、Y轴)之间的一条直线。其中X表示不同的数值,Y表示观察X轴上的值所取得的概率,即
y
=
p
(
x
)
y=p(x)
y=p(x)。下图是一个分布的可视化:
这是一个连续概率分布。比如,我们可以将 X 轴看作是人的身高,Y 轴是找到对应身高的人的概率。
信息量: 可以近似的将不确定性视为信息量。一个信息带来的不确定性越大,其带来的信息量就越大。
考虑连续型随机变量的情况,设
p
p
p为啥随机变量
X
X
X的概率分布,即
p
(
x
)
p(x)
p(x)为随机变量
X
X
X在
X
=
x
X=x
X=x处的概率密度函数值,随机变量
X
X
X在
x
x
x的香农信息量为:
− l o g 2 p ( x ) = l o g 2 1 p ( x ) -log_{2} p(x) = log_2 \frac{1}{p(x)} −log2p(x)=log2p(x)1
信息熵: 用于刻画消除随机变量X的不确定性所需的总体信息量的大小。表示随机变量不确定性的度量。
对于离散型随机变量,信息熵公式如下:
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − l o g p ( x ) ] = − ∑ i = 1 n p ( x ) l o g p ( x ) H(p)=H(X)=E_{x\sim p(x)}[-logp(x)]= - \sum_{i=1}^{n}p(x)logp(x) H(p)=H(X)=Ex∼p(x)[−logp(x)]=−∑i=1np(x)logp(x)
对于连续型随机变量,信息熵公式如下:
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − l o g p ( x ) ] = − ∫ p ( x ) l o g p ( x ) d x H(p)=H(X)=E_{x\sim p(x)}[-logp(x)]=-\int p(x)logp(x)dx H(p)=H(X)=Ex∼p(x)[−logp(x)]=−∫p(x)logp(x)dx
KL散度(相对熵): KL散度是一种衡量两个分布(比如两条线、两个概率分布)之间匹配程度的方法。KL散度形式上定义如下:
D K L ( p ∣ ∣ q ) = ∑ i = 1 N [ p ( x i ) l o g p ( x i ) − p ( x i ) l o g q ( x i ) ] = ∑ i = 1 N p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^{N}[p(x_i)logp(x_i) - p(x_i)logq(x_i)]= \sum_{i=1}^{N}p(x_i)log(\frac {p(x_i)}{q(x_i)}) DKL(p∣∣q)=∑i=1N[p(xi)logp(xi)−p(xi)logq(xi)]=∑i=1Np(xi)log(q(xi)p(xi))
其中, q ( x ) q(x) q(x)是近似分布(理论拟合出的该事件的概率分布), p ( x ) p(x) p(x)是我们想用 q ( x ) q(x) q(x)匹配的真实事件的概率分布。直观上来说,这衡量的是给定任意分布偏离真实分布的程度。
如果两个分布完全匹配,则 D K L ( p ∣ ∣ q ) = 0 D_{KL}(p||q)=0 DKL(p∣∣q)=0。否则 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(p∣∣q)的取值应该是0到无穷大(inf)之间。
KL散度越小,真实分布与近似分布之间的匹配就越好。
下面证明一下只有在 p ( x i ) = q ( x i ) p(x_i)=q(x_i) p(xi)=q(xi)时,KL散度才等于0,其他时候均大于0。
要证明: D K L ( p ∣ ∣ q ) = ∑ i = 1 N [ p ( x i ) l o g p ( x i ) − p ( x i ) l o g q ( x i ) ] = ∑ i = 1 N p ( x i ) l o g ( p ( x i ) q ( x i ) ) ⩾ 0 D_{KL}(p||q)=\sum_{i=1}^{N}[p(x_i)logp(x_i) - p(x_i)logq(x_i)]=\sum_{i=1}^{N}p(x_i)log(\frac {p(x_i)}{q(x_i)}) \geqslant 0 DKL(p∣∣q)=∑i=1N[p(xi)logp(xi)−p(xi)logq(xi)]=∑i=1Np(xi)log(q(xi)p(xi))⩾0
即证明: ∑ i = 1 N p ( x i ) l o g ( q ( x i ) p ( x i ) ) ≤ 0 \sum_{i=1}^{N}p(x_i)log(\frac {q(x_i)}{p(x_i)}) \leq 0 ∑i=1Np(xi)log(p(xi)q(xi))≤0
又因为 l n ( x ) ≤ x − 1 ln(x) \leq x-1 ln(x)≤x−1,当且仅当 x = 1 x=1 x=1时取等号
所以: ∑ i = 1 N p ( x i ) l o g ( q ( x i ) p ( x i ) ) ≤ ∑ i = 1 N p ( x i ) ( q ( x i ) p ( x i ) − 1 ) = ∑ i = 1 N [ q ( x i ) − p ( x i ) ] \sum_{i=1}^{N}p(x_i)log(\frac {q(x_i)}{p(x_i)})\leq \sum_{i=1}^{N}p(x_i)(\frac {q(x_i)}{p(x_i)}-1)=\sum_{i=1}^{N}[q(x_i)-p(x_i)] ∑i=1Np(xi)log(p(xi)q(xi))≤∑i=1Np(xi)(p(xi)q(xi)−1)=∑i=1N[q(xi)−p(xi)]
当且仅当 p ( x i ) = q ( x i ) p(x_i)=q(x_i) p(xi)=q(xi)时,等号才成立。
Jense不等式:
如下图所示的一个凸函数,凸函数是定义在一个向量空间的凸子集
C
C
C(区间)上的实值函数
f
f
f,如果在其定义域
C
C
C上任意两点
x
i
,
x
2
,
0
≤
t
≤
1
,
x_i,x_2, 0 \leq t \leq 1,
xi,x2,0≤t≤1,有
t f ( x 1 ) + ( 1 − t ) f ( x 2 ) ≥ f ( t x 1 + ( 1 − t ) x 2 ) tf(x_1)+(1-t)f(x_2) \geq f(tx_1+(1-t)x_2) tf(x1)+(1−t)f(x2)≥f(tx1+(1−t)x2)
也就是说凸函数任意两点的割线位于函数图形的上方,这是Jense不等式的两点形式。
若
f
(
x
)
f(x)
f(x)是区间[a,b]上的凸函数,则对任意的
x
1
,
x
2
,
.
.
.
,
x
n
∈
[
a
,
b
]
x_1, x_2, ..., x_n \in[a,b]
x1,x2,...,xn∈[a,b],有不等式:
∑ i = 1 n f ( x i ) n ≥ f ( ∑ i = 1 n x i n ) \frac{\sum_{i=1}^{n}f(x_i)}{n} \geq f(\frac{\sum_{i=1}^{n}x_i} {n}) n∑i=1nf(xi)≥f(n∑i=1nxi)
当且仅当 x 1 = x 2 = x 3 = . . . . = x n x_1=x_2=x_3=....=x_n x1=x2=x3=....=xn时等号成立。
对于任意点集 x i {x_i} xi,若 λ i ≥ 0 \lambda_i \geq 0 λi≥0,且 ∑ i λ i = 1 \sum_i \lambda_i =1 ∑iλi=1,则凸函数 f ( x ) f(x) f(x)满足:
f ( ∑ i = 1 M λ i x i ) ≤ ∑ i = 1 M λ i f ( x i ) f(\sum_{i=1}^{M}\lambda_i x_i) \leq \sum_{i=1}^M \lambda_i f(x_i) f(∑i=1Mλixi)≤∑i=1Mλif(xi)
在概率论中,如果把 λ i \lambda_i λi看成取值为 x i x_i xi的离散变量 x x x的概率分布,那么上式可以写成:
f ( E [ x ] ) ≤ E [ f ( x ) ] f(E[x]) \leq E[f(x)] f(E[x])≤E[f(x)]
其中 E [ ⋅ ] E[·] E[⋅]表示期望。
对于连续变量,Jensen不等式给出了积分的凸函数值和凸函数的积分值间的关系:
f ( ∫ x p ( x ) d x ) ≤ ∫ f ( x ) p ( x ) d x f(\int xp(x)dx) \leq \int f(x)p(x)dx f(∫xp(x)dx)≤∫f(x)p(x)dx
VAE(Variational AutoEncoder,变分自编码器)
https://www.sohu.com/a/226209674_500659
https://zhuanlan.zhihu.com/p/57574493
https://www.cnblogs.com/weilonghu/p/12567793.html
所谓"鲁棒性",是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性。
对于VAE,首先应该想到AutoEncoder(自编码器)。在AutoEncoder时代,大概是在2014年之前,通过Encoder将数据压缩至一个低维向量表示,这就被当做数据的隐层表示,利用Decoder再将这个低维向量解码得到重构的数据,最小化重构误差就是AutoEncoder要做的事情。但是AutoEncoder被指责只能简单地“记住”数据,生成数据的能力上很差。因此,变分自编码器VAE出现了,这是AE家族里面非常秀的一员了,光耀门楣!
变分推断(Variational Inference)
我们的原始目标是,需要根据已有数据推断需要的分布p;当p不容易表达,不能直接求解时,可以尝试用变分推断的方法, 即,寻找容易表达和求解的分布q,当q和p的差距很小的时候,q就可以作为p的近似分布,成为输出结果了。在这个过程中,我们的关键点转变了,从“求分布”的推断问题,变成了“缩小距离”的优化问题。
变分推断的步骤为:
- 我们拥有两部分输入:数据 x x x,联合分布 p ( z , x ) p(z,x) p(z,x)
- 我们需要推断的是后验概率 p ( z ∣ x ) p(z|x) p(z∣x),但是不能直接被求出
- 构造后验概率 p ( z ∣ x ) p(z|x) p(z∣x)的近似分布q(z;v)(这里的v参数,可以写成 q v ( z ) q_v(z) qv(z))
- 不断缩小q和p直接的距离直至收敛。
在概率图模型中,我们经常假设观测变量为 X X X,隐变量为 Z Z Z,图模型的结构是由 Z Z Z生成 X X X,那么建立联合分布为:
p ( X , Z ) = p ( X ∣ Z ) p ( Z ) p(X,Z)=p(X|Z)p(Z) p(X,Z)=p(X∣Z)p(Z)
为了计算观测变量 X X X的对数似然 l n p ( X ) lnp(X) lnp(X),一般来说需要将隐变量积分掉,即
l n p ( X ) = l n ∑ Z p ( X , Z ) lnp(X)=ln \sum _Z p(X,Z) lnp(X)=ln∑Zp(X,Z)
当隐变量是离散变量时,上述公式需要对所有可能的
Z
Z
Z进行求和,当隐变量维度比较小时,可以计算,但维度比较高时则很难计算;当隐变量为连续变量时,如果假定
Z
Z
Z为简单的高斯分布,并且条件分布
p
(
X
∣
Z
)
p(X|Z)
p(X∣Z)也满足一定条件(比如共轭分布)时,可以计算,但是绝大多数情况下,上述的积分操作是不可计算的。
所以为了优化最大似然,引入了下面的ELBO:
l n p ( X ) = l n ∑ Z p ( X ∣ Z ) = l n ( ∑ Z q ( Z ) p ( X , Z ) q ( Z ) ) ≥ ∑ Z q ( Z ) l n p ( X , Z ) q ( Z ) = ∑ Z q ( Z ) l n ( p ( X ∣ Z ) ) + ∑ Z q ( Z ) l n p ( Z ) q ( Z ) lnp(X)=ln\sum_{Z}p(X|Z)=ln(\sum_{Z}q(Z)\frac{p(X,Z)}{q(Z)}) \geq \sum_{Z}q(Z)ln \frac{p(X,Z)}{q(Z)}=\sum_{Z}q(Z)ln(p(X|Z))+\sum_Zq(Z)ln{\frac{p(Z)}{q(Z)}} lnp(X)=ln∑Zp(X∣Z)=ln(∑Zq(Z)q(Z)p(X,Z))≥∑Zq(Z)lnq(Z)p(X,Z)=∑Zq(Z)ln(p(X∣Z))+∑Zq(Z)lnq(Z)p(Z)
上述公式的不等号之处是根据凹函数的性质(Jense不等式)得到的。最后得到的ELBO下界为:
l n p ( X ) ≥ ∑ Z q ( Z ) l n ( p ( X ∣ Z ) ) + ∑ Z q ( Z ) l n p ( Z ) q ( Z ) lnp(X) \geq \sum_{Z}q(Z)ln(p(X|Z))+\sum_Zq(Z)ln{\frac{p(Z)}{q(Z)}} lnp(X)≥∑Zq(Z)ln(p(X∣Z))+∑Zq(Z)lnq(Z)p(Z)
上式中不等式右边的就是ELBO(Evidence Lower Bound)。最大化对数似然变成了最大化ELBO。ELBO中的 q ( Z ) q(Z) q(Z)是对隐变量 Z Z Z引入的变分分布(Variational Distribution),用来近似真实的隐变量分布 p ( Z ) p(Z) p(Z)。所以ELBO由两项组成,第一项是给定隐变量时的条件分布的似然,第二项是变分分布和真实分布之间的KL距离。
接下来给出另外一种变分推断的方法:
l n p ( X ) = l n ( p ( X , Z ) p ( Z ∣ X ) ) = l n ( p ( X , Z ) q ( Z ∣ X ) q ( Z ∣ X ) p ( Z ∣ X ) ) = E Z ∼ q ( Z ∣ X ) [ l n ( p ( X , Z ) q ( Z ∣ X ) q ( Z ∣ X ) p ( Z ∣ X ) ) ] = E Z ∼ q ( Z ∣ X ) [ l n ( p ( X , Z ) q ( Z ∣ X ) ] + E Z ∼ q ( Z ∣ X ) [ l n ( q ( Z ∣ X ) p ( Z ∣ X ) ) ] = E L B O + K L ( q ∣ ∣ p ) lnp(X)=ln(\frac{p(X,Z)}{p(Z|X)})=ln(\frac{p(X,Z)}{q(Z|X)} \frac{q(Z|X)}{p(Z|X)})=E_{Z\sim q(Z|X)}[ln(\frac{p(X,Z)}{q(Z|X)} \frac{q(Z|X)}{p(Z|X)})]=E_{Z\sim q(Z|X)}[ln(\frac{p(X,Z)}{q(Z|X)}]+E_{Z\sim q(Z|X)}[ln(\frac{q(Z|X)}{p(Z|X)})] =ELBO+KL(q||p) lnp(X)=ln(p(Z∣X)p(X,Z))=ln(q(Z∣X)p(X,Z)p(Z∣X)q(Z∣X))=EZ∼q(Z∣X)[ln(q(Z∣X)p(X,Z)p(Z∣X)q(Z∣X))]=EZ∼q(Z∣X)[ln(q(Z∣X)p(X,Z)]+EZ∼q(Z∣X)[ln(p(Z∣X)q(Z∣X))]=ELBO+KL(q∣∣p)
VAE
在上面我们给出了一种ELBO:
l n p ( X ) = E Z ∼ q ( Z ∣ X ) [ l n ( p ( X , Z ) q ( Z ∣ X ) ] + E Z ∼ q ( Z ∣ X ) [ l n ( q ( Z ∣ X ) p ( Z ∣ X ) ) ] ≥ E Z ∼ q ( Z ∣ X ) [ l n p ( X ∣ Z ) q ( Z ∣ X ) ] = E Z ∼ q ( Z ∣ X ) l n ( p ( X , Z ) + E Z ∼ q ( Z ∣ X ) [ l n p ( Z ) q ( Z ∣ X ) ] lnp(X)=E_{Z\sim q(Z|X)}[ln(\frac{p(X,Z)}{q(Z|X)}]+E_{Z\sim q(Z|X)}[ln(\frac{q(Z|X)}{p(Z|X)})] \geq E_{Z\sim q(Z|X)}[ln \frac{p(X|Z)}{q(Z|X)}] = E_{Z\sim q(Z|X)}ln(p(X,Z) + E_{Z\sim q(Z|X)}[ln \frac{p(Z)}{q(Z|X)}] lnp(X)=EZ∼q(Z∣X)[ln(q(Z∣X)p(X,Z)]+EZ∼q(Z∣X)[ln(p(Z∣X)q(Z∣X))]≥EZ∼q(Z∣X)[lnq(Z∣X)p(X∣Z)]=EZ∼q(Z∣X)ln(p(X,Z)+EZ∼q(Z∣X)[lnq(Z∣X)p(Z)]
在VAE里面,ELBO换了一种表达方式,这里的分布都有了参数下标,比如条件分布 p θ ( x ∣ z ) p_\theta (x|z) pθ(x∣z)和变分分布 q ϕ ( z ∣ x ) q_\phi (z|x) qϕ(z∣x):
l n p ( x ) ≥ E z ∼ q ϕ ( z ∣ x ) l n ( p θ ( x ∣ z ) + E z ∼ q ϕ ( z ∣ x ) [ l n p ( z ) q ϕ ( z ∣ x ) ] lnp(x) \geq E_{z\sim q_\phi (z|x)}ln(p_\theta (x|z) + E_{z\sim q_\phi (z|x)}[ln \frac{p(z)}{q_\phi (z|x)}] lnp(x)≥Ez∼qϕ(z∣x)ln(pθ(x∣z)+Ez∼qϕ(z∣x)[lnqϕ(z∣x)p(z)]
VAE是在文章《Auto-Encoding Variational Bayes》中提出的,文章本来的目的是提出一种叫做Stochastic Gradient Variational Bayes的梯度估计,即SGVB Estimator,顺便提出了一种Variational Bayes Auto Encoding的算法,即VAE的框架。自从这篇论文提出了SGVB Estimator之后,之后的论文对分布使用神经网络来拟合,使用梯度下降来更新参数,逐渐演变出了更多的VAE。《Auto-Encoding Variational Bayes》提出了使用神经网络对变分推断里面的分布进行参数化,为了使用梯度下降优化求解,提出了Reparametrization的技巧,并根据这个技巧提出了一种梯度估计的算法SGVB Estimator,搭建了VAE的框架,也叫AEVB算法。 所以,提到VAE时,可以代指一种网络结构,也可以指AEVB算法。但目前好像大多数都将其当作一种网络结构了。
VAE是为每个样本构造专属的正态分布,然后采样来重构。其的示意图如下所示:
核心思想
本文提出一种利用变分自动编码器(VAE)生成原型图像(Prototypical Images),并利用最近邻算法解决小样本的图标或标志分类问题的算法。整个算法思想很简单,首先作者指出实际中我们拍摄采集到的图片通常都会有背景模糊,形状或光照干扰等因素,用这些图片做小样本分类的话自然效果很差。于是作者提出了原型图像的概念(Prototypical Images与原型网络 Prototypical Network中原型的概念完全不同,请注意区分),就是那种标准的,没有任何形变和模糊的图像,类似于下图这种:
如果用上图这种图像做分类,那效果应该好很多。作者按照这个思路提出了一种基于变分自编码器(VAE)的原型图像生成网络。大体的过程就是将一个图片
x
x
x输入编码器,得到一个隐藏变量
z
z
z,然后经过解码器重构得到
x
^
\hat{x}
x^,但注意本文的方法略有不同,本文不是想得到重构的
x
^
\hat{x}
x^,而是对应的原型图像
t
t
t,这就形成一种图像迁移的效果,输入
x
x
x(真实图片),输出
t
t
t(原型图像)。经过训练之后,网络编码器具备了将图像转化为具有表征能力的特征向量,在测试时只需要将支持集和查询集的图像都转化为对应的特征向量,然后按照最近邻方法进行分类(距离度量采用欧式距离),就能得到对应类别了。训练和测试过程如下图所示:
网络结构
损失函数
对于给定的成对的数据集
X
=
{
(
x
,
t
)
(
i
)
}
i
=
1
N
X = \left \{ (x,t)^{(i)} \right \}_{i=1}^{N}
X={(x,t)(i)}i=1N,其中
x
x
x是真实图像样本,
t
t
t是其对应的原型图像。在作者的实验中,每个类别只有一个原型图像
t
t
t。作者采用和变分自动编码器(VAE)类似的方式,从一个先验概率分布
p
θ
(
z
)
p_\theta (z)
pθ(z)中采样得到隐藏编码
z
(
i
)
z^{(i)}
z(i),然后原型
t
(
i
)
t^{(i)}
t(i)是从条件概率分布
p
θ
(
x
∣
z
)
p_\theta (x|z)
pθ(x∣z)中产生的。由于这个过程是隐藏的,参数
θ
\theta
θ和隐藏编码
z
(
i
)
z^{(i)}
z(i)都是未知的,所以作者使用变分贝叶斯方法进行近似推理。
参数近似是通过边际似然最大化完成的。模型需要优化的目标如下:
其中
D
K
L
[
⋅
]
D_{KL}[·]
DKL[⋅]代表KL散度,
q
ϕ
(
z
∣
x
)
q_\phi (z|x)
qϕ(z∣x)是对真实后验分布(
p
φ
(
z
∣
x
)
p_\varphi (z|x)
pφ(z∣x))的近似。分布
q
ϕ
(
z
∣
x
)
q_\phi (z|x)
qϕ(z∣x)代表编码器,
p
θ
(
t
∣
z
)
p_\theta (t|z)
pθ(t∣z)代表解码器,通过最大化变分下界,我们可以确定编码器和解码器的模型参数
ϕ
\phi
ϕ和
θ
\theta
θ。
为了通过对级梯度下降(SGD)有效的训练参数,作者使用变分自编码器中假设的高斯潜在变量,并且从
q
ϕ
(
z
∣
x
)
q_\phi (z|x)
qϕ(z∣x)中采样得到
{
z
(
s
)
}
s
=
1
S
\left \{ z^{(s)} \right \}_{s=1}^S
{z(s)}s=1S进行采样,所以最终的优化目标为:
在上述公式中使用了变分自编码器的重参数化技巧,其中的
q
ϕ
(
z
∣
x
)
q_\phi (z|x)
qϕ(z∣x)是通过神经网络
g
ϕ
(
⋅
)
g_\phi(·)
gϕ(⋅)重参数化,
z
(
s
)
z^{(s)}
z(s)是通过
z
(
s
)
=
g
ϕ
(
x
(
i
)
,
ε
(
s
)
)
=
μ
(
i
)
+
σ
(
i
)
⊙
ε
(
s
)
z^{(s)}=g_\phi(x^{(i)}, \varepsilon ^{(s)}) = \mu^{(i)}+ \sigma^{(i)} \odot \varepsilon ^{(s)}
z(s)=gϕ(x(i),ε(s))=μ(i)+σ(i)⊙ε(s),其中
ε
∼
N
(
0
,
I
)
\varepsilon \sim N(0,I)
ε∼N(0,I),
⊙
\odot
⊙代表点乘。在上述损失函数中,第一项和第二项分别代表重构误差项和分布正则项。
算法评价
本文利用VAE结构生成真实图像的原型图像,并利用编码器作为特征提取器,通过比较隐藏向量( z z z)之间的欧氏距离寻找最接近的样本,实现分类任务。正如作者所说,这个VAE结构可以看作是一种降噪网络,把图像中的干扰信息排出,保留最直观最重要的原型图像。但本文无论是采用的VAE生成式模型还是利用隐藏空间中的特征向量进行最近邻分类都不是非常新颖的想法,唯一的创新可能就是原型图像这一概念了吧,但这一概念也并不具备普遍性,如果数据集图像质量普遍较高,这一做法就退化为一个简单的最近邻分类了。
参考链接:
原文链接
《Auto-Encoding Variational Bayes》论文链接
相对熵(KL散度)
Jensen不等式初步理解及证明
Variational AutoEncoder系列
论文阅读笔记《Variational Prototyping-Encoder: One-Shot Learning with Prototypical Images》