大数跨境
0
0

一起來感受下贝叶斯流网络玩转离散数据的原理-Bayesian Flow Networks(四)

一起來感受下贝叶斯流网络玩转离散数据的原理-Bayesian Flow Networks(四) 极市平台
2023-12-12
0
↑ 点击蓝字 关注极市平台
作者丨CW不要無聊的風格
编辑丨极市平台

极市导读

 

本文主要解析了BFN对离散数据建模的原理。首先介绍了离散数据的表示方式,然后讨论了输入分布、发送者分布、输出分布和接收者分布的建模方法。接着详细解释了对离散数据加噪的方法,并介绍了疯狂采样的概念。最后,讨论了贝叶斯更新函数的意义和计算方法。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

BTNs是怎么玩转生成即压缩的?详解结合贝叶斯统计和深度学习的生成模型 — Bayesian Flow Networks(一)

结合贝叶斯推断的去噪生成模型?详解BFN在连续型数据场景下的实现— Bayesian Flow Networks(二)

详解贝叶斯流网络在离散化数据场景下的实现—Bayesian Flow Networks(三)

前言

本文主要解析 BFN 对离散数据建模的原理。章节的设置与本系列前几篇文章类似,首先说明下离散数据的表示方式、然后对 BFN 数学框架进行详细的解析并给出对应的伪代码,接着对实验结果进行分析,最后是发散性话题:谈谈 CW 对于 BFN 在一些方面的理解。

这篇文章是本系列最难啃的一篇,涉及的数学推理比较多,其中许多部分,作者在 paper 中仅给出了简略的过程,秉持着不无聊的风格,CW 在 paper 内容的基础上给出了更为详细的推导与分析。另外,对于作者直接引用而没有推导过程的一些公式,CW 也力所能及地给出了对应的证明过程(算是很贴心了叭~),为了不打扰到各位客官观赏正文的兴致,这些证明过程被置于附录部分,感兴趣的不妨去瞄瞄~

ps: 本系列的几篇文章多少存在一定程度上的联系,特别是离不开首篇文章所描述的数据压缩游戏的背景与基本数学框架,建议各位观众先对首篇文章有一定程度的理解后再来看后面几篇。

离散数据的表示方式

离散数据可谓是大家的老朋友了,无论是在 paper 中还是实际生活中,它都很常見,比如:文本字符、物体类别 等。在这篇 paper 中,作者将离散数据表示为类别,它是 维向量每一维的值代表某个类别(从1开始)

假设将数据划分为 类, 且 表示从 1 到 的整数, 那么数据就表示为:

输入分布:数据分布的“先天”信念

输入分布可谓是一种“偏见”,因为毫无道理地就认为数据会属于某种特定的分布,所以 CW 才说它是数据分布的先天信念。它虽然一开始毫无道理,但后来是会通过观测样本而得到关于真实数据的经验性信息来进行自我纠正的(所以,别方哈)。

既然将数据视作类别,那么自然地就会想到分类分布(Categorical Distribution),而数据在每一维都代表一个类别,对应于一个分类分布,于是整个输入分布就建模为多个分类分布的联合分布

记输入分布的参数 , 其中每一维 是一个 维向量, 维数与类别数相等, 其中每个维度表示属于某个类别的概率。 表示 维的 概率单纯形(probability simplex), 之所以是 维, 是因为 个类别的概率之和为 1 , 知道了其中的 个概率就能顺势推出剩下的 1 个。

参数 的取值范围是 , 表示概率, 是 维向量, 其中每一维的参数 都表示类别数为 的分类分布, 且相互独立。 于是, 输入分布的概率质量函数则表示为 在数据真实类别上的联合概率:

先验设置

如今我们处在一个讲究人性化的社会,先验当然就选择设为“公平分配”的均匀分布啦:

其中 维向量, 每一维上的值都等于 , 每个类别都拥有相等的概率, 十分公平。

其实,作者之所以选择均匀分布这种简单的先验,是因为这在数学上会更简单,并且他认为网络能够很容易学到数据的真实先验(毕竟是他自己出版的故事,得有信念)。

对网络输入进行缩放

另外,由于输入分布的参数是概率值,如果直接输入给 BFN,那么它永远只能接收到非负值,因此在将其喂给 BFN 前,会先乘以2再减去1,从而缩放至

输出分布:新数据的缔造者

