1、范数是什么?
范数就像是测量向量的"大小"或"长度"的一种方式。想象你有一个向量,它可以是一个箭头,指向某个方向并且有一定的长度。范数就是用来衡量这个箭头有多长或者有多大。
-
L0 范数:
- 含义:向量中有多少个非零元素。
- 例子 :向量
[0, 3, 0, 5]
的 L0 范数是 2,因为它有两个非零元素(3 和 5)。
-
L1 范数:
- 含义:向量中所有元素的绝对值之和。
- 例子 :向量
[3, -2, 4]
的 L1 范数是 ∣3∣+∣−2∣+∣4∣=3+2+4=9∣3∣+∣−2∣+∣4∣=3+2+4=9。
-
L2 范数:
- 含义:向量中所有元素的平方和的平方根。
- 例子 :向量
[3, -2, 4]
的 L2 范数是 3*3+(-2)*(-2)+4*4=9+4+16=29,即根号下29
-
无穷范数(L∞ 范数):
- 含义:向量中最大元素的绝对值。
- 例子 :向量
[3, -2, 4]
的 L∞ 范数是 4,因为 4 是最大的绝对值。
更直观的例子
向量的起点是原点 (0, 0),终点是 (3, 4)。
- L1 范数 相当于你沿着网格线走的总距离。在这个例子中,你先向右走了 3 步,然后向上走了 4 步,总共走了 7 步。
- L2 范数 相当于你直接从起点走到终点的距离。你可以使用勾股定理来计算这个距离:9+16=25,开根号等于5。
- L∞ 范数 相当于你走过的最长的单步距离。在这个例子中,你向右走了 3 步,向上走了 4 步,所以最长的一步是 4 步。
用处:
-
正则化:通过在损失函数中加入正则化项来控制模型参数的大小,从而防止过拟合。
- L1 正则化:鼓励模型参数变得稀疏,即很多参数变为0。
- L2 正则化:鼓励模型参数变得较小,但不一定为0,这有助于减少过拟合。
-
梯度裁剪:在训练深度神经网络时,有时候梯度可能会变得非常大,导致梯度爆炸问题。通过限制梯度的 L2 范数,可以避免这种情况发生。
-
距离度量:在聚类算法或相似度度量中,范数可以用来计算两个向量之间的距离。
2、模型中的协变量偏移、标签偏移、概念偏移是什么?
在机器学习和深度学习中,协变量偏移、标签偏移和概念偏移是指训练数据和测试数据分布之间的差异。这些偏移可能会导致模型在新数据上的性能下降。
2.1、协变量偏移
协变量偏移是指训练数据和测试数据在输入特征(即协变量)的分布上的差异。
**例子:**在一家餐厅里学习如何根据客人的点餐来预测他们是否会成为回头客。如果只在午餐时间收集数据(协变量),而实际上晚餐时间的客人行为可能会有所不同。这意味着在午餐时间学到的东西可能不适用于晚餐时间。这就是协变量偏移。
2.2、标签偏移
标签偏移是指训练数据和测试数据在目标变量(即标签)的分布上的差异。
**例子:**学习如何区分苹果和橙子。如果训练模型时使用的苹果和橙子的比例是 50:50,但在实际应用中,苹果和橙子的比例变成了 80:20。这意味着模型在训练时学到的比例与实际应用中的比例不同。这就是标签偏移。
2.3、概念偏移
概念偏移是指随着时间的推移,输入特征与目标变量之间的关系发生变化。这意味着即使输入特征的分布保持不变,它们与目标变量的关系也可能发生变化。
**例子:**假设训练了一个模型来预测天气,使用过去几年的数据来训练模型,但随着时间的推移,气候变化导致某些因素(如温度、湿度等)与天气之间的关系发生了变化,这意味着即使温度和湿度的分布没有变化,它们与天气的关系可能已经改变了,这就是概念偏移。
3、自动微分
深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上,然后记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。
- 一个标量函数y关于向量x的梯度是向量,并且与x具有相同的形状。标量是一个单一的数值,没有方向。当输出是一个标量 时,我们可以直接调用
backward()
方法来计算梯度,这是因为标量的梯度本身就定义为标量相对于各个输入变量的偏导数之和。 - 当是向量、矩阵函数输出时,由于向量和矩阵是具有方向的数组 ,不能直接调用
backward()
方法来计算梯度,因为我们需要指定一个梯度参数 来告诉框架如何处理这个向量或矩阵的梯度,这是因为y的梯度可能是更复杂的结构,比如雅可比矩阵。假设我们有一个向量函数输出y
,如果我们直接调用y.backward()
,则需要传递一个与y
形状相同的梯度参数。或者求和(y.sum()
),以得到一个标量,然后再调用backward()
方法。