“驯估学”(中)

对似然函数感兴趣的读者,请参阅“驯估学”(上)

建模图像,分布若何?

很多方法可以参数化图像。例如,3D场景投影(渲染)为2D可以表示图像。或者,将图像参数化为向量化的草图(如SVG图形)或拉普拉斯金字塔,甚至是机械臂的电机扭矩所途径的轨迹。简单起见,研究人员通常将图像的似然函数,建立在RGB像素上的联合分布上。RGB是一种通用数字格式,已被证明能够有效地捕获可见电磁波谱。

每个RGB像素由uint8格式的无符号整数编码,有256个可能的值。因此,一幅具有3072个像素的图像,辅之以256个可能值,组合成256^{3072}个可能的存在状态。由于这个数量是有限的,我们【在理论上】就可以使用一个256^{3072}的骰子来表示一幅图像。然而这个数字太大了,无法在内存中存储。哪怕只有3个uint8编码的像素,联合建模又256^{3}= 16777216可能的类别,(对于即使是现代计算机来说也)是极为繁重的任务了。为了使计算易处理,我们必须将整个图像的可能性“分解”为条件独立的像素分布的组合。一种简单的因子分解方法如下,使每个像素的概率彼此独立:
p(x_1, ..., x_N) = p(x_1)p(x_2)...p(x_N)
这也称为平均场解码器(请参阅此注释,其中名称来自“均值 - 场”)。每个像素都具有易处理的密度函数或质量函数。

另一种选择是令像素似然具有自回归性,其中每个条件分布具有易处理的密度函数或质量函数。
p(x_1, ..., x_N) = p(x_1)p(x_2|x_1)...p(x_N|x_1,...,x_{N-1})
我们需要考虑如何为上式中每个条件分布建模。以下是一些常见的做法,以及使用过这些做法的文章:

像素值作为伯努利分布的输出概率

【注:“输出概率”或“发射概率”,在随机过程中,与“转移概率”相对。“输出概率”是当下时刻每个状态的可能性,“转移概率”是对于某状态、其转移到其他状态的可能性。在本文中,输出概率指伯努利分布的参数,即一次伯努利实验正面朝上的可能性。】

在调试可能性模型时,先在MNIST、FashionMNIST、NotMNIST数据集上实验是不错的选择【, 因为】:

  • 这些数据集可以完全存储在计算机RAM中;
  • 它们不需要大量的网络架构调整(你可以只专注于算法方面);
  • 在这些数据集上训练较小的生成模型,只需要普通的硬件设施,例如缺少GPU的笔记本电脑。

选择伯努利随机变量建模像素的条件似然p(x_i)是很常见的做法。 对于像素值只可能为0或1(正面还是反面)的二值化数据,伯努利分布就够用了。

MNIST数据集中某二值化图像。二值化数字虽然能被辨认,但不适用于自然条件下的图像

但是,MNIST和几个类似的数据库,往往被编码为[0,1]范围内的浮点值。256个整数被归一化为位于[0,1]之间的小数。这就产生了一个数字表示问题,因为伯努利分布不能在0到1之间采样!

对于在非二值化MNIST上训练的论文,我们须将编码值解释为相应伯努利变量的输出概率。如果我们看到像素值为0.9,则实际上表示该像素为1的伯努利似然参数是0.9,而不是样本自己的采样值是0.9。 优化目标是最小化预测概率分布的输出概率(由一个标量参数控制)与数据中固有的输出概率之间的交叉熵。 两个伯努利的交叉熵用输出概率可写成:
H(p, p_\theta) = -\left[(1-p(1)) log (1-p_\theta(1)) + p(1) log p_\theta(1)\right]
根据本文前半部分的结论,最小化这种交叉熵会等价于最大化似然!这些玩具图像数据集的平均对数似然(相对熵)通常以nat为单位报告在论文中。

DRAW论文(Gregor等人2015)将这一想法扩展到每通道颜色的建模。 然而,将彩色像素数据解释为输出概率存在严重的缺点。 【不加任何修正地使用伯努利分布的话,】当我们从生成模型中进行采样时,我们会得到杂乱、布满斑点的图像,而不是看起来像自然的连贯图像。 下面这段Python代码,可以重现这个问题:

