Loading [MathJax]/extensions/TeX/AMSmath.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >标准化流 Normalizing Flows

标准化流 Normalizing Flows

作者头像
为为为什么
发布于 2023-05-24 06:27:02
发布于 2023-05-24 06:27:02
1.4K00
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

学习生成模型标准化流,本文记录相关内容。 Change of variables, change of volume

简介

标准化流能把简单的地摊货概率密度(比如高斯分布)形式转换成某种高大上的分布形式。它可以用在产生式模型、强化学习、变分推断之类的地方。

Normalizing Flows尚无标准的中文译名。Flow指的是数据“流”过一系列双射(可逆映射),最终映射到合适的表征空间;Normalizing指的是,表征空间的变量积分为1,满足概率分布函数的定义。

统计机器学习

统计机器学习旨在获悉参数分布 ,以揭示数据的结构。以此出发,你将能达成以下四个目标:

  1. 采样该结构,生成数据。 这样就节省了完整的生成过程,若完整的过程纷繁浩杂,则节省巨大。同样,现实数据的维度高,采样后的低维结果就可管中窥豹,节省计算。
  2. 评估测试数据的似然概率。 在拒绝采样或评估模型时有用。
  3. 获得变量间的条件依赖关系。 如 可用来判别或回归。 这一条与上一条刚好相对应,一个是unconditional likelihood estimation,一个是conditional likelihood estimation。
  4. 评判算法。 如熵、互信息、高阶矩等指标,均可一试。

以上四个目标,第一个研究的最充分。合成图像、声音,已在谷歌商用。但第二三四个,研究寥寥。仅举几例,GAN的解码器,支撑集(映射到非零值的自变量)不可得;DRAW模型乃至VAE模型,概率密度不可得;哪怕已解析地了解某分布,解析的度量(如KL距离,earth-mover距离)还是不可得。

这句话说的简单点就是:深度产生式模型不容易甚至不可能进行测试和度量

即使你能合成个把接近真实数据的样本,你还离目标差得远咧!我们想要了解它们多大程度上“接近真实数据”,想要得到灵活的条件密度(如增强学习中复杂的规则),还想要在一大家子的先验分布和后验分布上做变分推断!

高斯分布

你思索片刻,想起了你的“亲密战友”高斯分布。它在你为复杂的概率分布理出头绪而焦头烂额的时候,雪中送炭:采样方便、解析的密度已知、KL距离容易计算,还有中心极限定理的保证——任何大的数据都趋近于高斯分布,所以你怎么用它几乎都对!更别提重参数化技巧啦,你还能梯度反传。这些易用的性质,让高斯分布在产生式模型和增强学习里风头无两。

不过先别高兴的太早!许多实在的场景,我们还不能用它。在增强学习里,常有连续控制机器的场景,控制规则得用多变量高斯、对角化方差矩阵(motivariate Gaussians with diagonal covariance matrices)才行呐~

相形之下,只用单模式高斯分布模型(uni-modal Gaussian distribution),在需要多模式分布(multi-modal distribution)采样的时候,乏善可陈。试举一例,要机器人绕过湖面,到达湖后的房子,规则该是二者选一:向左绕或向右绕。单模式高斯模型容不下两个规则,所以就线性地中和了它们:直直地走向湖心。糟了个糕!

高斯分布失之过简。它不能容下对立的假设;高维的情况下分布也不够集中,出现边缘效应;还不能应对罕见事物。有没有更好的分布模型,可以满足如下条件呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.足够复杂,容得下多个模式,比如增强学习中的图像和评分函数;
2.足够简单,能采样,能估计密度,能重参数化。

答案是:有!你可以做这几件事。

目标分布

以下几个办法,能帮你实现需求:

  1. 模型融合。一个模型对付一个子任务。
  2. 立足当下。一次只考虑一步,让复杂的选择在此刻退化,而仅存一端。
  3. 非定向图模型(undirected graphical models)。
  4. 标准化流。你将得到一个理想的模型:可逆、可计算分布变换体积、易模拟。

