TGAN and GenPU

bilibiliRobust Low-tubal-rank Tensor Recovery from Binary Measurements

在看这个视频时,顺带又回顾了一下张量秩的概念,目前并没有给出统一的很明确的定义,张量秩的定义往往跟分解算法有关

在CP分解中,张量的秩定义如下

Rankcp(X)=min{RX=r=1Rx1rx2rxMr}\operatorname{Rank}_{cp}(\mathcal{X})=\min \left\{R \mid \mathcal{X}=\sum_{r=1}^{R} x_{1}^{r} \otimes x_{2}^{r} \otimes \cdots \otimes x_{M}^{r}\right\}

也就是指以秩一张量和的形式来表示X\mathcal{X}时,所需秩一张量的最少的个数

在Tucker分解中,张量X\mathcal{X}可以称作RankR1,R2,,RMRank-{R_1, R_2,\cdots, R_M}张量,同时张量X\mathcal{X}的Tucker秩定义为

RankTucker =max(Rn),n=1,2,,M\operatorname{Rank}_{\text {Tucker }}=\max \left(R_{n}\right), n=1,2, \ldots, M

而在王老师的讲解中,Tucker分解的秩是一个由因子矩阵秩组成的向量。

该论文主要是提出了两类方法用于低秩张量恢复(low-rank tensor recovery),包括低秩张量的符号恢复张量完整恢复,提出的方法如下

方法1:Hard Singular Tube Thresholding (HSTT)

方法2:Tensor nuclear norm minimization model (TNNM)

后面还采用自适应算法对上述的baseline进行优化,实现指数级别的计算加速

作者用严格的理论证明了算法的误差上界可收敛性,在理论这一块的各种定义和理论比较完善。尽管我对这些部分听的一知半解,但对整篇文章的思路还是比较清楚的。作者还通过各种各样的实验来对HSTT和TNNM模型进行验证,一共做了大约六个实验,还有几个应用。真的是相当全面了。实验的过程依次如下

  1. 验证模型的效果模型中参数的关系
  2. 验证模型的可收敛性
  3. 不同输入张量下模型的效果
  4. 验证模型的执行时间、模型的恢复误差
  5. 将模型应用到实际图像数据集Cifar100,用PSNR和SSIM衡量图片恢复前后的效果
  6. 用图片更直观展示5的效果
  7. 将模型应用到人脸数据集yaleB,用PSNR和SSIM衡量图片恢复前后的效果
  8. 将模型应用到人脸数据集多光谱图片,对比参数λ\lambda和恢复效果PSNR/SSIM的关系

实验还可以从合成数据实际数据对比体现模型效果,这些都是常见的策略了。

PaperGenerative Adversarial Positive-Unlabeled Learning

这篇文章主要提出了基于传统GAN网络改进的GenPU网络模型,用于解决Positive-unlabeled(PU) 的分类,是一种弱监督分类模型,只需要少量正例标签,而不需要完成的positive和negative的标签。第一次接触PN和PU问题,对于PN和PU的问题图示如下

image-20210422161459731

论文中还介绍了GAN网络结构、GenPU的损失函数,GenPU的结构如下图。

QQ截图20210422160717

有三个判别器分别是{Dp,Du,Dn}\left\{D_{p}, D_{u}, D_{n}\right\},分别表示正例判别器、没标记的样本判别器、负例判别器,两个生成器{Gp,Gn}\left\{G_{p}, G_{n}\right\},分别表示正例样本的概率分布/生成器、负例样本的概率分布/生成器。同时作者在论文中设计了GenPU模型的损失函数,并通过引入Jensen-Shannon divergence (JSD)来进行化简,最终得到一个比较简单的损失函数解的形式。

Jensen-Shannon divergenceJSD

JSD算法是Kullback-Leibler散度D(PQ)D(P \| Q)的对称且平滑的版本,它定义为

JSD(PQ)=12D(PM)+12D(QM)\operatorname{JSD}(P \| Q)=\frac{1}{2} D(P \| M)+\frac{1}{2} D(Q \| M)

其中M=12(P+Q)M = \frac{1}{2}(P+Q),D就是KL散度的表达,我们已经接触很多次了,它和JSD都是用来衡量两个概率分布的差异性的重要函数,在设计损失函数时经常用到,不过KL散度的应用范围更广,它还可以用来表示香农熵、贝叶斯更新、交叉熵、互信息等等,详细的公式及推导见wikipedia,这里只给出KL散度公式用于回顾

DKL(PQ)=xXP(x)log(P(x)Q(x))D_{\mathrm{KL}}(P \| Q)=\sum_{x \in \mathcal{X}} P(x) \log \left(\frac{P(x)}{Q(x)}\right)

当然如果将这些式子代入GAN网络进行验证推导时,可能会不了解GAN网络中的期望E和KL散度中的\sum如何划等号,这是因为由于GAN中的损失函数minGmaxDV(G,D)\min _{G} \max _{D} \mathcal{V}(G, D)是连续的所以可以写成积分的形式来表示期望,也就是这里的求和\sum

论文中训练测试的过程对我来说也是比较新颖,它是事先准备好正样本数据和负样本数据各5000张图片,然后取出500张带着标签的图片作为GenPU模型的输入,剩下的9500张为没标记的图片。将每次经过GenPU生成的样本分布和原始样本分布画到一张图中,就能够对比出逐渐构建正负例样本生成器{Gp,Gn}\left\{G_{p}, G_{n}\right\}的过程,如下图所示

image-20210422163640457

