1 简介

文章来源:2018-CVPR

Tips:

  • Normal Zero-Shot:测试集只有目标域数据(训练集与测试集不相交)。
  • Generalize Zero-Shot:测试集既有源域数据又有目标域数据(训练集与测试集相交)。

文章主旨:

  • 在CVAE模型基础上加入一个针对生成样本的回归器,其将生成的样本映射到其对应的类属性上去。当模型优化完毕后,把不可见类的样本并纳入最终分类器的训练中,以平衡在GZSL中对可见类和不可见类的预测偏差。

2 详情

  1. 模型分析:
    • 假设隐变量与类属性是分离的(隐变量$z_n$表示$x_n$的非结构化部分,类属性向量$a_{y_n}$表示类特定的判别信息),也就是说$x_n$受到这两者的共同影响;并且在类属性向量的指导下,有助于生成本质上具有更好区分度的样本。
    • 包含一个多元回归器,其利用解码器的输出$\hat{x}_n$作为输入,映射到类属性向量$a_{y_n}$。它有两点重要作用:
      • 可以对生成器产生反馈,使其生成更好可区分性的样本。
      • 可以通过计算类属性向量上的概率分布$p(a | x)$来使用无标签的样本进行训练(即进行半监督学习)。
    • 确保生成器的输出$\hat{x}$与实际输入$x$相似,比如可以用$p(z | \hat{x})$来近似$p(z | x)$。
  2. 最终分类器:
    • 当生成模型训练好之后,就可以生成带标签的各类样本。首先,需要按照先验分布$p(z)$(一般对于二值型数据采用伯努利分布,对于连续型数据采用高斯分布)来随机生成非结构化部分即隐变量$z$,并指定需生成的类别$c$(通过类属性向量$a_c$)。然后就可以通过生成器来生成样本$x$。
    • 当每个类别都生成了固定数量的样本之后,就可以利用它们来训练分类器(比如,SVM或softmax分类器)。由于这个阶段使用了来自可见类和不可见类的带标签样本,所以结果具有鲁棒性,可以减少对可见类的偏见。需要注意的是:训练分类器时,可以只使用来自可见类的原始标签样本,也可以用模型生成的可见类的附加样本进行扩展。
  3. 多元回归器:
    • 对于可见类的样本$\{x_n,a_{y_n}\}_{n=1}^{N_s}$,定义监督损失:
    • 对于由生成器生成的样本$\hat{x}$,定义非监督损失:
    • 由(1)(2)式,得到损失函数:
    • Tips:使用回归器通过反向传播来改进生成器。优化$\theta_R$时需固定生成器的分布(即固定$\theta_G$)。
  4. 编码器和条件生成器:
    • 对于编码器$p_E(z|x)$和条件生成器$p_G(x|z,a)$,VAE损失函数为: 其中第一项表示在希尔伯特再生空间中生成器的重构误差;第二项表示后验分布(编码器)需要与先验分布一致。
  5. 设编码器$p_E(z|x)$、生成器$p_G(x|z,a)$和回归器$p_R(a|x)$都服从高斯分布。
  6. 回归器驱动的学习:
    • 确保$\mathbf{\hat{x}}$映射到$\mathbf{a}$,即保证回归的正确性(生成器要报警了!回归结果不好,回归器不背锅居然怪我?其实这是个$\theta_R$和$\theta_G$交替优化的过程,你一拳我一拳让模型变得更加漂亮~):
    • 确保$z$和$a$结合可以通过生成器得到对应样本(作为正则化项):
    • $(5)(6)$式共同作用让$\hat{x}\backsim p_G(\mathbf{\hat{x}}|\mathbf{z,a})$。但还有一个最重要的点是确保$z$和$a$的独立性。为此,使用编码器来确保样本抽样分布和从生成的样本中得到的抽样分布遵循相同的分布:
    • 由$(4)(5)(6)(7)$式,得到损失函数:
  7. 综上,通过$(3)(8)$式交替优化$\theta_R$和$\theta_G$,得到最终的生成模型后,利用其生成的样本来训练最终的分类器。

3 思考

  1. 笔者之前就认为VAE框架本身的局限之处在于隐变量的先验分布,为了简单方便计算一般采用伯努利分布或标准正太分布。然而这无疑限制了模型的表达能力。在本文章中通过分离隐变量$z$和类属性向量$a$,并引入一个将生成的样本$\hat{x}$映射到类属性向量$a$的多元回归器。既利用了VAE的生成能力,又增加了一个学习诱导,这样不失为一种好办法。

  2. 那么我们能不能从本质上改进VAE呢?VAE框架的根源其实说到底就是KL散度。KL散度可以度量两个概率分布的差异,但是我们甚至不能称其为距离,因为它不满足对称性。然而它的优势在于可以写成期望的形式,也就是可直接进行采样计算。$\mathrm{KL}(p(x)||q(x))$有一个比较明显的问题,就是当$q(x)$在某个区域等于0,而$p(x)$在该区域不等于0,那么KL散度就出现无穷大。这是KL散度的固有问题,我们只能想办法规避它,比如隐变量的先验分布用高斯分布而不是均匀分布。Idea is cheap,留待实践。

  3. VAE理论框架:

    数据样本$\{x_1,\dots,x_n\}$,其整体用$x$来描述,我们希望借助隐变量$z$描述$x$的分布$\tilde{p}(x)$:

    其中$q(z)$是先验分布(标准正态分布),目的是希望$q(x)$能逼近$\tilde{p}(x)$。这样(理论上)我们既描述了$p~(x)$,又得到了生成模型$q(x|z)$,一举两得。

    接下来就是利用KL散度进行近似。很多教程推导都是聚焦于后验分布$p(z|x)$。但事实上,直接来对$p(x,z)$进行近似是最为干脆的。具体来说,定义$p(x,z) = \tilde{p}(x)p(z|x)$,设想用一个联合概率分布$q(x,z)$来逼近$p(x,z)$,那么用KL散度来看它们的距离:

    KL散度是我们的终极目标,因为我们希望两个分布越接近越好,所以KL散度越小越好。于是有:

    由$\ln \frac{\tilde{p}(x)p(z|x)}{q(x,z)}=\ln \tilde{p}(x) + \ln \frac{p(z|x)}{q(x,z)}$,我们进一步对$(11)$进行简化:

    其中的$\tilde{p}(x)$是根据样本$x_1,x_2,\dots,x_n$确定的关于x的先验分布,尽管我们不一定能准确写出它的形式,但它是确定的、存在的,因此这一项只是一个常数,所以可以写出:

    最后为了得到生成模型,所以我们把$q(x,z)$写成$q(x|z)q(z)$,于是就有:

    简化后就是:

    中括号内的即为VAE的损失函数。

参考:
变分自编码器(二):从贝叶斯观点出发