下面介绍标准化流。

预备知识

为了建立直观,举例如下。让X服从均匀分布 。Y 是X的仿射变换。如下图所示。

两个方块代表概率在实数域的分布函数 ,函数值代表概率密度的值。概率值的积分必须等于1,任何一个分布都是这样。所以自变量变化范围扩展为两倍后,函数值就要相应地缩减一半,从而二者面积都等于1.

也就是说,当 水平被拉长两倍后,竖直方向上也会相应的被压缩成原来的一半。

这就是为什么模型叫标准化流,因为有加和等于1的约束

若考虑X上的极小变化 相应发生变化 ,如下所示:

左半边的图代表一个局部增函数

的局部变化:

为了让概率的变化守恒,我们只关心变化的量,而不关心变化的方向。(实际上,不管f(x)随着x变化增或者减,都不影响,我们假设y也做出相应的变化。)那么,我们有 :

在log空间,这等价于 :

现在考虑多变量的例子。先考虑两个变量的情况。同上面的情况,缩放定义域中的无穷小量,我们就得到一个二维的、边长为

不妨假设这个小方块就是一个边长为1的原点处的方块,那么顶点为

乘以矩阵 ,我们的方块就会变成一个平行四边形,如下图。 还在 来 到了 被送往 到达

于是,一个X域边长为 1 的方块转型为平行四边形,面积大小变成了 。 这个平行四边形的面积,正是转换矩阵的行列式。 三维的情况时,“转换为平行四变形”就对应为“转换为平行六面体”,或者更高维的情况也是以此类推,“转换为平行 维体”。行列式的道理也还是如此,线性变换后的体积,正好对应于变换矩阵的行列式。

要是转换函数f是非线性的咋办?你就不该把它简单地看作全空间的一个简单的平行体,而是对空间的每个点,对应于一个无穷小平行体。数学形式上看,局部线性变换对应的体积变化为 , 这里 代表雅各比矩阵的逆一是 的高维变种。

于是:

$$ \begin{array}{c} y=f(x) \ p(y)=p\left(f^{-1}(y)\right) \cdot\left|\operatorname{det} J\left(f^{-1}(y)\right)\right| \ \operatorname{logp}(y)=\log p\left(f^{-1}(y)\right)+\log \left|\operatorname{det}\left(J\left(f^{-1}(y)\right)\right)\right| \end{array} $$

行列式可以被认为是变换 的局部线性体积变化率。

标准化流

通过预备知识中的手段我们可以得到可逆函数的双射方法,但是为了增强模型的表达能力,我们是可以 把一系列双射连起来,在神经网络里像链子一样把它们拴在一起, 这个结构就叫“标准化流”。

要是双射函数有可变的参数,你就可以优化这个参数,该双射就可以把基础分布转换成任意的分布。每个双射函数可以写成一个网络的层,你可以用一个优化器来学习参数,最终拟合真实数据。算法通过最大似然估计,把拟合真实数据的分布问题变成拟合变换后的概率的对数密度问题。

用对数密度的原因是为了计算的稳定性。

Normalization Flow

论文链接:https://arxiv.org/pdf/1505.05770.pdf

在variational inference中,我们通常是在优化所谓的evidence lower bound(ELBO),即:

$$ \begin{array}{l}\log p_{\theta}(\mathbf{x})=\log \int p_{\theta}(\mathbf{x} \mid \mathbf{z}) p(\mathbf{z}) d \mathbf{z} \ =\log \int \frac{q_{\phi}(\mathbf{z} \mid \mathbf{x})}{q_{\phi}(\mathbf{z} \mid \mathbf{x})} p_{\theta}(\mathbf{x} \mid \mathbf{z}) p(\mathbf{z}) d \mathbf{z} \ \geq-\mathbb{D}_{\mathrm{KL}}\leftq_{\phi}(\mathbf{z} \mid \mathbf{x}) | p(\mathbf{z})\right+\mathbb{E}_{q}\left\log p_{\theta}(\mathbf{x} \mid \mathbf{z})\right=-\mathcal{F}(\mathbf{x}),\end{array} $$

