https://github.com/SciML/DifferentialEquations.jl
与MATLAB, Mathematica等比较
http://www.stochasticlifestyle.com/wp-content/uploads/2019/08/de_solver_software_comparsion.pdf
- SciML 提供什么
我们提供一流的工具来求解微分方程
我们提供用于推导和拟合科学模型的工具
我们提供高级域特定建模工具,使科学建模更易于访问
我们提供科学机器学习中最新算法的高级实现
我们为所有常见科学编程语言的用户提供使用我们工具的能力
我们提供用于研究科学机器学习方法的工具
- 我们的目标是什么
我们构建的一切都与自动微分兼容
性能被视为优先事项,性能问题被视为错误
我们的软件包使用科学模拟和机器学习工具进行了常规和稳健的测试
我们紧跟计算硬件的进步,以确保与最新的高性能计算工具兼容。
- 我们的下一步
SciML 科学机器学习开源软件组织路线图
计算科学发现正处于一个有趣的时刻。虽然我们拥有许多不同科学现象的机械模型,以及从实验中产生的大量数据,但我们的计算能力无法跟上。我们的问题对于现实模拟来说太大了。我们的问题是多尺度的而且太僵硬了。我们的问题需要繁琐的工作,比如计算梯度和让代码在 GPU 和超级计算机上运行。我们的下一步是科学和机器学习的结合,它将机械模型与基于数据的推理相结合,呈现为一组统一的抽象和高性能实现。我们将其称为科学机器学习。
科学机器学习,缩写为 SciML,作为传统科学机械建模(微分方程)与深度学习等机器学习方法的有趣结合,在学术界掀起了风暴。虽然传统的深度学习方法在刚度、可解释性和强制物理约束等科学问题上遇到了困难,但这种与数值分析和微分方程的结合已经发展成为一个研究领域,其中包含克服这些问题的新方法、架构和算法,同时添加现代深度学习的数据驱动的自动学习特性。已经发现了许多成功,使用物理信息神经网络、通用微分方程等工具,用于高维 PDE 的深度 BSDE 求解器,以及展示深度学习如何极大地改进科学建模实践的神经代理。与此同时,研究人员很快发现,我们的训练技术需要修改,才能在困难的科学模型上工作。例如,对伴随的 ODE 进行反转或通过求解器依赖反向传播的原始方法对于神经 ODE 而言在数值上不稳定,并且为机器学习而制造的传统优化器,如随机梯度下降和 ADAM 难以处理病态 Hessians物理信息神经网络. 将需要新的软件来适应该领域中出现的独特的数值困难,并促进科学模拟器和科学机器学习训练循环之间的连接。
SciML 是一个开源软件组织,用于开发和维护用于科学机器学习的功能丰富的高性能工具集。这包括从微分方程求解器到科学模拟器和用于自动发现科学模型的工具的所有工具。我想用这篇文章做的是通过解释一些事情来介绍这个组织:
SciML 提供的软件
我们提供一流的工具来求解微分方程
我们将继续以DifferentialEquations.jl作为组织的核心,以支持对科学模型中出现的微分方程进行高性能求解。这意味着我们计划继续在以下方面进行研究和开发:
- 离散方程(函数映射、离散随机(Gillespie/Markov)模拟)
- 常微分方程 (ODE)
- 拆分和分区 ODE(辛积分器,IMEX 方法)
- 随机常微分方程(SODE 或 SDE)
- 随机微分方程(RODE 或 RDE)
- 微分代数方程 (DAE)
- 延迟微分方程 (DDE)
- 混合离散和连续方程(混合方程、跳跃扩散)
- (随机)偏微分方程((S)PDE)(有限差分法和有限元法)
随着继续向新领域推进,如随机延迟微分方程、分数微分方程等。然而,最优控制、(贝叶斯)参数估计和自动模型发现都需要所有可能的性能,因此我们将继续添加功能来提高求解大型和小型微分方程模型的性能。这包括以下功能:
- 通过 CUDAnative.jl 和 CuArrays.jl 进行 GPU 加速
- 使用SparsityDetection.jl进行自动稀疏检测
- 使用SparseDiffTools.jl的自动雅可比着色,允许快速解决稀疏或结构化(三对角、带状、块状等)雅可比的问题
- 进度表与 Juno IDE 集成,以估计解决问题的时间
- 集成轨迹的自动分布式、多线程和 GPU 并行性
- 用于快速梯度计算的前向和伴随局部灵敏度分析
- 微分方程解的内置插值
- 常用 C/Fortran 方法的包装器,如日晷和 Hairer 的 radau
- BigFloats 和 Arbfloats 的任意精度
- 任意数组类型,允许求解矩阵和分布式数组上的微分方程
我们计划继续研究这些主题,并确保我们的软件是一流的。我们计划继续改进DifferentialEquations.jl 的性能,直到它在我们拥有的每个基准测试中都达到同类最佳,然后我们计划添加更多基准以发现更多行为并同时处理这些行为。这是一个当前的基准测试,展示了在 20 方程刚性 ODE 基准测试中,本机 DifferentialEquations.jl 方法比经典 Fortran 方法(如 LSODA)的性能高出 5 倍:
我们提供用于推导和拟合科学模型的工具
很少有人认为他们的模型是完美的。因此,我们组织的很大一部分重点是帮助科学建模者推导出方程和拟合模型。这包括以下工具:
- 最大似然和贝叶斯参数估计
- 快速梯度的前向和伴随局部灵敏度分析
- 全局敏感性分析
- 建立模型的替代品
- 不确定性量化
我们的一些较新的工具(例如DataDrivenDiffEq.jl)甚至可以接收时间序列数据并为最佳拟合模型生成 LaTeX 代码(有关最近的演示,请参见COVID-19 流行病模型的拟合)。
我们注意到,虽然这些工具将继续通过微分方程模型进行测试,但其中许多工具通常适用于科学模型。例如,虽然我们的全局灵敏度分析工具已记录在微分方程求解器中,但这些方法实际上适用于任何函数f(p)
:
在 SciML 保护伞下进行重组将使用户更容易发现和应用我们在微分方程上下文之外的全局敏感性分析方法,例如神经网络。
我们提供高级域特定建模工具,使科学建模更易于访问
微分方程几乎出现在每个科学领域,但大多数科学领域都有自己的专业习语和术语。物理学家、生物学家、化学家等应该能够拿起我们的工具并利用高性能的科学机器学习方法,而无需了解每个组件并使用对其领域有意义的抽象。为了实现这一点,我们提供了高级域特定建模工具作为构建和生成模型的前端。
DiffEqBiological.jl是一个主要示例,它根据化学反应的描述生成高性能模拟。例如,以下使用 ODE 和 Gillespie 模型求解 Michaelis-Menton 模型:
这构建了一个特定的形式,然后可以使用优化的方法,例如DirectCR
并实现比经典 Gillespie SSA 方法好一个数量级的性能:
此外,我们拥有基于物理的工具并支持外部库,例如:
- 用于 N 体系统的NBodySimulator.jl(分子动力学、天体物理学)
- 用于机器人的RigidBodySim.jl
- QuantumOptics.jl用于量子现象
- DynamicalSystems.jl用于混沌动力学
我们支持基于我们的软件构建的商业工具,例如用于制药建模和仿真的Pumas软件,该软件已在整个行业中采用。我们可以使用MultiScaleArrays.jl等工具轻松生成多尺度系统模型
构建像ModelingToolkit.jl这样的编译器,提供模型代码的自动分析和优化。通过向 ModelingToolkit 添加自动代码并行化和 BLT 转换,DiffEqBiological、Pumas、ParameterizedFunctions.jl等的用户都将看到他们的代码自动变得更加高效。
我们提供科学机器学习中最新算法的高级实现
将计算科学的新方法带给应用领域的科学家的转化步骤将允许下一代探索发生。我们提供如下库:
- DiffEqFlux.jl用于神经和通用微分方程
- DataDrivenDiffEq.jl用于使用动态模式分解 (DMD) 和 SInDy 类型方法自动生成方程
- ReservoirComputing.jl用于回声状态网络和混沌系统的预测
- NeuralPDE.jl用于物理信息神经网络 (PINN) 和 100 维 PDE 的深度 BSDE 求解器
我们将继续扩展我们产品的这一部分,构建工具,使用神经网络从符号描述中自动求解偏微分方程,并生成无网格离散器。
我们为所有常见科学编程语言的用户提供使用我们工具的能力
虽然我们工具的主要来源集中在Julia 编程语言中,但我们将 Julia 视为一种“库语言”,如 C 或 Fortran,用于开发可在整个社区中广泛使用的科学库。我们之前已经通过diffeqpy和diffeqr等工具分别使用 Python 和 R 中的 DifferentialEquations.jl 演示了这种功能,我们计划继续沿着这些思路继续,以允许尽可能多的工具可以从尽可能多的语言中访问。虽然总会有一些优化只能在从 Julia 编程语言中使用时才会发生,但像ModelingToolkit.jl这样的 DSL 构建器将用于进一步扩展我们包装器的功能和性能。
这是一个使用 Python 中的高阶自适应方法求解随机微分方程的示例:
我们提供用于研究科学机器学习方法的工具
最后但同样重要的是,我们支持科学机器学习从业者的研究活动。DiffEqDevTools.jl和RootedTrees.jl等工具使创建和基准测试新方法变得容易,并加快了数值研究人员的出版过程。我们对FEniCS.jl和SciPyDiffEq.jl等外部工具的包装器使执行跨平台比较变得容易。我们的堆栈完全在 Julia 中编写,这意味着每个部分都可以动态调整,从而可以轻松地将哈密顿积分器与神经网络混合和匹配,以发现新的科学应用。我们的问题和聊天频道不仅可以调试现有软件,还可以讨论新方法并帮助创建高性能实现。
此外,我们支持许多学生活动,将新的研究人员带入社区。我们软件包的许多维护者,如 Yingbo Ma、Vaibhav Dixit、Kanav Gupta、Kirill Zubov 等,都是从过去的 Google Summer of Code和其他Julia Seasons of Contributions开始的 50 多名学生开发人员之一。
SciML 的目标
当您阅读将神经网络与微分方程混合的论文(我们最近的论文,可作为预印本)或设计满足 Navier-Stokes 建模不可压缩性的新神经网络时,您应该能够上网并找到可调整的高质量,以及这些方法的高度维护的包实现,可以开始用于您的科学研究,或者用作进一步推进科学机器学习方法的起点。出于这个原因,SciML OSS 组织的目标是成为开发强大的跨语言科学机器学习软件的中心。为了实现这一目标,我们作为一个组织致力于以下原则:
我们构建的一切都与自动微分兼容
将 SciML 组中的任意一段代码放入某个机器学习库(如Flux )的训练循环中自然会起作用。这意味着我们计划强制执行与Zygote等语言范围内可微分编程工具兼容的编码样式,或通过衍生规则包ChainRules.jl提供预定义的前向/伴随规则。
如以下动画所示,您可以使用我们的随机微分方程求解器,并通过简单地将兼容的软件包拼凑在一起来训练电路来控制求解。
性能被视为优先事项,性能问题被视为错误
无话可问。如果您能找到其他性能更好的东西,我们认为这是一个问题,应该修复它。科学机器学习规模化需要高性能,因此我们非常重视性能。
我们的软件包使用科学模拟和机器学习工具进行了常规和稳健的测试
这意味着我们将继续开发DiffEqFlux.jl之类的工具,它支持DifferentialEquations.jl微分方程求解器和Flux深度学习库之间的连接。另一个示例包括我们的代理建模库 Surrogates.jl,该库通常使用 DifferentialEquations.jl 和机器学习 AD 工具(如 Zygote.jl)进行测试,这意味着您可以确定我们的代理建模工具可以在微分方程上进行训练然后使用在深度学习堆栈内部。正是这种互连性将允许下一代 SciML 方法以影响“大科学”和工业用途的方式进行生产。
我们紧跟计算硬件的进步,以确保与最新的高性能计算工具兼容。
今天,英特尔 CPU 和 NVIDIA GPU 是主要平台,但情况并非总是如此。即将推出的顶级超级计算机之一将完全基于 AMD,配备 AMD CPU 和 AMD GPU。此外,英特尔 GPU计划成为未来超级计算机的组件。我们致力于维护适用于所有主要平台的 SciML 工具链,并随着新技术的发布更新我们的编译器后端。
我们的下一步
为了进一步促进我们对 SciML 的关注,我们正在研究的后续步骤如下:
- 我们将继续在许多不同的方向推进微分方程求解,例如增加对随机延迟微分方程的支持和改进我们的 DAE 方法。
- 我们计划创建一个新的文档设置。我们计划将一些 SciML 工具拆分为它们自己的完整文档,而不是将所有内容都包含在DifferentialEquations.jl 文档中。我们已经为Surrogates.jl完成了这项工作。列表中的下一个是DiffEqFlux.jl,通过查看 README 应该清楚它需要自己的完整文档。之后,我们计划完整记录NeuralPDE.jl及其物理信息神经网络 (PINN) 功能、DataDrivenDiffEq.jl等。因为它不需要微分方程,我们计划拆分全局灵敏度分析的文档以更好地促进其更广泛的用途。
- 我们计划继续改进ModelingToolkit生态系统,利用PDE 通用规范的符号性质。然后,这将用作 Auto-ML 的后端,作为一种自动化的方式来解决任何具有物理信息神经网络的 PDE。
- 我们计划继续对所有内容进行基准测试,并改进我们的设置以包括对基准的自动更新,以实现更好的性能回归跟踪。我们计划继续增加我们的基准,包括 MPI 和 GPU 的基准。
- 我们计划改进 Python 和 R 端工具的安装,使其自动下载预编译的 Julia 二进制文件,以便用户只需使用 CRAN 或 pip 安装包即可使用该工具。我们计划扩展我们的 Python 和 R 产品,以包括我们的神经网络注入软件,如 DiffEqFlux 和 NeuralPDE。
- 我们计划在径向基函数 (RBF) 代理、动态模式分解和 SInDy 类型方法以及模型降阶等数据驱动建模技术中获得特征完整性。
- 我们计划与 SciML 中的最新技术保持紧密耦合,在开发过程中实施新的物理约束神经架构、优化器等。