import tensorflow_datasets as tfds
import numpy as np
import matplotlib.pyplot as plt
builder = tfds.builder("cifar10")
builder.download_and_prepare()
datasets = builder.as_dataset()
np_datasets = tfds.as_numpy(datasets)
img = next(np_datasets['train'])['image']
sample = np.random.binomial(1,p=img.astype(np.float32)/256)
fig, arr = plt.subplots(1, 2)
arr[0].imshow(img)
arr[1].imshow((sample*255).astype(np.uint8))
左边为真实图像,右边为伯努利采样得到的图像

将像素值解释为“输出概率”会产生不合实际的样本。这样做虽然对于手写数字和小数据库适用,但是不适用于更大规模的自然图像。使用伯努利解码器的论文通常会显示输出概率(例如在重建或插补任务中)而不是实际样本。

像素值作为类别分布

较大的彩色图像数据集(SVHN,CIFAR10,CelebA,ImageNet)是以8位RGB格式编码的(每个通道是一个uint8整数,其值的范围为0到255,包括0和255)。

我们可以尝试在图像中实际uint8像素值上对分布进行建模,而不是将它们的像素值解释为伯努利输出概率。 最简单的选择之一是256类的类别分布【离散的随机变量,在有限多(K个)可能的类别中,依照各个类别具有的概率,落在其中某个类别上,所形成的分布】。

从分类分布中采样允许生成模型对图像进行采样而不是对伯努利输出概率进行采样。

对于彩色图像,通常报告各像素以2为底的对数(比特)为单位的交叉熵,而不是以e为底的对数。如果测试集的图像均为3072像素,平均似然的交叉熵(单位nats)为,“每像素比特数”为。

这个度量受到我们前面讨论的启发,可类比于“平均似然压缩比”:对于通常使用8位编码的像素,我们可以使用生成式模型,设计一种无损编码方案(编码的平均长度恰好等于熵),将整个数据集压缩到平均像素位长为3【=log_2{8}】。

在撰写本文时,Cifar10数据集上训练的稀疏变换器(Sparse Transformers)的最佳生成式模型,测试集上达到了每像素2.80比特的似然值。作为比较方案,PNG和WebP(广泛使用的无损图像压缩算法)分别在Cifar10图像上达到约5.87和4.61比特的水平(如果不计算像标题和CRC校验和那样的额外字节,PNG格式可低至5.72比特/像素【bpp, bits per pixel】)。

这个结果令我们欢欣鼓舞,这预示着利用机器学习我们可以设计出比现有压缩方案更好的、对内容有所感知、编码又最短的方案。高效的无损压缩可用于改进哈希算法,使下载速度更快、改善缩放响应。最重要的是,所有这些技术,今天都触手可得。

像素值作为“随机实数化”的连续密度分布

如果我们希望通过优化连续密度模型(例如高斯混合模型),来最大化离散数据的对数似然,可能导致解的“退化”(degeneration)现象,最终得到模型给每个可能的离散值{0,...,255}分配相同的可能性。 即使使用了无限充足的数据来训练,该模型也可以通过简单地“挤压”尖峰,收窄分布,来实现任意高的似然。
【从驯估学(上)得到:
\mathcal{L}(\theta) = \frac{1}{N}\sum_{i=1}^{N}\log p_\theta(x^i) \approx \int p(x) \log p_\theta(x) dx = -H(p, p_\theta)
如果x^i取离散值,则当p_\theta(\cdot)在离散值上等于\frac{1}{N},其余各处为0时,\mathcal{L}(\theta)=\frac{1}{N}\sum_{i=1}^{N}log\frac{1}{N}=-N\cdot -\frac{1}{N}log{\frac{1}{N}}=-N\cdot H(p)达到理论上的最小值。示意图在下方左图。】

实数化

为了解决这个问题,常见的做法是将噪声添加到整数像素值,来对数据进行“实数化”(De-Quantization)【译者按:通行译法是“反量化”或“解量化”,但我觉得“实数化”更容易理解】。 这个操作写为,其中来自均匀分布。据我所知,第一篇在密度建模中使用随机实数化的文章是Uria等人的工作(2013年),奠基了Dinh等人在2014年Salimans等人在2017的工作,以及建立在这三个工作之上的其他工作,从此随机实数化成为实践中的常见做法。

