Deep Learning Systems Lecture 4 Automatic Differentiation
这里回顾dlsys第四讲,本讲内容是自动微分。
课程主页:
大纲
- 不同微分方法的介绍;
- 反向模式自动微分;
不同微分方法的介绍
微分在机器学习的那个步骤起作用
回顾:每个机器学习算法都包含三个不同的元素。计算关于假设类参数的损失函数梯度是机器学习中最常见的操作:
数值微分
数值微分是根据定义直接计算梯度:
一种更精确的近似梯度的方法:
数值微分的问题有数值误差,并且计算效率较低。
数值误差检查
然而,数值微分是测试自动微分算法实现的强大工具:
其中$\delta$是单位球上的点,如果自动微分算法实现正确,则上式成立。
符号微分
写下公式,通过求和、乘积和链式法则推导出梯度(即最朴素的方式,利用定义求导):
这样实现会导致浪费计算,例如:
计算全部梯度需要$n(n-1)$次乘法。
计算图
每个节点代表计算中的一个(中间)值, 边表示输入输出关系:
自动微分的前向模式
考虑计算:
我们可以按照计算图的拓扑排序顺序计算$\dot{v}_i$,这被称为自动微分的前向模式:
因此:
前向模式的局限性
对于$f:\mathbb R^n \to \mathbb R^k$,我们需要$n$次前向AD传递来获得关于每个输入的梯度。在深度学习中,我们主要关心$k=1$和$n$很大的情况。为了高效地解决问题,我们需要使用另一种AD。
反向模式自动微分
实例
依然是之前的例子,我们计算:
然后我们可以按照计算图的反向拓扑顺序迭代计算$\bar{v}_i$:
multiple path情形
$v_1$被用于计算图的多条路径上($v_2$和$v_3$):
即$y=f(v_2, v_3)$,那么:
定义伴随:
那么:
总结后即可得到反向AD算法。
反向AD算法
通过扩展计算图的反向AD
我们可以通过拓展计算图来实现反向AD:
张量上的反向模式
对于高维情形,利用向量微积分即可,考虑下例:
前向计算为:
对于反向模式,定义(伴随):
那么:
即:
反向AD vs 反向传播
反向传播:
特点:
- 在同一个前向图中运行反向操作;
- 用于第一代深度学习框架(caffe、cuda-convnet);
特点:
- 为伴随构造单独的图节点;
- 由现代深度学习框架使用;
- 反向模式AD的结果仍然是一个计算图;
- 我们可以通过组合更多操作进一步扩展该图,并在梯度上再次运行反向模式AD;
- 可以计算梯度的梯度;
在其他数据结构上的反向AD
要点:
- 通常在与前向值和伴随传播规则相同的数据类型中定义“伴随值”,然后之前的算法就可以起作用;
- 在我们的框架中不需要支持一般形式,但我们可能会支持“元组值”;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere