纸张:美丽的差异

我还有一份草稿要提交给ICFP 2009年.这个叫美丽的差异, 这篇论文是几根柱子我写过关于导数和自动微分(AD)的文章。我很高兴推导变得越来越简单。现在我将非常一般的高阶AD归结为Functor(仿真器)适用同构。

我很想得到一些阅读材料和反馈。我的页面有点超出了限制,所以我必须在提交之前进行一些修整。

摘要:

自动微分(AD)是一种精确、高效和方便的方法计算函数导数的方法。它的实现可以是即使扩展到计算所有高阶,也相当简单衍生品。高维情况也得到了解决,尽管有额外的复杂性。本文开发了一个极端情况下的高维、高阶微分一般和优雅的设置流形上的微积分并推导出从一个简单而精确的规范实现。

为了激励和发现实施,本文提出“独立于实施,AD意味着什么?”答案以以下形式出现自然性函数及其采样导数。自动区分就是从这种自然性中产生的条件,以及链式规则。从一级毕业到高阶AD对应于采样所有导数,而不仅仅是一个。接下来,导数的概念通过向量空间和线性映射。AD规范适应于此优雅且非常普通的设置简化这个发展。

你可以拿到纸并在此处查看当前勘误表.

提交截止日期是3月2日,因此在此之前的评论对我非常有帮助。

享受吧,谢谢!

比较高维、高阶导数的公式

我刚刚重读了杰森·福茨的帖子Haskell中的高阶多元自动微分,因为我又在思考这个话题。我喜欢他使用国际地图保持偏导数和(递归地)这些偏导数的偏导数等。

一些想法:

  • 我打赌可以消除常数(C类)Jason代表的案例,因此有3/4的案例需要处理,性能没有太大损失。他已经有了一个相当有效的常数表示,这是一个D类有一个空的国际地图.

  • 我想还有一个很好的通用代码,用于组合他在第三个乘法案例中使用的两个有限映射。代码的含义和正确性来源于这些映射的模型,即总函数,缺少的元素表示默认值(在本例中为零)。

  • Jason的数据类型让我想起了稀疏矩阵表示,但它的无限嵌套方式更酷。也许是深度n个(以零开头)是稀疏的n维的矩阵。

  • 最后,我怀疑Jason的国际地图-基于实现和我的线性贴图-中描述的基于实现高维、高阶导数,函数和中更简单、更高效、功能性更强的线性映射.对于以下情况R(右)n个,我的公式使用带有以下项的trien个基本元素,而Jason使用国际地图(这也是一个trie)n个条目(计算任何隐式零)。

我怀疑Jason的公式更有效(因为它优化了常量的情况),而我的公式更静态类型,更灵活(因为它处理的比R(右)n个).

为了优化常量,我想我更喜欢使用带有也许 吧对于派生,消除代码重复。

我仍在努力理解报纸惰性多元高阶转发模式AD管理各种ε。

最后一句话:我更喜欢术语“高维”,而不是传统的“多元”。我在后者中听到了经典的语法/语义混淆。

更简单、更高效的函数线性映射

A类上一个帖子描述了函数线性映射的数据类型。作为安迪·吉尔 指出,我们花了很多时间试图取得好成绩。本说明描述了一种新的表示法,即非常简单而且效率更高。回想起来,这很明显,但我花了很长时间才发现。

这里描述的Haskell模块是向量空间库(版本0.5或更高版本),并要求ghc版本6.10或更高(对于相关类型)。

编辑:

  • 2008年11月9日:更改版本备注。矢量空间版本0.5取决于ghc 6.10。
  • 2008-10-21:修复了向量空间库引子中的链接。

继续阅读“更简单、更高效、功能性更强的线性地图”»

功能线性图

两个早期的 帖子描述了一个简单而普遍的概念导数它统一了传统微积分课程中教授的许多具体概念。所有这些变化都是一个抽象概念的具体表现线性地图.相应地,链规则中各种形式的多重复制都是作文线性地图。为了简单起见,我建议将线性映射直接实现为函数。不幸的是,这种直接表示妨碍了效率,因为函数与数据结构不同,默认情况下不缓存。

这篇文章展示了一个数据线性映射的表示方法,它主要利用了(a)线性和(b)最近添加的语言特性索引类型族(“相关类型”)。

有一段时间,我想知道线性映射库是否可以取代和推广矩阵库。毕竟,矩阵表示一类受限的线性映射。然而,与传统的矩阵库不同,本文中描述的线性映射库通过静态类型.下面定义的合成函数静态地强制执行矩阵乘法(实现线性映射合成)所需的一致性属性。同样,线性映射添加的一致性也被简单而静态地强制执行。此外,通过对Haskell编译器进行足够复杂的哄骗Don Stewart是,也许像这样的库也可以有出色的性能。(还没有。)

你可以在模块中阅读并尝试这篇文章的代码数据。线性贴图在版本0.2.0或更高版本中向量空间包裹。该模块还包含线性地图合成的实现,以及Functor(仿真器)-喜欢和适用-类似的操作。安迪·吉尔一直在帮助我弄清一些严重的性能问题,这些问题显然涉及大量冗余的字典创建。

编辑:

  • 2008-06-04:关联数据类型声明的简要说明。

继续阅读“功能线性图”»

高维、高阶导数,函数

帖子美丽的差异展示了一些可爱的代码,不仅可以轻松计算用户编写的函数的值,还可以轻松计算全部的它的导数(无穷多)。然而,这种优雅的技术仅限于标量(一维)域。接下来,我们探讨了超越这一限制意味着什么,提出并回答了这个问题什么是导数?这个问题的答案是导数是线性地图说明小的输入变化如何导致输出变化。这个答案使我们能够将导数的几个不同概念及其相应的链式规则统一为一个简单而强大的形式。

第三篇文章结合了前两篇文章的思想,轻松计算任意维域上函数的无穷多个导数。

此处显示的代码是新Haskell库,您可以下载并在网上玩或阅读。

继续阅读“高维、高阶导数,函数”»