normalizing-flows
normalizing-flows 是一款基于 PyTorch 的高效开源库,专注于实现离散归一化流(Normalizing Flows)模型。在生成式人工智能领域,许多任务需要精确计算数据的概率密度或从复杂分布中高效采样,这正是归一化流的核心优势。然而,手动实现这些可逆变换链条往往繁琐且容易出错,normalizing-flows 通过封装多种主流架构解决了这一痛点。
库中内置了包括 Glow、Real NVP、Neural Spline Flows 在内的丰富模型架构,用户只需少量代码即可搭建自定义流程。它不仅提供了详尽的文档和单元测试,还附带了多个 Jupyter Notebook 示例,如 CIFAR-10 图像生成和二维分布建模,方便用户在 Google Colab 上快速上手体验。
这款库非常适合深度学习研究人员、算法工程师以及对概率建模感兴趣的开发者。无论你是想复现经典论文中的生成模型,还是探索新的流形学习应用,normalizing-flows 都能提供稳定可靠的底层支持,助你专注于模型创新而非重复造轮子。
使用场景
某金融科技公司数据团队面临欺诈样本稀缺问题,急需生成高质量合成数据来增强异常检测模型的泛化能力。
没有 normalizing-flows 时
- 传统 GAN 模型难以保证生成数据的概率分布稳定性,容易出现模式坍塌导致样本单一。
- 手动推导复杂分布的似然函数计算量巨大,开发周期长且极易在数学公式上出错。
- 缺乏现成架构支持,每次尝试新的流形结构都需要从零编写底层反向传播代码。
- 生成的样本多样性不足,无法有效覆盖真实欺诈行为中那些罕见的边缘情况。
使用 normalizing-flows 后
- normalizing-flows 内置多种成熟架构(如 Glow、Real NVP),直接调用即可实现稳定训练而无需重复造轮子。
- 自动提供可逆变换的对数似然计算,无需手动推导复杂的雅可比行列式,大幅减少调试时间。
- 模块化设计允许快速替换耦合层与激活函数,灵活适配不同维度的金融数据特征空间。
- 能够精确建模高维复杂分布,生成的合成数据在统计特性上与真实欺诈样本高度一致,显著提升模型鲁棒性。
通过降低概率密度建模门槛,normalizing-flows 显著提升了合成数据的质量与算法研发效率。
运行环境要求
- 未说明
非必需,需确保 PyTorch 正确配置 GPU 及 CUDA 环境
未说明

快速开始
normflows: 一个基于 PyTorch 的归一化流(Normalizing Flows)包
normflows 是一个离散归一化流(discrete normalizing flows)的 PyTorch 实现。实现了许多流行的流架构,详见 下方列表。该包可以通过 pip 轻松安装。基本用法在 此处 描述,同时也提供 完整文档。关于本包的更详细描述见我们的 配套论文。
在 examples 文件夹 中提供了几个示例用例,包括 Glow、VAE 和 Residual Flow。此外,两个简单应用在 示例部分 中被突出展示。你可以使用下方的链接自己在 Google Colab 中运行它们,以熟悉 normflows。
| Link | Description |
|---|---|
| Real NVP 应用于双模态二维目标分布 | |
| 使用神经样条流(Neural Spline Flow)对圆柱面上的分布进行建模 | |
| 使用 Glow 建模和生成 CIFAR-10 图像 |
Implemented Flows
| Architecture | Reference |
|---|---|
| Planar Flow (平面流) | Rezende & Mohamed, 2015 |
| Radial Flow (径向流) | Rezende & Mohamed, 2015 |
| NICE | Dinh et al., 2014 |
| Real NVP | Dinh et al., 2017 |
| Glow | Kingma et al., 2018 |
| Masked Autoregressive Flow (掩码自回归流) | Papamakarios et al., 2017 |
| Neural Spline Flow (神经样条流) | Durkan et al., 2019 |
| Circular Neural Spline Flow (圆形神经样条流) | Rezende et al., 2020 |
| Residual Flow (残差流) | Chen et al., 2019 |
| Stochastic Normalizing Flow (随机归一化流) | Wu et al., 2020 |
注意,也支持具有圆形和非圆形坐标的神经样条流(Neural Spline Flows)。
Installation
该包的最新版可通过 pip 安装
pip install normflows
至少需要 Python 3.7。如果你打算使用 GPU,请按照 PyTorch 网站 上的说明确保 PyTorch 配置正确。
要运行示例笔记本,请先克隆仓库
git clone https://github.com/VincentStimper/normalizing-flows.git
然后安装依赖项。
pip install -r requirements_examples.txt
使用
一个归一化流(Normalizing Flow)由定义在
nf.distributions.base
的基础分布和 nf.flows 中给出的流列表组成。
假设我们的目标是二维分布。我们选择一个对角高斯基础分布,这是最常见的选择。我们的流将是一个
Real NVP 模型,因此我们需要
定义一个神经网络来计算仿射耦合映射的参数。一个维度用于计算另一个维度的缩放和平移参数。在每个耦合层之后,我们交换它们的角色。
import normflows as nf
# Define 2D Gaussian base distribution
base = nf.distributions.base.DiagGaussian(2)
# Define list of flows
num_layers = 32
flows = []
for i in range(num_layers):
# Neural network with two hidden layers having 64 units each
# Last layer is initialized by zeros making training more stable
param_map = nf.nets.MLP([1, 64, 64, 2], init_zeros=True)
# Add flow layer
flows.append(nf.flows.AffineCouplingBlock(param_map))
# Swap dimensions
flows.append(nf.flows.Permute(2, mode='swap'))
设置完成后,我们可以定义一个
nf.NormalizingFlow
模型。如果目标密度可用,可以将其添加到模型中以便在训练期间使用。示例目标分布在
nf.distributions.target 中给出。
# If the target density is not given
model = nf.NormalizingFlow(base, flows)
# If the target density is given
target = nf.distributions.target.TwoMoons()
model = nf.NormalizingFlow(base, flows, target)
可以使用模型的这些方法计算损失并进行最小化。
# When doing maximum likelihood learning, i.e. minimizing the forward KLD
# with no target distribution given
loss = model.forward_kld(x)
# When minimizing the reverse KLD based on the given target distribution
loss = model.reverse_kld(num_samples=512)
# Optimization as usual
loss.backward()
optimizer.step()
示例
我们在 examples
目录下提供了几个关于如何使用该包的说明性示例。其中包括
Glow、
变分自编码器(VAE) 的实现,以及
残差流(Residual Flow)。
更高级的实验可以在 重采样基础分布的仓库
中列出的脚本中进行,请参阅其 experiments
文件夹。
下面,我们考虑两个简单的二维示例。
Real NVP 应用于二维双峰目标分布
在 这个笔记本 中, 可以直接在 Colab 中打开, 我们将具有两个半月形模式的二维分布作为目标。我们用 Real NVP 模型对其进行近似,并获得以下结果。

