最近刚刚完成了我自己的基本reverse mode AD用于机器学习目的,我发现自己想要了解这个领域,但是我已经用更高阶的方法达到了硬度墙。
基本的反向AD非常简单易懂,但更高级的材料太抽象,太技术化,我无法在互联网上找到任何好的解释(实际上它花了我很多有点实现基本反向AD甚至存在。)
基本上,我理解如何在微积分的上下文中采用二阶导数,但我不明白如何转换反向AD图以获得二阶导数。
在类似edge_pushing的算法中,这些虚线连接意味着什么?
我已经研究过了DiffSharp库,我注意到它使用了反向正向分析来计算Hessian。运行,通过调试器,我真的看到它确实在一次运行中混合了正向和反向步骤。该机制背后的原理是什么?
DiffSharp使用jacobian-vector乘积计算每个变量的Hessian,它是R ^ m - >。 R ^ n映射。怎么可能从原始图表中得到它?反向AD是R - > R ^ n映射,额外维度来自何处?
最后,嵌套AD如何工作?
答案 0 :(得分:3)
我在edge_pushing上写了这篇论文。首先,您从渐变的计算图开始。我在这里所说的渐变是反向梯度法的计算图。然后edge_pushing算法简单地将反向梯度算法应用于此梯度图,这将给你一个Hessian。这里的问题是,它以智能方式实现。特别地,虚线边缘是人工添加的边缘,其表示两个节点之间的非线性相互作用(两个节点都是图中的非线性函数的输入)。非线性虚线边缘可以很容易地显示在梯度图上计算此反向梯度的主要成本出现的位置,以及如何最好地累积总导数。这有帮助吗?
答案 1 :(得分:1)
我为AD编写了一个教程,简要介绍了如何在接近结束时使用反向here。我还在GPU上编写了一个完整的基本AD库,可以在同一站点找到它。
仍然不确定edge_pushing,但我认为无论如何神经网络都不重要。