使用 tfprobability 的简易 PixelCNN

PixelCNN 是一种深度学习架构(或架构包),旨在生成高度逼真的图像。要使用它,无需对 arXiv 论文进行逆向工程或搜索参考实现:TensorFlow Probability 及其 R 包装器 tfprobability 现在包含一个 PixelCNN 分布,可用于以可参数化的方式训练直接定义的神经网络。

来源:RStudio AI博客

我们在本博客上看到了不少无监督学习(或自监督学习,选择更正确但不太流行的术语)的例子。

通常,这些涉及变分自动编码器 (VAE),其吸引力在于它们允许对潜在空间进行建模,该空间包含决定可见特征的底层、独立(最好)因素。可能的缺点是生成的样本质量较差。生成对抗网络 (GAN) 是另一种流行的方法。从概念上讲,由于它们的博弈论框架,它们非常有吸引力。然而,它们可能很难训练。另一方面,PixelCNN 变体——我们将它们全部归入 PixelCNN——通常以其良好的结果而闻名。不过,它们似乎涉及更多的炼金术。在这种情况下,还有什么比一种简单的实验方法更受欢迎呢?通过 TensorFlow Probability (TFP) 及其 R 包装器 tfprobability,我们现在有了这样的方法。

变分自动编码器 (VAE) 潜在空间 PixelCNN tfprobability

这篇文章首先介绍了 PixelCNN,重点介绍了高级概念(细节留给好奇的人在相应的论文中查找)。然后,我们将展示一个使用 tfprobability 来试验 TFP 实现的示例。

tfprobability

PixelCNN 原理

自回归性,或者:我们需要(某种)顺序

PixelCNN 的基本思想是自回归性。每个像素都被建模为依赖于所有先前的像素。正式形式:

\[p(\mathbf{x}) = \prod_{i}p(x_i|x_0, x_1, ..., x_{i-1})\]

\[p(\mathbf{x}) = \prod_{i}p(x_i|x_0, x_1, ..., x_{i-1})\] 顺序 光栅扫描 (Oord、Kalchbrenner 和 Kavukcuoglu 2016) Oord、Kalchbrenner 和 Kavukcuoglu 2016

\[p(x_i|\mathbf{x}} = p(x_{i,R}|\mathbf{x}}\ p(x_{i,G}|\mathbf{x}}, x_{i,R})\ p(x_{i,B}|\mathbf{x}}, x_{i,R}, x_{i,G})\]

\[p(x_i|\mathbf{x}} = p(x_{i,R}|\mathbf{x}}\ p(x_{i,G}|\mathbf{x}}, x_{i,R})\ p(x_{i,B}|\mathbf{x}}, x_{i,G})\] (Salimans 等人。 2017) Salimans 等人。 2017 见过 <-