julia - 在 Julia 中导航自动微分生态系统
问题描述
Julia 有一个有点庞大的 AD 生态系统,据我所知,现在可能有十几个不同的包跨越,正向模式(ForwardDiff.jl,ForwardDiff2.jl ),反向模式(ReverseDiff.jl,Nabla 。 jl,AutoGrad.jl)和源到源(Zygote.jl,Yota.jl,Enzyme.jl,大概还有即将推出的 Diffractor.jl )在编译管道的几个不同步骤,以及更奇特的事情像NiLang.jl。
在这些包之间,对不同语言结构(控制流、变异等)的支持是什么?对于如何为给定任务选择给定 AD 是否有任何经验法则?我相信在某个时候 Julia Slack 上有一个比较表,但我似乎在相关的讨论线程或其他可能的地方(1、2)中找不到类似的东西。
解决方案
我也很想听听对此的知情回答。更多可能感兴趣的链接。
Diffractor 现在有一个Github repo,其中列出了实施计划。在阅读了那里的文字后,我认为在 Diffractor 准备好生产之前需要长期的实施工作。另一方面,有一种感觉,Zygote 在等待 Diffractor 时可能处于“维护模式”。至少从远处看,情况似乎有些尴尬。好消息是ChainRules.jl生态系统似乎可以轻松地在 autodiff 系统之间进行交换。
截至 2021 年 9 月,Yota似乎正在迅速发展。0.5 版本带来了对 ChainRules 的支持,这似乎解锁了它以供生产使用。在这个发布线程中有很多有趣的讨论。通过阅读这些线程,我的理解是,与 Zygote 相比,Yota 的范围更加有限(例如,不支持通过变异的自动差异)。这种有限的范围具有打开优化机会的优势,例如预分配和内核融合,这在更通用的 autodiff 系统中可能是不可能的。因此,Yota 可能更适合填补 PyTorch 类型建模等领域。
推荐阅读
- c - GtkAlignment 一次只能包含一个小部件
- hadoop - Hadoop - 未能指定服务器的 Kerberos 主体名称
- php - 如何将多个数组添加到单个数组中
- c# - 无法使用 Selenium WebDriver 自动登录到 Azure Active Directory
- web-component - 自定义元素 v1 功能检测:针对不支持的浏览器的消息
- java - JNA:在编译的 jar 中找不到指定的模块
- oauth-2.0 - 在 OAuth2.0 中,客户端凭据应该作为 post 参数还是作为传输标头发送?
- types - 类型错误 F#“类型“int”不匹配......”
- google-sheets - 使用涉及月份的绝对引用的 Google 表格选择查询()
- java - Java Spring JSON 解析错误:无法从 START_ARRAY 令牌中反序列化实例