本文主要参考文献:Atılım G¨une¸s ,Barak A. , Radul, Mark , in : a [J],(2018) 1-43.1.函数的迹(trace):
迹这个概念尽管十分基本,但对于自动微分技术来说十分重要,无论是前向模型还是反演模型本质上都是针对迹的操作。
迹是由输入变量,中间变量,以及输出变量组成,具体定义如下:
输入变量:v_{i-n }= x_{i},i=1,....,n。
中间变量:v_{i} = x_{i},i=1,...,l
输出变量:y_{m-i} = v_{l-i},i =m-1,...,0
这样枯槁的概念可能不能让人很快的明白这个定义,下面我将举一个综述里面的例子来说明。
对于函数 y = f(x_{1},x_{2}) = ln(x_{1}) + x_{1}x_{2} - sin(x_{2})
其迹的定义如下:
迹的概念基本介绍到这里,指的一提的是,迹的表达形式是多种多样的,比较常用的有如上述这种的列表形式,也有计算图的形式,计算图的形式会在下一篇文章中举例。目前来说,计算图形式的迹是主流的表达形式。
2.前向模型( mode):
所谓的前向模型顾名思义,就是以和原函数相同的“计算顺序”去计算导数值。
输入:原始函数的迹,待求导的输入变量
前向模型迹的计算按照如下的式子进行:
\dot{v_{i}} = \frac{\ v_{i}}{\ x_{i}}
输出:对于待求导的输入变量的导数(偏导数)
其流程图如下:
对于综述中的例子: y = f(x_{1},x_{2}) = ln(x_{1}) + x_{1}x_{2} - sin(x_{2}) 而言其前向模型的迹如下:
到这里,前向模型的基本概念和综述的例子基本叙述完毕。但这里有几个需要注意的点:首先前向模型一定是对特定的某个输入变量的偏导值,比如说,对于一个n元函数,如果想利用前向模型求得梯度,那么要调用前向模型n次才可以(之所以前向模型一次只能求一个变量的偏导,是因为前向模型本质上是利用二元数去估计导数值的一种方法,而二元数一次只能估计一个输入变量的偏导数值,关于二元数,综述及其引文中有一些简单的介绍,因与文关系不甚密切故不详细展开,如确有必要会在之后的文章中补充)。除此之外,前向模型的迹的列表(计算图)和原始函数迹的列表(计算图),是一模一样的(除去变量表示外),所以在实际过程中,如若用前向模型,无需重新构造前向模型迹的列表(计算图),直接利用原始函数的迹的列表(计算图)即可。
3.反演模型( mode):
反演模型,顾名思义,就是以和原函数相反的“计算顺序”去计算导数值。
在这里先说明一下,当读者看到反演模型的定义时直觉上会觉得其与机器学习领域的反向传播算法(Back 算法,以下简称BP算法)思想十分相似。读者的直觉是正确的,BP算法和反演模型的思想内核基本是一致的,在一定情况下是可以相互转化的,不过二者是有很大区别的,笼统的说,可以认为反演模型是BP算法的一般情况,BP算法是反演模型在特定领域的优化,关于更多关于BP算法和反演模型的问题,将在下一篇文章中详细讨论。
反演模型分为两个步骤:
Step1:前向步骤(不是前向模型):代入输入变量的值,运行原始函数的迹
Step:反演步骤:构造反演模型的迹并且计算梯度。
具体的输入输出如下:
输入:原始函数的迹
反演模型迹的计算按照如下的式子进行:
\bar{v_{i}} = \frac{\ y_{i}}{\ v_{i}}
输出:梯度
流程图如下:
对于综述中的例子: y = f(x_{1},x_{2}) = ln(x_{1}) + x_{1}x_{2} - sin(x_{2}) 而言其前向模型的
的迹如下:
到这里,反演模型的基本概念和综述的例子基本叙述完毕。但这里有几个需要注意的点:首先反演模型的结果是所有输入变量的导数值的向量也就是梯度,也即一趟反演模型,所有要求的就都求了。其次,反演模型的计算图和原始函数的计算图方向是正好相反的,所以一般不能共用。但是计算图构造起来对存储的消耗是不小的挑战,成熟的库,等对于计算图都有一些简化的操作。现在自动微分技术一般使用的都是反演模型,主要是因为其相对于前向模型和数值微分而言卓越的处理速度。
这篇文章基本到这里,下一篇文章我会举一个具体的神经网络的例子(迹的计算图形式),以及其利用BP算法,正向模型,反演模型求导的情况,同时会对几种方法的关系提出一些不成熟的见解。
未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处墨迹游戏网。
原文地址:《浅谈自动微分技术(二):前向模型及反演模型》发布于:2024-02-25





