稀疏自动微分
阐述
稀疏自动微分是对自动微分的扩展。一般来说,Jacobian 在矩阵形势下可能会表现出一定的稀疏性,而
如果矩阵是稀疏的,那么几列(或者几行)的内容可以一次性计算完成,大大节约计算次数;例如,下图是前向自动微分按列压缩的情况:
稀疏性检测
如果稀疏性不是已知的,那么就需要用检测算法来获得一定的稀疏性模式。
图染色
将一个有 列的稀疏 Jacobian 矩阵转化为一个具有 个节点的图,且若 列有处于同一行的非零元素,则在节点 之间连一条线;然后对这个图染色,且相邻节点不能具有同一种颜色。
虽然图染色问题要找到最优解是 NP-complete 的,但是一些启发式算法可以达到不错的效果。
染好色之后,设颜色一共有 种,记 为由 0 和 1 构成的 维向量,如果节点 是颜色 则 为 1,否则为 0。对应的 Jacobian 可以用以下的种子算出:
实例
ADTypes 用一个三元组来抽象稀疏自动微分算法:
- 底层的稠密微分
- 稀疏检测算法:对
jacobian_sparsity
和hessian_sparsity
都能返回一个抽象 Bool 矩阵 - 矩阵着色算法:对
column_coloring
,row_coloring
和symmetric_coloring
都能返回一个着色向量