1

最近刚刚完成了用于机器学习目的的基本反向模式 AD,我发现自己想了解该领域,但我遇到了高阶方法的难关。

基本的反向广告非常简单易懂,但更高级的材料太抽象,太技术化,我在互联网上找不到任何好的解释(实际上我花了很多时间才实现基本的反向AD甚至存在。)

基本上,我了解如何在微积分的上下文中取二阶导数,但我不明白如何转换反向 AD 图以获得二阶导数。

在像edge_pushing这样的算法中,这些虚线连接是什么意思?

我调查了库 DiffSharp 并且我注意到它使用诸如正反向微分之类的东西来计算 Hessian。运行,通过调试器,我真的看到它实际上在一次运行中混合了正向和反向步骤。该机制背后的原理是什么?

DiffSharp 使用 jacobian-vector 积来计算每个变量的 Hessian,这是一个 R^m -> R^n 映射。这怎么可能从原始图表中得到呢?反向 AD 是一个 R -> R^n 映射,额外的维度从何而来?

最后,嵌套 AD 是如何工作的?

4

2 回答 2

4

我在 edge_pushing 上写了这篇论文。首先,您从梯度的计算图开始。而我这里所说的梯度是指反向梯度法的计算图。然后 edge_pushing 算法只是简单地将反向梯度算法应用于这个梯度图,这会给你一个 Hessian。这里的问题是它以一种智能的方式做到这一点。特别是,虚线边是人为添加的边,表示两个节点之间的非线性交互(两个节点都是图上方的非线性函数的输入)。非线性虚线边缘可以很容易地可视化在梯度图上计算这个反向梯度的主要成本发生在哪里,以及如何最好地累积总导数。这有帮助吗?

于 2017-03-28T18:49:46.623 回答
1

我为 AD 编写了一个教程,简要说明了如何在接近尾声的地方进行正向和反向操作。我还在 GPU 上为基本 AD 编写了一个完整的库,可以在同一站点找到链接。

仍然不确定 edge_pushing,但无论如何我认为这对神经网络来说并不重要。

于 2016-01-07T13:53:42.247 回答