输出分布是生成新数据的直接依据,可谓是新数据的缔造者,下面来看看对于离散数据它是如何建模的。

将输入分布的参数 和时间变量 喂给 BFN, 它会输出:, 其中每个 都是 维向量, 与 个类别相对应。

注意,每一维对应的输出都由输入分布参数在所有维度(而非仅仅是单个对应维度)上的变量( 而非 )经 BFN “处理”后所获得。因此,输出分布会拥有关联上下文信息的能力,这点 CW 其实在本系列的首篇文章中已经讲过。

由于作者将数据表示为类别, 因此这里就要将网络的输出转化为类别所对应的概率, 也就是要将它搞到 范围内。条件反射, 很容易使我们想到使用 softmax, 于是:

也就是说, 将网络在每一维上输出的 维向量都经过 softmax, 使其对应于类别数为 的分类分布。

面对已知数据 , 就将经过 softmax 处理后的输出在每一维上取出数据在对应维度上的类别所对应的概率, 最后连乘起来所得到的联合概率分布, 就是输出分布。

特别地,对于只有两个类别的数据,那么网络在每个维度上就只输出一个值(而非2维向量),并且以 sigmoid 替代 softmax。于是, 在由 。于是,在由 计算出其中一个类别的概率后,再根据 1 减去这个概率就能得到剩下那个类别所对应的概率,即:

另外,作者还进一步谈到:虽然在面对类别数 的情况,也可以由其中的 类概率推断出剩下的那一类所对应的概率, 但这种做法潜在地要求网络做更复杂的推理(有点像使用排除法), 可能会导致网络学习(收玫)得更慢和更困难, 所以作者还是采取了 分类的做法。

对于这点, CW 想了下, 若网络在 维中的每个维度上仅输出 维向量, 那么一种实现 分类的方式可能是需要将这 个输出加起来先经过 sigmoid 做二分类(看是否属于剩下的那一类), 然后再将这 个值喂给 softmax 做多分类, 也是比较麻烦~

发送者分布:数据的信使

发送者分布是用于构造观测样本的,而观测样本能够将真实数据的信息传递出去(从而才能是先验进行后验更新),因此 CW 将发送者分布视作数据的信使。

如何对离散数据加噪

经过本系列前几篇文章的“洗礼”,大家已经知道发送者分布是要在原始数据上加噪,而这里的数据是离散型的类别,那么如何对这种表示为类别的数据进行加噪呢?

由上可知,输入、输出分布都建模为分类分布,借此灵感,在这里我们可以将原始数据分布脑补为一个非常 "hard" 的分布——这个分布在原始数据所对应的类别上,概率为1;而在其余类别上,概率则为0。至于加噪的手段,就是将此概率分布变 "soft"——从真实类别上“挖”走一部分概率值平摊到其余类别上

其中 可理解为一个平滑因子, 其越小则分布变得越平滑, 以至于为 0 时则变为均匀分布。 表示Kronecker delta function(克罗内克德尔塔函数), 当 时其值为1, 否则为 0 ; 也就是只有在数据所对应的那个类别上为 1 , 其余情况均为 0 。 则表示 个类别中的某一个。

容易看出, 式对于任意类别都是大于 0 的, 且 , 于是此处又可定义一个分类分布(以 为条件):

至此,我们得到了一个“含有噪声”(平滑)的分类分布。那么,噪声样本(观测样本)该如何构造呢?

如果直接从以上分布中采样,那么很可能会抽到其它不是原数据所对应的类别,特别是当 的时候(趋向于均匀分布)。并且,类别是以整数来表示的,这些整数并不能反映类别之间的关系。于是,当采样到非数据所对应的类别时,观测样本就不能反映出原始数据的信息,这就不符合游戏规则了;另外,就算采样到了数据的真实类别,但这时观测样本却变得与原始数据一模一样,这就不是噪声样本了。

所以,接下来要想办法构造出一种观测样本,使其既能与原始数据有关联(最好能通过某些参数控制相关程度),同时又不能与后者一模一样。

疯狂采样

既然从以上平滑的分类分布中采样一次不可行,那么不妨试试采样多次会出现什么情况。

作者引入了这样一个场景: 对以上平滑的分类分布进行 次独立的采样, 那么每个类别都会有被采样到的机率, 记 为第 类总共被采样到的次数, 于是采样结果就表示为一个 维向量 (paper 中是 觉得不一定每个类别都会被采样到, 你们觉得呢)。