请注意,两个模式之间可能存在连接密度细丝,这是由于归一化流的架构限制所致,特别是在 Real NVP 中尤为明显。你可以在 这篇论文 中找到更多关于它的信息。
使用神经样条流(Neural Spline Flow)对圆柱面上的分布进行建模
在 另一个示例 中, 该示例也可在 Colab 上获得, 我们将神经样条流(Neural Spline Flow)模型应用于圆柱上定义的分布。生成的密度如下图所示。

本示例包含在与本仓库配套的 论文 中。
支持
如果您遇到问题,请阅读 包文档 并查看上面的 示例部分。也欢迎您在 GitHub 上创建问题 以获取帮助。请注意,浏览现有的 开放 和 已关闭 问题是值得的,这些问题可能解决了您面临的问题。
贡献
如果您发现错误或有功能请求,请在 GitHub 上提交问题。
欢迎您通过修复错误或添加功能来为包做出贡献。如果您想贡献,请为您添加或修改的代码添加测试,并通过运行 pytest 确保其成功通过。
这可以通过在您的本地仓库版本中简单地执行以下命令来完成:
pytest
确保您的代码文档完善,我们也鼓励对现有文档做出贡献。完成编码和测试后,请在 GitHub 上创建拉取请求。
使用情况
该包已被应用于多项研究论文中。其中部分列举如下。
Andrew Campbell, Wenlong Chen, Vincent Stimper, José Miguel Hernández-Lobato, and Yichuan Zhang. 一种基于梯度的哈密顿蒙特卡洛超参数优化策略. 发表于第 38 届国际机器学习大会论文集,pp. 1238–1248. PMLR, 2021.
Vincent Stimper, Bernhard Schölkopf, and José Miguel Hernández-Lobato. 重采样归一化流的基分布. 发表于第 25 届人工智能与统计国际会议论文集,volume 151, pp. 4915–4936, 2022.
Laurence I. Midgley, Vincent Stimper, Gregor N. C. Simm, Bernhard Schölkopf, and José Miguel Hernández-Lobato. 流退火重要性采样 Bootstrap. 第十一届表示学习国际会议,2023.
Arnau Quera-Bofarull, Joel Dyer, Anisoara Calinescu, J. Doyne Farmer, and Michael Wooldridge. BlackBIRDS:可微模拟器的黑盒推理. 开源软件期刊,8(89), 5776, 2023.
Utkarsh Singhal, Carlos Esteves, Ameesh Makadia, and Stella X. Yu. 学习变换以实现可泛化的实例级不变性. IEEE/CVF 国际计算机视觉会议论文集 (ICCV),pp. 6211-6221, 2023.
Ba-Hien Tran, Giulio Franzese, Pietro Michiardi, and Maurizio Filippone. 一行代码的数据平滑改进基于似然的生成模型优化. 神经信息处理系统进展第 36 卷,pp. 6545–6567, 2023.
此外,boltzgen 包也是基于 normflows 构建的。
引用
如果您使用了 normflows,请按照以下方式引用相关论文。
Stimper 等人,(2023)。normflows:一个用于归一化流(Normalizing Flows)的 PyTorch 包。开源软件期刊,8(86), 5361, https://doi.org/10.21105/joss.05361
BibTeX
@article{Stimper2023,
author = {Vincent Stimper and David Liu and Andrew Campbell and Vincent Berenz and Lukas Ryll and Bernhard Schölkopf and José Miguel Hernández-Lobato},
title = {normflows: A PyTorch Package for Normalizing Flows},
journal = {Journal of Open Source Software},
volume = {8},
number = {86},
pages = {5361},
publisher = {The Open Journal},
doi = {10.21105/joss.05361},
url = {https://doi.org/10.21105/joss.05361},
year = {2023}
}
版本历史
v1.7.32023/11/16v1.7.22023/07/23v1.7.12023/06/26v1.7.02023/06/12v1.6.22023/04/28v1.6.12023/02/24v1.62023/02/18v1.52022/12/21v1.42022/07/26v1.22022/04/05v1.12022/02/06v1.02021/11/25常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
