Density Estimation Using Real NVP

/ by GuoWY / 论文来源: https://arxiv.org/pdf/1605.08803.pdf

总 结

  • Real NVP的出现让人们看到了一些期待的“数学技巧”

      PaperWeekly真的是个好地方,热点论文的解读上面基本都能找到,先推荐一篇干货:

      【好文推荐】RealNVP与Glow:流模型的传承与升华

      NICE作为一个全新的思路,提出了一个基于求解可逆的encoder,去寻找生成模型decoder的方案。RealNVP就是在这一基础上做出了拓展与优化,其具体实现细节在论文和上述解读中都有比较详尽的说明,我就不再复述了。下面重点说一说我的感悟和思考。

      第一点,用仿射耦合层代替加性耦合层。其实单看仿射耦合与加性耦合,我不觉得谁好谁坏,因为前者实质上是加性耦合与乘性耦合的结合,它的耦合跳跃性是非常大的,而后者仅保留了加性耦合,显得中规中矩一些。一个是激进派,一个是保守派,谁更适合encoder的求解难分优劣。但是,Real NVP这篇论文的巧妙之处,就是在于它采用了一个多尺度框架,去融合了仿射耦合与加性耦合的优点与差异,我们看下面这张图:

      

      为何说多尺度框架是RealNVP的巧妙之处?因为一方面它兼顾了仿射耦合的灵活性,同时每次保留一半的耦合结果,会让仿射更加稳健可靠。另一方面也正如解读中所认为的,大大减少计算量,提升效率——毕竟每次只用计算一半的仿射变化。但是一个明显的疑惑会产生:这种多尺度方式产生的结果,必然不是一个统一的正态分布,因为仿射过程是有断层的,每一层的仿射方式都不一样,那最后的分布结果就很难成为一个统一的正态分布了。事实上,这个困惑本身就不是问题,因为没有规定说encoder的结果一定要是一个正态分布,产生一个组合式的条件分布也能够作为一个encoder的结果,只是差异在于,对于decoder(生成模型)而言,正态分布是一个最理想的情况。不过既然多尺度架构的encoder更高效高质,产生的结果不是正态分布也无大碍。

      第二点,引入卷积层。当时在看NICE的时候,我就觉得耦合层,不论是加性耦合、乘性耦合还是仿射耦合,变换的能力还是弱了一些,传统的数学方法怎么能比得过卷积网络呢?因此,引入卷积网络就显得很有必要。但是,引入卷积层有一个条件,就是得维护图像的局部相关性,直观上说就是图像像素的排列顺序得是正确的,像素点间的相关关系才能被正确提取出来。但是,RealNVP的耦合操作中有一个很重要的步骤,就是随机打乱(为了让信息混合更加充分)。这意味着卷积操作不能在图像空间轴上进行,否则一旦进入耦合操作图像的局部相关性就会被破坏。所以,只能在通道轴上进行卷积操作。不过,一张图片的通道轴一般就是3或4,对于卷积层而言太小了点,于是就需要对通道轴进行扩张。下面展示了一张精妙且富有创意的设计图:(详细解释参见解读)

      

      上面这张图就是对通道扩张的方法了,把h×w×c的图像变换成了h/2×w/2×4c,这样通道数就变为了原来的4倍并且尽量不破坏图像的局部相关性。其实RealNVP还有许多其他的挺有意思的创新,比如用棋盘mask代替传统的对半分(虽然后来被证明没啥用),在s和t中使用ResNet和BN等。

      最后来做一个总结。当时读完NICE之后,有一些感慨,就是人们还缺乏一些数学技巧,去真正的拟合分布。但读完这篇paper之后,发觉当时的理解还是死板了点。事实上人们不需要把一个原有的数据拟合成一个特定的模子(这个模子通常称作分布),生成模型的关键在于拟合和反拟合的过程,而至于其间产生的这个模子,它只是一个中间体,根本不重要。RealNVP就是提升了拟合的过程,而淡化了拟合的结果。总而言之,RealNVP在数学技巧上对NICE作出了提升,并且为后来GLOW的出现奠定和提供了一些理论依据与技术支持。

      

评 论