x
.
grad
.
zero_()
y
=
x
.
sum()
y
.
backward()
x
.
grad
tensor([
1.
,
1.
,
1.
,
1.
])
因为
y
是
x
中所有元素的总和,所以
x
的每个元素对
y
的贡献都是相等的,因此每个元素的梯度都是 1。
u = y.detach()
detach()
方法用于从计算图中分离出一个张量,使其不再跟踪历史,这样就不会在反向传播时影响u
。
范数(Norm)是一个数学概念,在不同的领域有不同的应用,比如线性代数、泛函分析等。简单来说,范数可以被看作是一种“长度”或者“大小”的度量,但它不仅限于我们通常所说的欧几里得几何中的长度概念。在机器学习和深度学习中,范数经常用来衡量向量或矩阵的大小,也可以用于正则化模型以防止过拟合。
下面是一些常见的范数类型及其含义:
-
零范数(L0 norm):
- 计算非零元素的数量。例如,向量 [0, 0, 1, 2, 0] 的 L0 范数是 2,因为它有两个非零元素。
-
一范数(L1 norm):
- 向量元素绝对值之和。L1 范数常用于稀疏解,意味着它倾向于产生有较少非零元素的解。例如,向量 [1, -2, 3] 的 L1 范数是 |1| + |-2| + |3| = 6。
-
二范数(L2 norm):
- 向量元素平方和的平方根。这是最常用的范数形式,类似于欧几里得距离。例如,向量 [1, -2, 3] 的 L2 范数是 √(1² + (-2)² + 3²) = √14。
-
无穷范数(Infinity norm 或 L∞ norm):
- 向量元素的最大绝对值。例如,向量 [1, -2, 3] 的 L∞ 范数是 3,因为这是最大绝对值。
深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上,然后记录目 标值的计算,执行它的反向传播函数,并访问得到的梯度。 如何理解这句话?
·这句话描述的是深度学习框架中的自动微分(automatic differentiation)过程,特别是在执行反向传播(backpropagation)时如何计算梯度。以下是对这句话的逐步解释:
-
将梯度附加到变量上:
- 在深度学习中,当我们谈论梯度时,我们通常指的是损失函数(或其他目标函数)相对于模型参数的偏导数。
- 自动微分允许我们计算这些偏导数,而不需要手动推导公式。
-
记录目标值的计算:
- 这意味着我们首先需要前向传播(forward pass),即在模型中正向计算输出,以评估损失函数或其他目标值。
-
执行反向传播函数:
- 反向传播是深度学习中的一个核心算法,用于计算损失函数相对于每个参数的梯度。
- 这个过程通常利用了链式法则,从损失函数开始,逆向通过模型的每一层,计算并存储梯度信息。
-
访问得到的梯度:
- 一旦反向传播完成,我们就可以访问每个参数的梯度。这些梯度是优化算法(如梯度下降)更新模型参数的关键信息。
-
自动计算导数:
- 深度学习框架(如TensorFlow或PyTorch)提供了自动微分的工具,这意味着框架会自动处理导数的计算,使得开发者可以专注于模型的构建和训练过程。
-
使用自动微分的优势:
- 自动微分减少了手动计算导数的错误,提高了开发效率。
- 它允许研究人员和开发者快速实验不同的模型架构和优化策略。