【机器学习】自动微分

发布时间 2023-12-06 16:49:24作者: vLiion

标量变量的反向传播

以下举两个例子说明标量变量的反向传播如何实现。

image-20231206140402877

非标量变量的反向传播

在上述的例子中,x 是向量,而 y 是标量,这种类型为标量变量的反向传播

但当 y 不是标量时,比如 y = x * x,当求向量 y 关于 另一个向量 x 的导数时,结果通常就是一个矩阵,被称为雅可比矩阵,或者是微分矩阵。这时候就是非标量变量的反向传播了。

对于非标量函数,我们仍然将导数视为雅可比矩阵。但在实际计算中,通常是对批量中的每个样本的导数进行求和,来进行参数更新。

image-20231206153518756

偏导数的计算

有时候我们想要一些变量视为常量。比如 y = x * x * x,该如何把前面的 x * x 视为常量,不参与求导呢?

这时候就可以采用变量分离的方法,使用 detach()函数分离变量。

image-20231206155743429

梯度计算支持 Python 控制流

在以上进行梯度计算时,函数是确定的;而有时候函数的确定是需要依赖于其它参数的。这时候函数的计算图依赖于输入的参数值,所以函数是在运行中才能确定。pytorch 支持这一类型, pytorch的自动微分会动态构建计算图,这样就可以使用 python 控制流构建更加复杂的模型。

image-20231206163151943