SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

论文链接:Self-Attention Generative Adversarial Networks

这篇论文是将自注意力机制引入生成对抗网络用于图像生成任务。

摘要:

这篇论文,作者提出了自注意力生成对抗网络(SAGAN)来建模像素间的远距离关系,用于图像生成任务。传统的生成对抗网络(GAN)生成高分辨率图像的细节仅仅利用了低分辨率特征图的局部空间信息。在SAGAN,会利用特征图上所有的位置信息,而不仅仅是局部位置信息。此外,判别器还可以检查图像中较远部分的细节特征是否一致。最近有研究表明生成器的状态会影响GAN的性能,根据这个问题,作者对生成器使用谱范数归一化能有效提高训练的稳定性。作者提出的SAGAN在ImageNet数据集上实现了最好的结果,将最高的Inception分数从36.8提高到52.52,并且将Fréchet Inception距离从27.62降低到18.65。引入注意力的卷积层可视化显示,生成器利用了与目标形状对应的邻域,而不是固定形状的局部区域。

思路:

图像合成是计算机视觉中的一个重要问题。基于深度卷积神经网络的生成对抗网络在这方面已经取得了显著的进步。然而,通过仔细检查这些模型生成的样本,我们可以发现,卷积神经网络在对多类别数据集上进行训练时,对某些图像类别的建模要比其他类别困难得多(比如ImageNet),比如,在ImageNet数据集上训练的GAN模型擅长合成有很少结构约束的目标,比如海洋,天空和风景等类别,这些类别纹理特征比几何特征更明显。但是不能很好地捕捉某些目标固有的几何或结构模式,比如狗,通常能生成逼真的皮毛纹理但是不能生成清晰的狗爪。一个可能的解释是这些模型主要依赖卷积去建模图像不同区域的依赖关系。由于卷积操作只有很小的感受野(因为卷积核大部分是SAGAN(Self-Attention Generative Adversarial Networks)论文笔记),远距离的依赖关系需要经过几层卷积操作才能获取到(因为有池化层存在,每次池化下采样,感受野就会扩大,多个池化之后,感受野就能达到整幅图的大小,但是这仅仅是理论上的,实际的感受野比这小的多)。使得模型无法获取远距离依赖关系的愿意有多种:模型太小,学习能力不足,无法获取远距离依赖关系;因为需要多个层的处理,才能获取更大感受野从而获取远距离依赖关系,但是优化算法很难优化这些参数(找不到最优解,因为传到每层的梯度都不一样,后面作者提出的SAGAN,是要在一层直接获取远距离依赖关系,而不是通过多层来获取);通过多层获取到的远距离依赖关系没有统计分布的代表性,很难泛化到从未见过的输入数据中。增加卷积核的大小虽然能提高网络的特征提取能力(参数多了,感受野也变大了)但是会增加计算负担。而自注意力机制,可以在不增加计算负担的情况下,获取像素间的远距离依赖关系。自注意力模块会通过其它所有像素位置信息的加权和来计算每个位置的响应值,计算这些权重向量仅仅需要很小的计算代价。作者将自注意力机制引入GAN用于图像生成任务,可以弥补传统GAN不能很好建模像素远距离依赖关系的问题,这样生成的图像细节更加真实清晰,判别器也可以利用远距离的细节来约束当前合成图像的细节,使得结果更真实。除此之外,作者还将谱归一化应用到了生成器网络,之前的研究仅仅是添加在判别网络,也就是说,作者在生成器网络和判别器网络中都添加了谱归一化。

自注意力模块:

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

 上图是作者提出的自注意力模块,可以看出,来自上一层的特征图x通过三个不同的SAGAN(Self-Attention Generative Adversarial Networks)论文笔记卷积被转换为三个不同的特征空间f(x),g(x),h(x)。其实这一步主要是为了降低计算量,一般f(x),g(x)输出的特征通道数是输入特征图通道数的1/8,然后用f(x)生成的特征图重新排列成(SAGAN(Self-Attention Generative Adversarial Networks)论文笔记)转置后和g(x)生成的特征图(也重新排列成SAGAN(Self-Attention Generative Adversarial Networks)论文笔记)相乘得到大小为SAGAN(Self-Attention Generative Adversarial Networks)论文笔记的二矩阵SAGAN(Self-Attention Generative Adversarial Networks)论文笔记,再经过softmax对该矩阵最后一个维度将数值归一化到[0,1],没有这一步可能会导致梯度爆炸(我试过,,),因为数值太大了。然后和h(x)生成的特征图(也重新排列成SAGAN(Self-Attention Generative Adversarial Networks)论文笔记)相乘得到大小为SAGAN(Self-Attention Generative Adversarial Networks)论文笔记的矩阵,然后重排列成SAGAN(Self-Attention Generative Adversarial Networks)论文笔记,作为注意力特征图,然后乘以一个系数SAGAN(Self-Attention Generative Adversarial Networks)论文笔记,和x逐元素相加即可,其中SAGAN(Self-Attention Generative Adversarial Networks)论文笔记初始为0,作者说先让网络学习局部信息,再慢慢学习远距离信息,即由易到难。以下是计算公式,基本就是上面所描述的:

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

损失函数:

 

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

 网络是交替训练的方式进行,损失函数和其他用于图像生成GAN网络的一样。

谱范数正则化

最开始谱范数正则化是用于判别器网络。通过限制每一层的谱范数来约束Lipschitz常数,与其他正则化技术相比,谱范数正则化不需要额外的超参数(将所有权层的谱范数设置为1在实践中表现良好)。此外,计算成本也相对较小。作者发现,谱范数正则化也可以用于生成网络中,可以防止生成网络参数值过大,出现异常梯度,导致训练不稳定。而且在判别器和生成器网络都使用谱范数正则化,在训练过程中,判别器需要更少的更新次数(消除了数值震荡,收敛更快),提高了训练效率。科普一下什么是谱范数,谱范数类似于矩阵的特征值,但是特征值只有方阵才有。矩阵可以表示成一个高维空间,空间的维数等于矩阵的秩,高维空间可以划分成更小的子空间组成,举个不是很严谨的例子,高维空间就是由很多子空间的加权和,而特征值,奇异值就是对应的权值。谱范数是最大的那个奇异值。也就是说,每层的输出,都会将权值除以该特征图的谱范数。求解特征图谱范数是用近似值代替的,迭代一次效果就可以。

学习率设置:

通常使用了正则化的判别网络会降低GAN网络训练速度,在训练期间,使用正则化的判别器GAN通常每更新一次生成器网络,就要更新多次判别器网络(让判别器多学习几次)。作者对判别器和生成器使用不同的学习率,判别器学习率调大一些,需要更新的次数就可以减少。这样就可以缩短训练时间。

实验结果:

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记

SAGAN(Self-Attention Generative Adversarial Networks)论文笔记