后面还采用了MNIST和Celeb-A等实际生活中的数据集进一步验证GenPU模型的效果,并与已经提出的模型unbiased PU (UPU) [Du Plessis et al., 2015], non-negative PU (NNPU) [Kiryoet al., 2017]进行对比,得到了较高的准确率,并且通过计算和JSD的引入,GenPU大大的解决了输出子模式的丢失问题,但GenPU同时也继承了GAN的弱点,例如模式崩溃,模式振荡。如何将张量融入到GAN里,是一个值得探讨的问题。

Paper】TENSORIZING GENERATIVE ADVERSARIAL NETS

这篇文章提出的TGAN模型将tensor结合到GAN网络中,设计出了TensorLayer用于构造GAN网络。主要用来解决经典GAN网络中的参数过多问题,并且这样处理能够有效的表示和处理数据的高维信息。尽管之前也看过TTN搭建的TensortLayer,不过显然那个更复杂,而这个TGAN中只是用了多个矩阵来表示权重,而对张量处理的过程就是将张量的不同模态分别与矩阵做模乘运算,用图形化表示就是下图

image-20210423103532027

B就是一个偏差张量,作者提到这样的传播过程其实就是相当于对输入张量X\mathcal{X}进行了Tucker分解,而分解后的TT-cores与偏差张量B相加就是下一层的输入,以此类推。输入张量传播的过程跟经典的一致,都是采用

y=σ(Wx+b)\mathbf{y}=\sigma(\mathbf{W} \mathbf{x}+\mathbf{b})

的思想,只不过将W和b换成了张量而已,并且张量unfold操作使得输出对权重的导数形式也非常容易表示,就完全是链式求导的思想,文中给出了一个两层张量网络FT-NETS的例子,并给出了导数求导的过程,可以进一步去了解。

另外就是FT-Net和全连接层参数的对比了,对于三层的全连接网络I=i=1NIi,J=i=1NJiI=\prod_{i=1}^{N} I_{i}, J=\prod_{i=1}^{N} J_{i}并且K=i=1NKiK=\prod_{i=1}^{N} K_{i},模型的参数为J(I+K)+J+KJ(I+K)+J+K。这个参数也不难理解,第一部分是全连接网络中间两个权重矩阵的参数和(矩阵IJIJ和矩阵JKJK),后面的J+KJ+K则是偏差(bias)张量b中的参数。而在FT-Net网络中,由于我们将整个权重矩阵划分成了多个模态下的因子矩阵,因此模型的总参数为

i=1N(IiJi+JiKi)+J+K\sum_{i=1}^{N}\left(I_{i} J_{i}+J_{i} K_{i}\right)+J+K

与全连接层不同的是,这里权重矩阵是NN个模态下的因子矩阵(也可以理解为全连接层权重矩阵分解为NN个矩阵),因此只需要将,每一层(这里是2个tensorlayer)每一行(对于NN个模态中的一个)的权重参数相加即可。很显然矩阵参数从指数累乘的大矩阵变成了小矩阵求和的形式,大大减少了参数了,这是论文中一直在强调的地方。最后论文用合成的数据和MNIST数据集分别进行了模型实验,合成数据的效果如下所示。

image-20210423105551400

其中GAN(1)GAN^{(1)}是和FT-Nets层数对应的经典网络,有很多的参数,不适宜处理过大的图片或者向量。GAN(2)GAN^{(2)}是和TGAN网络参数同等级别的GAN,虽然参数少了,但是模型的表达能力也大打折扣,在MNIST数据集上也是类似的效果,不再赘述,看下图

image-20210423110025953

[实验部分] Applying TGAN on chest X-ray images

简单看了一篇综述Generative adversarial network in medical imaging: A review,文中给出了以下部分GAN处理,包含有CT降噪、眼球图片、胸肺图片等,同时文中也列举了近些年大量基于GAN变体探究的一些工作,例如DCGAN、InfoGAN、Wasserstein GAN

image-20210424212715607

我在论文TENSORIZING GENERATIVE ADVERSARIAL NETS基础上对代码中数据读取部分做了部分修改,用来读取已有的chest X-ray图片大约两千张(不含标签),并进一步训练GAN网络(12625个参数),经过大约3600次训练后,模型生成的胸部X射线图片效果如下

image-20210424201948512

从图中可以看到,生成的图片基本上都有人的骨架轮廓,并基本包含心脏大血管的大小形态、位置和轮廓,其大小为32*32。将其与放缩到同等大小的胸部X射线图片进行对比,如下图所示(上方为生成的胸部X-ray图片,下方为真实的胸部X-ray图片)

image-20210424204046534

这是训练了约xxx次的结果,从图中可以看出TGAN模型生成的图片包含了大量的噪声,这是因为TGAN最初在生成图片时采用的标准正态分布zU(1,1)z \sim \mathcal{U}(-1,1)先验分布,具有一定的随机性,不可能一下生成那么平滑的图片。同时为了提高GAN的表达能力,我从kaggle上下载了完整的X-ray数据集,包含了COVID、Lung_Opacity、Normaly以及Viral Pneumonia这四个标签的共2W张图片,对其分批训练TGAN(不含标签)。

明天要继续设计创新基于负样本的TGAN,也就是加上部分负标签的TGAN网络。不过由于TGAN网络是基于Tensorlayer这样一个概念,因此对于Gen-PU中的三个判别器{Dp,Du,Dn}\left\{D_{p}, D_{u}, D_{n}\right\}网络和两个生成器网络{Gp,Gn}\left\{G_{p}, G_{n}\right\}要分别进行模型结构的修改,将Tensorlayer的结构加进去。至于结果可以采用类似Gen-PU中那样,比较一下生成的图片和实际图片的差别,以及模型的准确率。

参考资料

达观数据:数据不够?GAN来凑!

Generative adversarial network in medical imaging: A review

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 YuleZhang's Blog
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信