为了便于书写(偷懒),接下来暂时省略维度上标:(d) (我跟作者学的),也就是接下来的推导都是限定在单个维度上进行讨论的。

相信统计学玩得6的朋友们一眼就看出,随机变量 是服从 多项分布(Multinomial Distribution) 的:

以上第2步是代入了多项分布的概率质量函数(具体推导过程见附录1), paper 中少了 次幂(见 paper 的式 (134), 作者你能不能走点心..), 最后1步是将式 代入。在 paper 中, 的下标为 , 但其实应该是 (CW 不禁怀疑作者是不是喝多了)。

根据 大数定律(Law of Large Numbers), 有:

也就是说, 当试验次数足够大时, 频率会趋近于真实概率。于是, 当试验次数足够大时, 根据采样结果 就能推断出原始数据, 因为原始数据类别所对应的次数一定是最多的,这源于原数据类别所对应的概率最大(根据 式, 可知 时最大)。同时, 当 时, 由于各类别被抽到的概率都差不多, 因此也需要更多的试验次数来甄别出数据真实的类别, 甚至于 , 可谓是“疯狂采样”(踩踩踩)

于是, 作者将 结合, 定义出一个有限值精度: , 当 占优势时, , 此时采样结果会变得几乎无法反映原始数据信息(因为各类别的概率相差无几, 所以在试验后被采样到的次数都差不多); 反之, 当 占优势时, , 试验次数已经大到足以甄别出数据的真实类别与其它类别, 尽管它们之间的差异很小(因为有大数定律的保障), 此时采样结果比较能反映出原始数据的信息。

至于为何 是平方, 作者没有解释, 看完 paper 后, 感觉这只是为了后续推导出一个好看且易用的形式(看完本章你也能 feel 到)。

进一步, 设离散概率 , where $0<p_k<1, \forall="" k="" \in\{1,="" k\}$="" 。若="" $c="" \sim="" \operatorname{multi}(m,="" p)$,="" 当="" $m="" \rightarrow="" \infty$="" 时,="" 根据="" 拉普拉斯中心极限定理,="" 有:<="" p="">


其中 的单位阵。注意, 这里对应 paper 中的式 (137), 但在 paper 中, 分母漏了 , 不过影响不大, 只是协方差相差一个系数而已。 为了迎合作者的故事, 接下来就沿用 paper 的式 (137), 即:

观测样本的诞生与采样

话说, 以上疯狂采样的场景到底有什么用呢? 虽然采样结果能反映出原始数据信息(能从采样结果推断出原始数据类别), 但通过上述分析, 要做到稳定的话, 采样次数 几乎要趋于 , 所以直接以采样结果作为观测样本是不切实际的。然而, 采样结果又确确实实能够反映出原始数据的信息, 因此还是得将以上场景利用起来, 接下来 CW 就带大家一起来看看作者是怎么做的。

首先定义一个变量 , 然后将类别 对应的观测样本定义为:

现在来分析下以上式子的实际含义: 相当于将 次采样次数平摊到各类别上, 也就是平均每个类别会被采样到的次数, 于是 就衡量了当前类别被采样到的次数与平均值相比如何。 同时, 由于 是非负的, 因此 就与 呈正相关。并且, 当 增加(即 占优势)时, 采样结果会更加集中于数据真实的类别, 也就是 会(远)大于 。由此可知, 是正值且变得越大时, 它与原始数据的关系就越紧密、越能反映出原始数据的信息。

嗯,这么看来,这个观测样本还是能通过“及格线”的 —— 能根据它的值反映出其与原始数据的相关程度。但是,关键问题还没有解决:它该如何计算?要是真的从以上定义式去计算的话,那么又变得不切实际了,因为还是得进行几乎无数次的疯狂采样。

这是,你们是否不禁 yy:要是能够知道观测样本 所服从的分布,并且这个分布的概率密度函数是有解析形式的,使得我们能够直接从中采样,那么就万事大吉了!

做人就是要敢想才有前(钱)途, 并且, 冷静下来, 你会发现这个想法并非天(不)马(切)行(实)空 (际), 因为前面我们已经推导出 是服从正态分布的, 而 存在解析形式的数学关系, 而且是线性关系,所以前者应该也是服从正态分布的(根据正态分布的性质)。 不过,光吹水没用, talk is cheap, CW show you the math!

