可微分且加速的球面调和变换

原文:towardsdatascience.com/differentiable-and-accelerated-spherical-harmonic-transforms-c269393d08f1?source=collection_archive---------12-----------------------#2024-03-14

在 JAX 和 PyTorch 中

https://jasonmcewen.medium.com/?source=post_page---byline--c269393d08f1--------------------------------https://towardsdatascience.com/?source=post_page---byline--c269393d08f1-------------------------------- Jason McEwen

·发表于Towards Data Science ·阅读时间 7 分钟·2024 年 3 月 14 日

许多科学和工程领域都涉及定义在球面上的数据。对这些数据的建模和分析通常需要傅里叶变换的球面对应物——球面调和变换。我们简要概述了球面调和变换,并提出了一种新型的可微分算法,旨在加速 GPU 运算[1]。该算法已在最近发布的 S2FFT Python 包中实现,支持 JAX 和 PyTorch。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e7c243f31089774071add693cce6378.png

图片由Szilvia Basso提供,来源于Unsplash

我们越来越多地关注分析位于球面上的数据。应用领域的多样性令人瞩目,涵盖从量子化学、生物医学成像、气候物理学和地球物理学,到更广阔的宇宙。

在物理科学中,尤其是在大气科学、地球物理建模和天体物理学中,球面数据是最常见的。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ddf5911d3de49554421ad6bc18a1cecf.png

球面数据中最广为人知的案例,如地球(左)和天文观测的艺术印象(右)。[地球图片来源于 维基百科;天体物理学图像来源于 维基百科。]

这些问题天生具有球面性质,因为观察是在球面上的每一点进行的:地球表面用于地球物理学,天空用于天体物理学。其他例子来自于计算机图形学和视觉应用,其中 360°全景摄像头可以捕捉你周围环境的每一个方向。

在许多情况下,问题的球面性质是比较容易看出的;然而,这并非总是如此。或许令人惊讶的是,球面数据在生物学领域中经常出现,尽管球面特性往往不太显而易见!由于我们在生物学研究中通常关注局部方向,例如水在大脑中的扩散方向,因此我们会遇到球面数据。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e0dac82e7963d830f7a0aee8ffcf6c7c.png

人类大脑神经连接的扩散张量成像。每个体素中的神经元可以自由地朝任何方向移动,因此问题本质上是球面的。[动画由Alfred Anwander制作,CC-BY 许可。]

鉴于此类数据的普遍存在,许多球面分析技术应运而生,频率分析常常能为数据提供有价值的见解,通常有助于提供统计摘要或有效的表示形式,用于进一步的分析或建模。最近,几何深度学习技术在复杂领域的数据分析中已被证明非常有效,尤其是在分子建模和蛋白质相互作用等高度复杂的问题中(请参阅我们之前关于几何深度学习简介的文章)。

傅里叶遇见勒让德

因此,我们有球面数据以及多种分析球面数据的技术,但我们需要数学工具来进行分析。具体来说,我们需要知道如何高效地将球面数据分解成频率。

傅里叶变换提供了一种频率分解,常用于计算数据中的统计相关性。许多物理系统也可以在频率空间中更直接地描述,因为每个频率可能独立演变。

要将标准傅里叶变换扩展到球面,我们需要两位 17 世纪法国数学家的共同努力:约瑟夫·傅里叶和阿德里安-玛丽·勒让德。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e6febed8df967a8920340d59a729ddb3.png

约瑟夫·傅里叶(左)和阿德里安-玛丽·勒让德(右)。不幸的是,勒让德的漫画是唯一已知的他的形象。[傅里叶图像来源于 维基百科。勒让德图像来源于 维基百科。]

首先,让我们考虑如何将欧几里得数据分解成不同的频率。这种数据变换最初由约瑟夫·傅里叶推导出来,公式如下:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8f4bec303a92c421588d95ccd18b3c39.png

这种方法几乎无处不在,且成为本科物理课程中的基础!它通过将我们的数据 f(x) 投影到一组三角函数上,称为 基函数。在球面上也可以做到类似的事情,但基函数现在由球面调和函数 Yₗₘ 给出:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/141c7fe048f6d114981acce3a02afecf.png

(θ, ϕ) 是通常的球面坐标。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3f74cf4e9478035b41c9cd47006913c1.png

球面调和基函数(实部)。[来源自 维基百科.]

球面调和函数(如上图所示)可以进一步分解为指数和勒让德多项式的乘积——按照阿德里安-玛丽·勒让德的方式——如

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8c018bd30e66612955ad031cd008a6b9.png

