在学习可微渲染的过程中涉及到了自动微分原理,所以写一篇来总结一下学习的内容。
求导的方法
手动微分就不说了,数值微分的精度收到h步长的影响导致精度有问题。
符号微分其实就是在软件中实现一个符号公式的求导,得到的是导函数,然后带入具体数值就能得到导数(其实和手动计算差不多)但是会要进行各种变换导致表达式膨胀。
最后就是自动微分。
自动微分的过程就是把一个算式变成一系列的加减乘除(计算图),然后依次求导。最后通过链式法则得到输出对输入(或者输入对输出的导数)。
两种计算模式
这里给一个例子来对两种模式进行描述。
前向模式Forward Mode
前向模式就是从起点开始计算,一直到终点。
当x1=2,x2=5,我们计算一下y在x1处的导数
思路很清楚,就是把函数拆散,然后分步计算导数
反向模型 Reverse Mode
反向模式需要先正向把所有的偏导数算出来之后,再反向去计算每个对于输出的导数。
反向模型在机器学习中用的比较多,因为需要在训练中反复调整参数大小,用得到的导数来指导调整方向,不断优化LossFunc