最大化 需要我们找到近似于后验概率 的近似分布 , 但一般的高斯分布没有办法拟合足够复杂的后验分布。 因此,NF(normalization flow)应运而生。NF用一系列的可逆映射将原始分布转换成新的分布,通过优化这一系列分布,即可实现将简单的高斯分布转换为复杂的真实后验分布的目的。

后,新变量的分布为:

第二项即是上一节中所讲的逆函数的雅克比矩阵。接着,为了构建足够复杂的分布,我们可以用多个类似的可逆映射,映射套映射:

$$ \begin{aligned} \mathbf{z}_{K} & =f_{K} \circ \ldots \circ f_{2} \circ f_{1}\left(\mathbf{z}_{0}\right) \ \ln q_{K}\left(\mathbf{z}_{K}\right) & =\ln q_{0}\left(\mathbf{z}_{0}\right)-\sum_{k=1}^{K} \ln \left|\operatorname{det} \frac{\partial f_{k}}{\partial \mathbf{z}_{k-1}}\right|\end{aligned} $$

用这样的方式,当计算转换后的分布 的pdf时,不用显式地计算 ,而是通过初始分布 的 pdf 以及映射的雅克比矩阵即可计算。而一般函数的雅克比矩阵的计算复杂度达到了 ,在 NF 的应用中显然不可行。因此,NF需要找到雅克比矩阵可以被高效运算的可逆映射函数。

在原文中,作者给出了两种映射函数的选择,分别是:

  1. Planar Flow

其中,

  1. Radial Flow $$ \begin{array}{l}f(\mathbf{z})=\mathbf{z}+\beta h(\alpha, r)\left(\mathbf{z}-\mathbf{z}_{0}\right) \ \left.\left|\operatorname{det} \frac{\partial f}{\partial \mathbf{z}}\right|=1+\beta h(\alpha, r)^{d-1}\left1+\beta h(\alpha, r)+\beta h^{\prime}(\alpha, r) r\right)\right\end{array} $$

Planar flow和radial flow分别是在平面空间和球形空间中对原分布进行变换。下图形象的表示了NF的不同长度(也可以叫层数)K与最终分布的关系。

这两种简单的映射函数只适用于低维的情况,为了处理高维的依赖,Autoregressive Flows(自回归流)是一种合适的选择。

Autoregressive Flows

关于自回归流,有三篇比较经典的文章,包括 Real-NVP,MAF和IAF。这里先讲Real-NVP和IAF。 MAF和IAF想法是镜像的,就不赘述了。

需要说明的是,所有自回归流的模型都是建立在这样的一条理论基础上的:三角矩阵的行列式是其对角元素的乘积。形式上,第 维的变量 的生成只依赖于之前生成的变量 ,即 :

$$ \begin{aligned} p\left(x_{i} \mid x_{1: i-1}\right) & =\mathcal{N}\left(x_{i} \mid \mu_{i},\left(\exp \alpha_{i}\right)^{2}\right) \ \mu_{i} & =f_{\mu_{i}}\left(x_{1: i-1}\right) \ \alpha_{i} & =f_{\alpha_{i}}\left(x_{1: i-1}\right)\end{aligned} $$

Real-NVP

这篇文章引入了 affine coupling layer ( 仿射耦合层) 的概念。给定一个 维的输入 如下计算 :

$$ \begin{aligned} y_{1: d} & =x_{1: d} \ y_{d+1: D} & =x_{d+1: D} \odot \exp \left(s\left(x_{1: d}\right)\right)+t\left(x_{1: d}\right), \end{aligned} $$

分别对应上面的 。也就是说,Real-NVP将输入的一部分维度保持不变,而另一部分 维度进行变换。这样得到的映射函数的雅克比矩阵为 :