因此,球面调和变换可以写成先进行傅里叶变换,然后是伴随的勒让德变换。真正的难点在于评估变换中的勒让德部分:这取决于所选方法,它要么计算开销大,要么占用大量内存。

可微性的重要性

可微编程的兴起开辟了许多新的分析类型。特别是,许多应用需要可微的球面变换。

球面上的机器学习模型需要可微变换,以便模型可以通过基于梯度的优化算法进行训练, 通过反向传播。

新兴的物理增强型机器学习方法 [7] 针对混合数据驱动和基于模型的方法 [8] 也需要可微的物理模型,而在许多情况下,这些模型本身就需要可微的球面变换。

考虑到这一点,显然,对于现代应用,球面调和变换的高效算法是必要的,但仅有这点是不够的。可微性是关键。

一个名为 S2FFT 的软件包

这些都很好,但如何高效地评估球面调和变换呢?已经开发出了多种算法,并有一些出色的软件包。然而,现代应用需要一种可微的、能够在硬件加速器(如 GPU)上运行并且计算可扩展的算法。

通过从头开始重新设计核心算法(在我们相应的论文 [1] 中有详细描述),我们最近开发了一个名为 S2FFT 的 Python 包,应该能够满足需求。

S2FFT 是用 Google 开发的可微编程语言 JAX 实现的,并且还包括一个 PyTorch 前端。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1d5e836033551ce7e77b706564bc752c.png

S2FFT 是一个实现可微分和加速的球面调和变换的 Python 包,支持 JAX 和 PyTorch 接口。[图像由作者创建。]

S2FFT 提供了两种操作模式:预计算关联的勒让德函数,然后在运行时访问它们;或在变换过程中即时计算它们。预计算方法几乎是最快的,但存储所有勒让德函数值所需的内存与分辨率的立方成比例,这可能是一个问题!我们提供的第二种方法是递归地在变换过程中即时计算勒让德项,因此可以扩展到非常高的分辨率。

此外,S2FFT 还支持混合自动和手动微分方法,以便高效地计算梯度。

该软件包旨在支持球面上多种不同的采样方案。在发布时,支持等角度(McEwen & Wiaux [9],Driscoll & Healy [10])、高斯-勒让德和 HEALPix [11] 采样方案,未来也可以轻松添加其他方案。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5ff8eb88b0cdba3b35cfad460f1af674.png

支持球面上不同采样方案的 S2FFT。 [原始图由作者创建。]

S2FFT 包可以在 PyPi 上找到,因此任何人都可以通过运行以下命令直接安装:

pip install s2fft

或者通过运行以下命令来启用 PyTorch 支持:

pip install "s2fft[torch]"

从这里开始,可以简单地调用顶级变换:

import s2fft

# Compute forward spherical harmonic transform
flm = s2fft.forward_jax(f, L) 

# Compute inverse spherical harmonic transform
f = s2fft.inverse_jax(flm, L) 

这些功能可以直接使用并作为层集成到现有模型中,支持 JAX 和 PyTorch,完全支持前向和反向模式的微分。

未来展望

随着研究人员对科学应用中的可微编程越来越感兴趣,迫切需要现代软件包来实现科学通常依赖的基础数学方法,如球面调和变换。

我们希望 S2FFT 在未来几年能派上大用场,并且我们非常期待看到人们会用它做些什么!

参考文献

[1] Price & McEwen, 可微分和加速的球面调和和维格纳变换arxiv:2311.14670(2023)。

[2] Bronstein, Bruna, Cohen, Velickovic, 几何深度学习:网格、群体、图形、测地线和规范arXix:2104.13478(2021)。

[3] Ocampo, Price & McEwen, 通过离散-连续(DISCO)卷积实现可扩展和等变的球面卷积神经网络ICLR(2023)。

[4] Cobb, Wallis, Mavor-Parker, Marignier, Price, d’Avezac, McEwen, 高效的广义球面卷积神经网络ICLR(2021)。

[5] Cohen, Geiger, Koehler, Welling,球面卷积神经网络(Spherical CNNs)ICLR (2018)。

[6] Jumper 等,利用 AlphaFold 进行高度准确的蛋白质结构预测Nature (2021)。

[7] Karniadakis 等,物理启发的机器学习Nature Reviews Physics (2021)。

[8] Campagne 等,Jax-cosmo:一个端到端可微分的、GPU 加速的宇宙学库arXiv:2302.05163 (2023)。

[9] McEwen & Wiaux,球面上的一种新型采样定理IEEE TSP (2012)。

[10] Driscoll & Healy, 计算球面上的傅里叶变换与卷积AAM (1994)。

[11] Gorski 等,HEALPix:一种高分辨率离散化框架,以及球面上数据的快速分析ApJ (2005)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值