驯估学(下)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了驯估学(下)相关的知识,希望对你有一定的参考价值。
参考技术A 【对于最大化似然函数模型、以及似然函数在图像表示中的表示应用感兴趣的读者,请分别参阅 “驯估学(上)” 、 “驯估学(中)” 。】标准化流 是一系列生成式模型,它们将司空见惯的某些简单概率分布“转换”为更复杂的概率分布。
标准化流模型学习易处理的逆变换,以及雅可比行列式的变换。若能有效地计算这两个量,我们可以使用变量代换规则,计算变换后的分布的对数概率密度:
绝大多数标准化流程序在连续密度函数上运行(因此需要计算表示体积变化的雅可比行列式项)。不过最近有一些关于“离散流”的研究,使模型学习转换概率质量函数而不是密度函数( Tran et al. 2019 , Hoogeboom et al. 2019 )。我们在这篇博文中不讨论它们,只是说明,它们通过设计离散的基本分布,实现了双向离散变换。
除了前面提到的随机实数化之外,在训练图像数据的标准化流时,还有一些额外的技巧。
根据经验,在最大似然估计之前,将数据从[0,256]的范围缩放到单位间隔[0,1]上,有助于稳定训练,因为神经网络偏差通常在零附近。
为了防止越界问题,如果采样到基础分布的样本、通过流函数映射到区间(0,1)之外的点,我们可以通过逻辑斯蒂函数(sigmoid函数的反函数)将其重新缩放到( )。
我们可以将范围缩放和逻辑变换视为模型开始时的“预处理”流程。像对待任何其他双向映射函数一样,我们这里也必须考虑变换引起的体积变化。
这里要认识到的重要一点是,出于评估目的,像素密度函数应始终在连续区间[0,256]中计算,以便比较不同的流模型和自回归模型在同一数据中的似然值(最多可相差由于随机实数化引起的变分空隙【变分下限与真值之间的差】)。
下图显示了RGB图像的标准归一化流程,左侧是原始离散数据,右侧是基本密度函数(可以是高斯分布、逻辑分布或任何你喜欢的易处理的密度分布)。
使用分类分布对像素进行建模的一个缺点是,分类交叉熵损失不能告诉我们值为127的像素比值为0的像素、距离值为128的像素更接近。【也就是丢失了类别之间的相对关系。】对于观察到的像素值 ,分类交叉熵的梯度相对于像素值是恒定的(因为损失将类别视为无序的)。尽管交叉熵梯度非零,但它被认为“稀疏”的,因为它不提供关于当下的分布与目标分布(以像素值衡量)的距离信息。理想情况下,当预测值远离观测值时,我们希望梯度的幅度更大;而当模型接近观测值时,我们希望梯度更小。
将像素建模为分类分布的一个更严重的缺点是,如果我们选择的特征表示高达或超过256个类别,就会遇到麻烦。例如,模拟R,G和B像素联合分布(有256 ^ 3类别!)或模拟比uint8更高精度像素编码的HDR图像。当我们试图存储神经网络激活值映射到上述类别所需的投影矩阵时,我们很快就会耗尽内存。
两篇同时发表的论文 Inverse Autoregressive Flow 和 PixelCNN++ ,通过将RGB像素建模为 序数数据 的概率分布来解决这些问题,来自交叉熵损失的梯度信息可以在正确方向上推动模型,同时模型仍保留离散概率。
我们可以通过逻辑斯蒂混合模型来建模连续像素概率密度,这是一种连续分布。为了恢复离散像素值的概率质量,我们可以使用逻辑斯蒂分布的属性方便地计算它的概率积分函数,即sigmoid函数。通过计算两个逻辑斯蒂函数的差值 ,我们可以恢复介于两个整数像素值之间的总概率质量。
以这种方式表示像素的另一个好处,是提供了一次性处理更多类别的“奢侈”。这意味着PixelCNN ++可以一次性地模拟R、G和B像素通道。需要注意的是,你必须充分调整混合成分的数量(在Cifar 10上,5似乎已经足够了)。
类似于 Tran et al. 2019 在类别分布上设计离散的流函数, Hoogeboom et al. 2019 通过使用离散化的逻辑斯蒂混合似然作为基本分布,来设计序数格式的离散流。后者的方法具备两个方面的优势:既能使用标准化流,很容易地处理了求逆和采样;同时避免了求解实数化的似然目标(这可能会优化对似然函数的标准差进行估计的损失下限)。两篇论文都令人非常兴奋,我希望将来对此写更多内容!
对数似然也是评估语言建模领域中的生成式模型的常用度量。 没有排序的离散字母表的分布律构成的分类分布,是概率密度建模的最自然的选择。
起源于自然语言处理(NLP)领域的一个怪癖,语言模型的似然通常以 “困惑度” 为单位进行评估,其由下式给出: 。 困惑度的倒数的对数 ,即是平均对数似然 。 困惑度是一个直观的概念,因为逆概率是随机变量的“分支因子”,或着叫做随机变量的加权平均可选择数。 困惑度和对数似然之间的关系是如此简单,以至于一些论文( Image Transformer )将“困惑度”与对数似然互换地使用。
在这篇博文中,我们推导出最大化平均对数似然和信息压缩之间的关系。我们还提到了像素的离散似然模型和连续似然模型的几种建模选择。
一个更深层次的问题是,似然值是否是衡量/优化的正确目标。在 NIPS 2016 (现称为NeurIPS会议)上,我记得在生成式建模研讨会上曾有一翻非常激烈的争论,研究人员们辩论优化易处理的似然模型是否是一个好主意。
事实证明,优化和评估最大化似然模型是一个好主意,因为从那以后研究人员已经想出如何构建和扩展 更灵活的似然模型 ,同时保持计算的易处理性。像Glow、GPT-2、WaveNet和Image Transformer这样的模型经过最大化似然的训练,可以生成具有惊人质量的图像、音频和文本。另一方面,有人可能会争辩说,生成式建模最终目的是与实际任务相结合,提高实际应用的性能,例如提高在标记数据集上、对模型进行微调时的分类准确性。【即数据增广。】对于这一点,我的同事Niki Parmar关于图像与文本的似然模型做出以下评论:
在未来的博客文章中,我将在本教程基础上,继续讨论优化对数似然的变分下界的生成模型的评估方法(例如变分自动编码器、重要性加权自动编码器)。
非常感谢 Dustin Tran , Niki Parmar 和 Vincent Vanhoucke 审阅这篇博文的草稿。一如既往地,感谢你的阅读!
什么是算子下盘?
摘要:本文简单介绍什么是算子下盘、哪些算子会发生下盘、有哪些参数可以控制下盘、如何判断是否发生下盘、如何避免下盘。
本文分享自华为云社区《GaussDB(DWS)什么是算子下盘》,作者:Arrow0lf 。
处理性能问题时我们经常听到“下盘”这个概念,本文简单介绍什么是算子下盘、哪些算子会发生下盘、有哪些参数可以控制下盘、如何判断是否发生下盘、如何避免下盘。
1. 什么是算子下盘
论坛案例[问题求助] 官网文档中的算子落盘空间具体是什么概念,怎么配置这个值?中已经有专家做出了很清晰的答复,在此引用该答复:
任何计算都需要耗费内存空间,差别在于多少而已,对于如果耗费内存过多,会导致其他作业运行内存空间不足,导致作业不稳定,因此我们需要对查询语句的作业内存使用进行限制,保证作业运行的稳定性,以常见的排序操作为例
a) 500KB的数据进行排序,把全量数据load到内存,然后排序。 嗯,这个可以轻松搞定
b) 500MB的数据进行排序,把全量数据load到内存,然后排序。嗯,这个努把力也可以
c) 500GB的数据进行排序,把全量数据load到内存,然后排序。嗯,机器会说你是个疯子,物理内存才256GB,我不陪你玩了,我要OOM
那对于500GB的数据数据库怎么排序呢,这就需要使用外排了,除了算法之外,另外一个核心逻辑是,把需要使用的数据加载到内存中,不需要使用的数据写到磁盘上,内存中只保留有限的数据,这就是中间数据落盘的由来。当发生中间数据落盘时,我们称之为算子下盘。
2. 哪些算子会发生下盘
当前GaussDB(DWS)可下盘算子有六类(向量化及非向量化共10种):Hash(VecHashJoin),Agg(VecAgg),Sort(VecSort),Material(VecMaterial), SetOp(VecSetOp),WindowAgg(VecWindowAgg)。
3. 有哪些参数可以控制下盘
(1)work_mem:可以判断执行作业可下盘算子是否已使用内存量触发下盘点,当内存使用超过该参数后将触发算子下盘
(2)temp_file_limit:可以限制落盘算子的落盘文件大小,一般建议根据实际情况设置,防止下盘文件将磁盘空间占满,超过该值将报错退出
4. 如何判断语句是否发生了下盘
(1)通过下盘文件确认:下盘文件位于实例目录的base/pgsql_tmp目录下,下盘文件以pgsql_tmp$queryid_$pid命名,可以根据queryid确认是哪条sql发生了下盘。
(2)根据等待视图确认:等待视图中,当出现write file时,表示发生了中间结果下盘
(3)根据执行计划确认:performance中出现spill、written disk、temp file num等关键字时,说明对应的算子出现了下盘
5. 如何避免下盘
发生算子下盘时,算子运算数据将写入临时文件,带来5-10倍的性能下降,查询响应时间出现极大劣化,因此应尽可能避免下盘,可以考虑如下方法优化:
(1)减小中间结果集:发生下盘时往往是由于中间结果集过大,因此可以增加过滤条件减少中间结果集大小
(2)避免数据倾斜:数据倾斜严重时会导致单DN上数据量过大,引起单DN下盘
(3)及时analyze:当统计信息不准时,行数估算可能偏小,导致计划选择非最优,从而出现下盘
(4)单点调优:对业务sql进行单点调优
(5)适当调大work_mem参数:当中间结果集无法减少时,应根据实际情况适当调大work_mem
以上是关于驯估学(下)的主要内容,如果未能解决你的问题,请参考以下文章