离散模型在一个个区间内分配概率质量(probability mass),而连续模型则【依据密度函数在区间的每个点上】分配密度。令P(x)的和p(x)分别表示真实数据分布的离散概率质量和连续密度,并令P_\theta(x)的和p_\theta(x)代表模型对二者的估计。 我们将在下面推导出,依据实数化后的数据y,优化其连续似然模型的密度函数p_\theta(y),可以得到优化真实数据的离散概率质量模型P(x)的下界。【原文符号写错了。】

将密度函数在[0,1]区间上积分,可以得到密度函数的总质量:
P(x) = \int_0^1 p(x+u) du
P_\theta(x) = \int_0^1 p_\theta(x+u) du
我们从真实数据分布中采样x,采样噪声样本u,得到y=x+u。模型的目标是最大化下式中的似然函数:
\mathbb{E}_{y \sim p}\left[ \log p_\theta(y) \right]
根据期望的定义:
= \int p(y) \log p_\theta(y) dy
展开被积函数:
=\sum_x \int_0^1 p(x+u) \log{p_\theta(x+u)} du
dy=\frac{\partial y}{\partial u}dx+\frac{\partial y}{\partial x}du=udx+xdu,因为x只能取离散值,\int \{*** \}udx=0
根据Cauchy-Schwarz不等式:
\leq \sum_x\{[ \int_0^1 p(x+u)du ] [ \int_0^1 \log p_\theta(x+u)du] \}
代入密度函数的总质量:
= \sum_xP(x)[ \int_0^1 \log p_\theta(x+u)du]
=\mathbb{E}_{x \sim P} [ \int_0^1 \log p_\theta(x+u)du]
根据Jensen不等式:
\leq \mathbb{E}_{x \sim P} \log \int_0^1 p_\theta(x+u)du
代入密度函数的总质量:
= \mathbb{E}_{x \sim P} \log P_\theta(x)
最近的一篇论文Flow ++中提出,使用学习的实数化随机变量,可以改善变分上界的紧致性。直观理解,单个重要性采样q(u|x)的导致的噪声方差,将小于均匀采样u\sim U(0,1)在积分\int_0^1 p_\theta(x+u)du上导致的噪声方差【,而较低的噪声方差将是上限紧致的关键因素】。由于不同架构选择了迥异的实数化方案,所以这一系列工作之间不能以控制变量的方式来公平比较。
【变分法形式化大致如下:
\mathbb{E}_{x \sim P} \log P_\theta(x)
=\mathbb{E}_{x \sim P} [ \log\int_0^1 q(u|x)\frac{p_\theta(x+u)}{q(u|x)}du]
\geq \mathbb{E}_{x \sim P} [ \int_0^1 q(u|x)\log\frac{p_\theta(x+u)}{q(u|x)}du]
=\mathbb{E}_{x \sim P}\mathbb{E}_{u \sim q(\cdot |x)} \log\frac{p_\theta(x+u)}{q(u|x)}

【为了公平】比较Flow ++和均匀采样的实数化框架的生成模型,一种方法是允许研究人员在训练时使用(他们喜欢的)任何一种变分下界,但是在模型评估时将似然评估的值,统一换算成多个样本的紧密下界。直观理解,当整合了更多样本后,我们的估计模型P_\theta(X)可以更好地逼近相应离散模型的真实对数似然。

例如,我们可以报告从固定的U(0,1)采样得到的实数化分布的多样本下界,就像VAE文献中通常所做的那样,给出的多样本IWAE下界。有关VAE和IWAE变分下界的讨论超出了本教程的范围,我会在将来单独介绍。

【关于图像的讨论还未结束,另外对标准化流也将在“驯估学”(下)中继续。请接着读下去,加油!】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容

  • 按照用途分类出以下统计函数: AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该函数可以评测数据(例...
    四方院祭司阅读 2,884评论 0 3
  • 随机变量是根据偶然性取值的变量。我们在谈到随机变量时,通常是以“概率分布”的形式来描述他们。也即:随机变量落在每一...
    小狸投资阅读 5,319评论 1 7
  • 朴素贝叶斯 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类...
    七八音阅读 20,518评论 0 21
  • 这几天在我家发生了一个小小的变化,我儿子突然的爱洗脸和刷牙了,以前每天吵着嚷着都不管用,现在变得主动了。还有每天起...
    冰山雪莲_3282阅读 219评论 0 3
  • 先上前几篇的地址第一篇第二篇第三篇接着上一篇直接走吧,在CacheInterceptor执行之后 下一个执行的拦截...
    范锦浩阅读 309评论 0 0