Turing 是一种嵌入在 Julia 中的通用概率编程语言。Turing 允许用户使用标准 Julia 语法编写模型,并提供广泛的基于采样的推理方法来解决概率机器学习、贝叶斯统计和数据科学等领域的问题。由于 Turing 是用纯 Julia 代码实现的,因此它的编译器和推理方法适合黑客:可以轻松添加新的模型族和推理方法。
以下是潜在项目的创意列表,但欢迎您向 Turing 团队提出自己的项目建议。如果您有兴趣探索其中任何一个项目,请联系列出的项目导师或 Xianda Sun(xs307[at]cam.ac.uk)。您可以在 此处 找到他们的联系信息。
导师:Seth Axen、Tor Fjelde、Kai Xu、Hong Ge
项目难度:中等
项目时长:175 小时或 350 小时
描述:posteriordb 是一个包含 120 个不同贝叶斯模型的数据库,这些模型在 Stan 中实现(有一个 PyMC 示例模型),并附有参考后验抽样、数据和元数据。为了进行性能比较并展示 Turing 的最佳实践,在 Turing 中实现这些模型很有用。本项目的目的是在 Turing/Julia 中实现这些模型中的很大一部分。
对于每个模型,我们考虑以下任务:正确性测试:当参考后验抽样和采样器配置在 posteriordb 中可用时,可以通过使用相同的配置对模型进行采样并将样本与参考抽样进行比较来测试实现的正确性和一致性。最佳实践:所有模型都必须检查是否与所有 Turing 支持的 AD 框架可微分。
导师:Tor Fjelde、Jaime Ruiz Zapatero、Cameron Pfiffer、David Widmann
项目难度:简单
项目时长:175 小时
描述:Turing.jl 中的大多数采样器都实现了 AbstractMCMC.jl 接口,允许用户以统一的方式与采样器进行交互。AbstractMCMC.jl 接口目前非常基础,不适合采样器之间的互操作性。
例如,将两个 MCMC 内核组合起来是完全有效的,例如使用 AdvancedMH.jl 中的 RWMH 进行一步,然后使用 AdvancedHMC.jl 中的 NUTS 进行一步。不幸的是,实现这种组合需要明确定义从 RWMH 返回的状态到从 NUTS 返回的状态之间的转换,以及从 NUTS 返回的状态到 RWMH 状态的转换。对于一个这样的采样器对来说,这通常非常容易实现,但是一旦你必须对 N 个采样器进行这种操作,突然需要完成的工作量变得难以承受。
解决这个问题的一种方法是添加一个简单的接口来与采样器的状态进行交互,例如获取状态中当前值的方法,设置状态中当前值的方法,以及可以覆盖的一组粘合方法,在这些方法中,可以共享更多信息在州之间。
作为试图朝这个方向迈出一步的一些正在进行的工作的示例是:https://github.com/TuringLang/AbstractMCMC.jl/pull/86
导师:Tor Fjelde、Tim Hargreaves、Xianda Sun、Kai Xu、Hong Ge
项目难度:困难
项目时长:175 小时或 350 小时
描述:Bijectors.jl 是一个简化在 Turing.jl 中对分布进行转换的软件包,目前缺乏完整的 GPU 兼容性。这种限制部分来自某些双射器的实现细节,也来自某些分布在 Distributions.jl 软件包中的实现方式。NormalizingFlows.jl 是 Turing.jl 生态系统中建立在 Bijectors.jl 之上的一个较新的补充,它为训练规范化流提供了用户友好的界面和实用程序函数,但共享相同的 GPU 兼容性问题。
本项目的目的是增强 Bijectors.jl 和 NormalizingFlows.jl 的 GPU 支持。
导师:Tor Fjelde、Xianda Sun、David Widmann、Hong Ge
项目难度:中等
项目时长:350 小时
描述:本项目旨在向 Bijectors.jl 和 NormalizingFlows.jl 引入一个批处理模式
,它们建立在 Bijectors.jl 之上。
简而言之,我们希望能够通过将参数“堆叠”到更高维度的数组中来允许用户同时向模型提供多个输入。
实现可以采取多种形式,作为一个关心性能和用户体验的开发人员团队,我们对不同的方法和讨论持开放态度。一种可能的方法是开发一种机制来指示代码将给定输入作为批次处理,而不是作为单个条目处理。一个初步的实现可以在 此处 找到。
导师:Kai Xu、Hong Ge
项目难度:中等
项目时长:175 小时
描述:该项目旨在开发一组全面的目标分布,用于在各种计算环境中研究和基准测试马尔可夫链蒙特卡罗 (MCMC) 采样器。这组分布将扩展和增强现有的 Julia 软件包 VecTargets.jl,该软件包目前对向量化、GPU 加速和高阶导数的支持有限。该项目的主要目标包括
确保目标分布完全支持向量化和 GPU 加速
使高阶导数(高达 3 阶)能够与目标分布无缝集成
创建一个清晰而全面的文档,概述项目的 功能和限制,包括关于向量化、GPU 加速或高阶导数不受支持的情况的明确详细信息。
调查和记录如何在 Julia 中使用不同的自动微分 (AD) 软件包来组合或利用它们,以实现高阶导数的有效和准确计算。
通过实现这些目标,该项目旨在提供一个强大的框架,可以显着有助于更有效和强大的 MCMC 采样器 的研究和开发,从而推动计算统计和机器学习领域的进步。