D2L 4.微分和自动求导
Author:baiyucraft
BLog: baiyucraft’s Home
原文:《动手学深度学习》
一、微分和导数
微分和导数概念相信大家懂得都懂,根据书中的例子一样画个图:
1 |
|
运行结果:
二、自动求导
pytorch是可以通过自动求导来计算导数的。实际中,根据我们设计的模型,系统会构建一个计算图,来跟踪计算是哪些数据通过哪些操作组合起来产生输出。自动求导使系统能够随后反向传播梯度。所以求导所运用的反向传播函数
1.标量对向量的求导
我们想对函数 关于列向量求 求导:
1 |
|
运行结果:
现在让我们计算 的另一个函数:
1 |
|
运行结果:
2.非标量变量的反向传播
当y
不是标量时,向量y
关于向量x
的导数的最自然解释是一个矩阵。对于高阶和高维的y
和x
,求导的结果可以是一个高阶张量。
然而,虽然这些更奇特的对象确实出现在高级机器学习中(包括深度学习中),但当我们调用向量的反向计算时,我们通常会试图计算一批训练样本中每个组成部分的损失函数的导数。这里,我们的目的不是计算微分矩阵,而是批量中每个样本单独计算的偏导数之和。
1 |
|
运行结果:
3.分离计算
有时,我们希望将某些计算移动到记录的计算图之外。由于某种原因,我们希望将 y
视为一个常数,并且只考虑到 x
在y
被计算后发挥的作用,这里可以用detach()
函数将y
变为相较于x
的常数u
:
1 |
|
运行结果:
4.Python控制流的梯度计算
使用自动求导的一个好处是,即使构建函数的计算图需要通过 Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度。在下面的代码中,while
循环的迭代次数和 if
语句的结果都取决于输入 a
的值:
1 |
|
运行结果:
D2L 4.微分和自动求导
http://baiyucraft.top/D2lLearning/D2lLearning-4.html