$$ \frac{\partial y}{\partial x^{T}}=\left[\begin{array}{cc} \mathbb{I}_{d} & 0 \ \frac{\partial y_{d+1: D}}{\partial x_{1: d}^{T}} & \operatorname{diag}\left(\exp \lefts\left(x_{1: d}\right)\right\right) \end{array}\right] $$

它的行列式可以被简单的计算 : 。并且由于计算行列式的过程不依赖于 的行列式,所以可以选取任意复杂的函数作为

此外,这样的映射函数还有一个性质,即它的逆映射的计算复杂度和正向的计算复杂度相等:

$$ \begin{array}{c}\left{\begin{array}{ll}y_{1: d} & =x_{1: d} \ y_{d+1: D}=x_{d+1: D} \odot \exp \left(s\left(x_{1: d}\right)\right)+t\left(x_{1: d}\right)\end{array}\right. \ \Leftrightarrow\left{\begin{array}{l}x_{1: d}=y_{1: d} \ x_{d+1: D}=\left(y_{d+1: D}-t\left(y_{1: d}\right)\right) \odot \exp \left(-s\left(y_{1: d}\right)\right),\end{array}\right.\end{array} $$

也就是说,sampling和inference的时间复杂度相等,而且由于逆映射的计算也不依赖于 的逆,所以其函数的选择可以任意复杂。

,即可高效的实现该层的计算:

但在实验中,Real-NVP的效果并没有IAF和MAF好。

IAF

。显然这个过程是没有办法并行的,sample 时速度很慢。IAF 可以看做是上式的 reparametrisation,即:

其中, ,因此可以被并行的计算:

也就是说,在sampling的时候,IAF可以被高效的并行。但是在inference的时候,想要得到

相反的,MAF在训练时快,sample时慢。Parallel-Wavenet实现了两者的结合,用MAF作为teacher model,负责训练时提供分布的指导信息;而用IAF作为student model,负责最终的sample。这个基于knowledge distillation的方法在语音合成上取得了很好的效果,同时也保证了生成语音的速度。

WaveGlow and FloWavenet

这里再介绍一下Normalization Flow在语音合成上比较新的工作。WaveGlow和FlowWavenet的模型基本相同,也是同时放出来的,这里按照WaveGlow的模型进行介绍。流程图如下:

WaveGlow引入了Real-NVP中的affine coupling layer,每一次对输入向量的一半维度进行变换,另一半保持不变。上图右侧的转换过程可以表示为:

$$ \begin{array}{c}x_{a}, x_{b}=\operatorname{split}(x) \ (\log s, t)=W N\left(x_{a}, \text { mel-spectrogram }\right) \ x_{b} \prime=\boldsymbol{s} \odot x_{b}+t \ f_{\text {coupling }}^{-1}(x)=\operatorname{concat}\left(x_{a}, x_{b} \prime\right)\end{array} $$

是任 意的变换函数,两篇文章均用的non-causal Wavenet,也可以说是non-autoregressive的wavenet。该变换的雅克比矩阵的行列式为:

前面提到过,Real-NVP每一层只能变换一部分的输入。为了实现完整的变换,WaveGlow引入了与Glow10中相似的1x1 Invertible Convolution,因为还没看过Glow,所以先留作一个坑。FlowWavenet中,作者则简单的交换了输入向量奇偶索引上的元素来实现这一目的。此外,两个模型还有一些微小的差异,但motivation和idea都是一样的。

原始论文

参考资料

文章链接: https://cloud.tencent.com/developer/article/2291037

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年5月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
概率论基础 - 11 - 高斯分布 / 正态分布
本文记录高斯分布。 高斯分布 / 正态分布 正态分布是很多应用中的合理选择。如果某个随机变量取值范围是实数,且对它的概率分布一无所知,通常会假设它服从正态分布。有两个原因支持这一选择: 建模的任务的真实分布通常都确实接近正态分布。 中心极限定理表明,多个独立随机变量的和近似正态分布。 在具有相同方差的所有可能的概率分布中,正态分布的熵最大(即不确定性最大)。 一维正态分布 正态分布的概率密度函数为: p(x)=\frac{1}{\sqrt{2 \pi} \sigma} e{-(x-\mu){2}
为为为什么
2022/08/05
1.6K0
概率论基础 - 11 - 高斯分布 / 正态分布
线性代数 - 1 - 基础知识
线性代数,基础知识,温故知新。 定义 向量: 向量默认为列向量: image.png 矩阵 \mathbf{X} \in \mathbb{R}^{m \times n},表示为: image.png 范数 向量范数 1-范数 各个元素的绝对值之和 image.png 2-范数 每个元素的平方和再开平方根 image.png p-范数 image.png 其中正整数p≥1,并且有 \lim _{p \rightarrow \infty}\|X\|_{p}=\m
为为为什么
2022/08/05
2.3K0
线性代数 - 1 - 基础知识
扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」
我们上篇提到的 卡尔曼滤波(参见我的另一篇文章: 卡尔曼滤波理论讲解与应用(matlab和python))是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布的系统中,但是现实中并不是所有的系统都符合这样 。另外高斯分布在非线性系统中的传递结果将不再是高斯分布。那如何解决这个问题呢?扩展卡尔曼滤波就是干这个事的。
全栈程序员站长
2022/07/04
1.9K0
扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」
概率建模和推理的标准化流 review2021
Normalizing Flows for Probabilistic Modeling and Inference 调查
CreateAMind
2024/06/04
2110
概率建模和推理的标准化流 review2021
神经网络入门基础知识
1943年心理学家W.S. McCulloch和数理逻辑学家W.Pitts研究出人工神经元,称为M-Р模型。
timerring
2023/07/05
1.8K0
神经网络入门基础知识
BERT-flow:bert的向量表达是SOTA吗?
On the Sentence Embeddings from Pre-trained Language Models 阅读笔记
百川AI
2021/10/19
1.4K0
BERT-flow:bert的向量表达是SOTA吗?
NIPS'21「微信」推荐系统:结合课程学习的多反馈表征解耦
为了解决上述问题,本文提出CDR,提出利用协同过滤动态路由机制去噪并挖掘不同意图之间的关系,同时利用课程学习,从易到难,并且在标签级别去噪。
秋枫学习笔记
2022/09/19
2700
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
元学习可以被定义为一种序列到序列的问题, 在现存的方法中,元学习器的瓶颈是如何去吸收同化利用过去的经验。 注意力机制可以允许在历史中精准摘取某段具体的信息。
汀丶人工智能
2023/10/11
8400
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
KDD'22 | 超图上也能学习因果效应?
本文结合超图和因果推断,专注于超图上的个干预效果 (ITE) 估计问题,旨在估计干预(例如,戴面罩)会对结果(例如,COVID-19 感染)产生多大的因果影响。现有的 ITE 估计工作要么假设一个人的结果不应该受到其他人的干预分配的影响(即没有干扰),或者假设干扰只存在于普通图中的连接个体之间。这些假设在现实世界的超图上可能是不现实的,其中高阶干扰会由于组交互的存在而影响最终的 ITE 估计。本文研究了高阶干扰建模,并提出了一种由超图神经网络驱动的新因果学习框架。
秋枫学习笔记
2023/01/30
5570
【生成模型】简述概率密度函数可处理流模型
本期将介绍第二种非常优雅的生成模型—流模型,它也是一种概率密度函数可处理的生成模型。本文将对其原理进行介绍,并对nice模型的源码进行讲解。
用户1508658
2020/11/19
1.4K1
【生成模型】简述概率密度函数可处理流模型
TensorFlow_Probability实现Normalizing flows实例
标准化流(Normalizing Flows)是算法工具包中的一种便捷技术,它将简单的密度(如高斯分布)转换为丰富的复杂分布,可用于生成模型,RL和变分推断。 TensorFlow具有一组不错的功能,可轻松构建流程并对其进行训练以适应实际数据。
flavorfan
2021/03/14
1.8K0
TensorFlow_Probability实现Normalizing flows实例
Markov Chain Monte Carlo 采样算法
马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo),简称MCMC,产生于20世纪50年代早期,是在贝叶斯理论框架下,通过计算机进行模拟的蒙特卡洛方法(Monte Carlo)。该方法将马尔科夫(Markov)过程引入到Monte Carlo模拟中,实现抽样分布随模拟的进行而改变的动态模拟,弥补了传统的蒙特卡罗积分只能静态模拟的缺陷。MCMC是一种简单有效的计算方法,在很多领域到广泛的应用,如统计物、贝叶斯(Bayes)问题、计算机问题等。
为为为什么
2022/08/05
6820
Markov Chain Monte Carlo 采样算法
Variational Inference with Normalizing Flows 2015 全译
Variational Inference with Normalizing Flows
CreateAMind
2024/05/22
2290
Variational Inference with Normalizing Flows 2015 全译
信道容量详解
我们研究信道的目的是要讨论信道中平均每个符号所能传送的信息量, 即信道的信息传输率 R , 即
timerring
2023/06/11
1.3K0
信道容量详解
推荐系统(十六)——FM全家桶(1),FM,FFM,DeepFM,NFM,AFM
因子分解机(Factorization Machines,FM)及其变种已经在推荐系统中得到了广泛的应用,本文就FM的系列模型进行简单总结。
秋枫学习笔记
2022/09/19
1.1K0
VITS 论文笔记
这篇文章发表在 ICML 2021 会议上,当时的 TTS(test-to-speech)工作效果好的都以两阶段的为主,端到端的工作效果一般。
为为为什么
2023/05/21
1.1K0
VITS 论文笔记
在线学习方法FTRL原理与实现
原文:https://www.cnblogs.com/massquantity/p/12693314.html 点击阅读原文可以前往
秋枫学习笔记
2022/09/19
7490
Low-Shot Learning from Imaginary Data
人类可以快速学习新的视觉概念,也许是因为他们可以很容易地从不同的角度想象出新的物体的样子。结合这种对新概念产生幻觉的能力,可能有助于机器视觉系统进行更好的低视角学习,也就是说,从少数例子中学习概念。我们提出了一种新的低镜头学习方法,使用这个想法。我们的方法建立在元学习(“学习学习”)的最新进展之上,通过将元学习者与产生额外训练例子的“幻觉者”结合起来,并共同优化两种模式。我们的幻觉器可以整合到各种元学习者中,并提供显著的收益:当只有一个训练示例可用时,分类精度提高了6点,在具有挑战性的ImageNet low-shot 分类基准上产生了最先进的性能。
狼啸风云
2021/06/10
8270
Low-Shot Learning from Imaginary Data
INT8量化训练
【导读】本文聊了两篇做INT8量化训练的文章,量化训练说的与quantization-aware Training有区别,量化训练指的是在模型训练的前向传播和后向传播都有INT8量化。两篇文章都是基于对梯度构建分析方程求解得到解决量化训练会引起的训练崩溃和精度损失严重的情况。
LoBob
2021/06/06
1.3K0
INT8量化训练
卡尔曼滤波
$$ \begin{array}{c} P\left(\boldsymbol{x}{k},z_k \mid \boldsymbol{x}{0}, \boldsymbol{u}{1: k}, \boldsymbol{z}{1: k-1}\right) =P\left(\boldsymbol{x}{k} \mid \boldsymbol{x}{0}, \boldsymbol{u}{1: k}, \boldsymbol{z}{1: k}\right)·P(z_k)\ = P\left(\boldsymbol{z}{k} \mid \boldsymbol{x}{k}\right) P\left(\boldsymbol{x}{k} \mid \boldsymbol{x}{0}, \boldsymbol{u}{1: k}, \boldsymbol{z}{1: k-1}\right) \end{array} $$
为为为什么
2023/02/21
6080
卡尔曼滤波
相关推荐
概率论基础 - 11 - 高斯分布 / 正态分布
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验