根据 的定义式, 可得:

接着,利用 随机变量的变量变换定理(Change of Variables):

(关于一维随机变量的分布变换的具体推导过程请见附2)

接下来, 我们要利用一个对数恒等式(贼香 ) : (具体推导过程详见附3), 并将其套在前面的 上, 于是:

以上第一步利用了对数恒等式并且仅展开到第一阶,并且 ,是满足约束的。

同时,当 时,有:

将式 (iii), (iv) 代入式 (ii), 得:

OMG!! 我们真的推导出观测样本所服从的分布了(yy 成真)!但是请注意,这是有约束条件的,即:

如今, 我们将前面丢掉的维度上标 拿回来。同时, 由于以上的 仅是某个类别所对应的观测样本, 而总共有 个类别, 因此每个数据维度上都有 种采样结果(各维度独立进行疯狂采样)。对应地, 每个数据维度上的观测样本都是 维向量: , 于是:

其中, 1 是值全为 1 的 维向量, 的单位阵, 而 是原始数据的某个维度映射到 个类别的 one-hot 向量, 其中的第 个分量为:

最终,发送者分布就定义为:

其中, , 其中 维中的每个分量都是 维的 one-hot 向量; 1 是值全为1的 维向量; 的单位阵。

多说几句: 为何要定义 这个变量以及 的形式为何是那样的, 对此作者并没有解释, 从前面的推导过程来看, 这两者的定义貌似仅仅是为了能够利用起对数恒等式, 从而最终顺利推导出一个解析形式。

接收者分布:对于消息的“暴力猜测”

消息接收者 Bob(别忘了这篇 paper 是以数据压缩游戏作为背景来论述的) 由于不知道原始数据长什么样子,因此只能暴力猜测——将所有类别都以输出分布作为概率加权起来,这就是接收者分布。有点像:我虽然不知道准确值,但我考虑了所有可能性,于是“命中率”理应高一些。

维数据的每个维度上,接收者分布是发送者分布在输出分布上的期望,而所有单个维度的联合分布就是接受者分布,即:

贝叶斯更新函数:贝叶斯定理的“表演者”

贝叶斯更新函数就是根据贝叶斯定理计算后验概率,下面就一起来观看它的“演出”~

先验、似然、后验 傻傻分不清楚?

要使用贝叶斯定理计算后验概率, 关键是要先理清 先验、似然 以及 后验, 也就是搞清楚它们三个到底是谁。为了便于分析, 我们先在单个数据维度上进行讨论, 并且暂时忽略维度上标

假设我们现在要得到第 步的参数(输入分布的参数) , 它由第 步的参数 经过后验更新而来。对于数据 , 其对应的先验是 , 这是输入分布的定义; 至于观测结果, 则是前面引入的疯狂采样场景中的采样结果 。于是, 似然则是 ; 从而, 后验则为:

非常丝(顺)滑(利)!经过一番推导,现在可以用观测样本来计算后验了。注意,以上的 代表自然指数。

贝叶斯更新函数的意义

以上是 (它是 维向量, 注意前面我们忽略了数据维度 ) 的第 个分量所对应的后验更新。于是, 对于第 个分量, 贝叶斯更新函数就定义为:

现在,我们考虑回数据维度,即: 。于是,贝叶斯更新函数就是:

注意, 以上 。也就是说, 这个贝叶斯更新函数相当于让 在每个数据维度 里, 对每个类别 都做归一化(在类别这个维度里), 归一化因子是对应数据维度里, 所有 之和(是不是有点 softmax 的味道 ) 。

有了这个贝叶斯更新函数, 进行后验更新可就方便多了。由于我们是在 (从而精度 为有限值)的约束下玩的, 因此原本需要在多项分布 上进行几乎无数次采样得到结果 , 进而才能利用这个观测结果进行后验更新; 然而,现在却可以直接从发送者分布中采样出观测样本, 然后按照 式来计算就可以实现后验更新了,真香~

贝叶斯更新分布:考虑得更为周到的贝叶斯更新函数

贝叶斯更新分布考虑到了观测样本的所有可能性,它是贝叶斯更新函数在发送者分布上的期望,即:

精度可加性:助力后验更新实现“跳步”更新

精度可加性是后验更新所拥有的性质。简单来说, 就是: 若

【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读5.7k
粉丝0
内容8.2k