范数(Norm) 全面解析:定义、种类、机器学习应用及PyTorch实现

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

一、什么是范数?

范数是向量空间中对向量(或矩阵)“长度/大小/模”的一种量化度量,是欧几里得空间中向量模长的推广(欧几里得模长是范数的特殊情况)。

严格来说,一个函数 ∣∣⋅∣∣:V→R+||\cdot||: V \to R^+∣∣∣∣:VR+VVV 是向量空间,R+R^+R+ 是非负实数)要被称为范数,必须满足以下3条公理(非负性、齐次性、三角不等式):

  1. 非负性∣∣x∣∣≥0||x|| \ge 0∣∣x∣∣0,且仅当 xxx零向量时,∣∣x∣∣=0||x|| = 0∣∣x∣∣=0
  2. 齐次性:对任意标量 α\alphaα∣∣αx∣∣=∣α∣⋅∣∣x∣∣||\alpha x|| = |\alpha| \cdot ||x||∣∣αx∣∣=α∣∣x∣∣
  3. 三角不等式:对任意两个向量 x,yx,yx,y∣∣x+y∣∣≤∣∣x∣∣+∣∣y∣∣||x+y|| \le ||x|| + ||y||∣∣x+y∣∣∣∣x∣∣+∣∣y∣∣

核心本质:范数给向量/矩阵赋予了**“距离感”和“大小感”**,让我们能比较两个向量“谁大谁小”、衡量向量“离原点有多远”,是数值分析、线性代数、机器学习的基础工具。

范数主要分为向量范数(应用最广)和矩阵范数(机器学习中较少直接使用,多由向量范数诱导),机器学习中99%的场景用的是向量范数,下文重点讲解。

二、常见的范数类型

最常用的范数是**LpL^pLp 范数**(ppp-范数),属于向量范数,定义为:
对于nnn维向量 x=[x1,x2,...,xn]Tx = [x_1, x_2, ..., x_n]^Tx=[x1,x2,...,xn]T,其LpL^pLp范数为:
∣∣x∣∣p=(∑i=1n∣xi∣p)1p||x||_p = \left( \sum_{i=1}^n |x_i|^p \right)^{\frac{1}{p}}∣∣xp=(i=1nxip)p1
其中p≥1p \ge 1p1p<1p<1p<1时不满足三角不等式,不是严格范数)。

ppp特定值时,会得到机器学习中最核心的几种范数,此外还有无穷范数p→∞p \to \inftyp的极限),下面逐一讲解:

1. L0L^0L0 范数(伪范数)

注意L0L^0L0 不满足范数的齐次性,因此是伪范数,但机器学习中习惯称其为L0L^0L0范数。
定义:$||x||_0 = $ 向量xxx非零元素的个数
(并非公式(∑i=1n∣xi∣0)0\left( \sum_{i=1}^n |x_i|^0 \right)^0(i=1nxi0)0,因为000^000无意义,是人为定义的统计规则)。

2. L1L^1L1 范数(曼哈顿范数/出租车范数)

p=1p=1p=1时的LpL^pLp范数,因计算方式类似曼哈顿街区的行走距离而得名。
定义∣∣x∣∣1=∑i=1n∣xi∣||x||_1 = \sum_{i=1}^n |x_i|∣∣x1=i=1nxi
即向量所有元素的绝对值之和

3. L2L^2L2 范数(欧几里得范数)

p=2p=2p=2时的LpL^pLp范数,就是我们最熟悉的欧几里得空间向量模长
定义∣∣x∣∣2=∑i=1nxi2||x||_2 = \sqrt{\sum_{i=1}^n x_i^2}∣∣x2=i=1nxi2
即向量所有元素的平方和开平方根
衍生L2L^2L2范数的平方∣∣x∣∣22=∑i=1nxi2||x||_2^2 = \sum_{i=1}^n x_i^2∣∣x22=i=1nxi2)在机器学习中更常用,因为求导更简单(无平方根),且单调性与L2L^2L2范数一致(比较大小结果相同)。

4. L∞L^\inftyL 范数(无穷范数/最大范数)

p→∞p \to \inftypLpL^pLp范数的极限,核心是取向量元素的最大绝对值
定义∣∣x∣∣∞=max⁡1≤i≤n∣xi∣||x||_\infty = \max_{1 \le i \le n} |x_i|∣∣x=1inmaxxi
推导逻辑:当p→∞p \to \inftyp时,向量中绝对值最大的元素会在求和中占据主导,其余元素可忽略,最终开ppp次方后结果趋近于该最大绝对值。

5. 其他常用范数(了解即可)

  • LpL^pLp范数(1<p<21<p<21<p<2p>2p>2p>2:如L1.5L^{1.5}L1.5L3L^3L3,介于L1L^1L1L2L^2L2之间,兼顾两者特性;
  • Frobenius范数(F范数)矩阵范数,是矩阵的“L2L^2L2范数”,定义为∣∣A∣∣F=∑i=1m∑j=1naij2||A||_F = \sqrt{\sum_{i=1}^m \sum_{j=1}^n a_{ij}^2}∣∣AF=i=1mj=1naij2(矩阵所有元素的平方和开平方根),机器学习中用于衡量矩阵的大小;
  • 核范数:矩阵的奇异值之和,用于矩阵低秩近似。

三、机器学习中各种范数的核心作用

机器学习中范数的核心应用场景有3个:正则化(防止过拟合)特征归一化损失函数/距离度量,其中正则化是最核心的用途。

下面结合每种范数的特性,讲解其在机器学习中的具体作用,重点是L0L^0L0L1L^1L1L2L^2L2(无穷范数主要用于梯度裁剪)。

1. L0L^0L0 范数:特征选择(稀疏化)

核心作用统计非零参数/特征的个数,实现特征稀疏化(让向量中尽可能多的元素为0)。

  • 机器学习中,若模型的权重向量用L0L^0L0范数约束,会让大部分权重为0,只有少数核心特征对应的权重非零,本质是自动特征选择(保留重要特征,剔除无用特征);
  • 缺陷L0L^0L0范数是非凸、不连续的,直接优化L0L^0L0范数是NP难问题(计算量极大,无法直接求解),因此机器学习中几乎不会直接使用L0L^0L0正则化,而是用L1L^1L1范数近似替代。

2. L1L^1L1 范数:稀疏正则化(Lasso回归)+ 鲁棒性

L1L^1L1范数是机器学习中实现稀疏性的核心工具,同时对异常值有更好的鲁棒性,核心应用有2个:

(1)L1L^1L1 正则化(Lasso Regularization)

在模型损失函数中加入L1L^1L1范数惩罚项,即:
Ltotal=Lbase+λ⋅∣∣w∣∣1\mathcal{L}_{total} = \mathcal{L}_{base} + \lambda \cdot ||w||_1Ltotal=Lbase+λ∣∣w1
其中Lbase\mathcal{L}_{base}Lbase是基础损失(如MSE、交叉熵),www是模型权重,λ≥0\lambda \ge 0λ0是正则化系数(控制惩罚强度)。
核心效果:让模型的权重向量变得稀疏(大量权重为0),实现自动特征选择

  • 原理L1L^1L1范数的等值线是菱形,与损失函数的等高线相交时,极易相交在坐标轴上(对应某个权重为0),随着λ\lambdaλ增大,更多权重会被压缩为0;
  • 典型应用:Lasso回归(替代线性回归的L2L^2L2正则化)、稀疏感知机、特征选择算法(如基于Lasso的特征筛选)。
(2)鲁棒的距离/损失度量

L1L^1L1范数对异常值不敏感(鲁棒性强),因为其计算的是绝对值和,异常值的极端值不会被平方放大(与L2L^2L2对比)。

  • 例如:用L1L^1L1范数衡量两个样本的距离(曼哈顿距离),适合处理含异常值的数据集;
  • 典型应用:绝对损失(MAE,L1L_1L1 Loss)L=∣∣y−y^∣∣1L = ||y-\hat{y}||_1L=∣∣yy^1,比均方损失(MSE,L2L_2L2 Loss)更适合异常值多的场景。

3. L2L^2L2 范数:权重衰减(Ridge回归)+ 防止梯度爆炸

L2L^2L2范数是机器学习中使用最广泛的范数,核心作用是权重衰减(Weight Decay),防止模型过拟合,同时可用于梯度裁剪,核心应用有2个:

(1)L2L^2L2 正则化(Ridge Regularization/权重衰减)

在损失函数中加入L2L^2L2范数的平方惩罚项(求导更方便),即:
Ltotal=Lbase+λ⋅∣∣w∣∣22\mathcal{L}_{total} = \mathcal{L}_{base} + \lambda \cdot ||w||_2^2Ltotal=Lbase+λ∣∣w22
核心效果:让模型的权重尽可能小(接近0,但不会为0),避免单个特征对模型产生过大影响(防止过拟合)。

  • 原理L2L^2L2范数的等值线是圆形,与损失函数等高线相交时,会将权重压缩到原点附近,但不会落在坐标轴上(因此权重不会为0,仅会变小);
  • 本质:给权重添加高斯先验,假设权重服从均值为0的高斯分布;
  • 典型应用:Ridge回归、逻辑回归、神经网络的权重衰减(PyTorch中优化器的weight_decay参数本质就是L2L^2L2正则化)。
(2)梯度裁剪/范数归一化
  • 梯度裁剪:神经网络训练中,计算出的梯度向量若过大,会导致梯度爆炸,通过限制梯度的L2L^2L2范数(如将梯度的L2L^2L2范数裁剪到最大阈值max⁡norm\max_normmaxnorm),可有效防止梯度爆炸;
  • 范数归一化:如批量归一化(BN)、层归一化(LN)的底层逻辑,或对特征向量做L2L^2L2归一化(让特征向量的模长为1),常用于人脸识别、推荐系统(如余弦相似度计算前的特征归一化)。

4. L∞L^\inftyL 范数:梯度裁剪+对抗学习

核心应用

(1)梯度裁剪

限制梯度向量的最大绝对值,确保梯度不会出现极端值,适合对梯度的“单个维度极端值”敏感的模型;

(2)对抗学习

生成对抗样本时,常用L∞L^\inftyL范数约束扰动的大小(如扰动的每个维度绝对值不超过ϵ\epsilonϵ),确保对抗样本与原样本的视觉差异极小(如FGSM对抗攻击)。

5. 范数的其他通用作用

  1. 特征归一化:将特征向量做L1/L2L^1/L^2L1/L2归一化,消除量纲影响,让不同特征的权重具有可比性(如SVM、KNN、聚类算法中必须做特征归一化);
  2. 距离度量:由范数诱导距离(如欧几里得距离d(x,y)=∣∣x−y∣∣2d(x,y)=||x-y||_2d(x,y)=∣∣xy2,曼哈顿距离d(x,y)=∣∣x−y∣∣1d(x,y)=||x-y||_1d(x,y)=∣∣xy1),是分类、聚类、检索算法的基础;
  3. 模型评估:用范数衡量预测值与真实值的偏差(如MAE是L1L^1L1范数,MSE是L2L^2L2范数的平方)。

四、PyTorch中的范数运算

PyTorch提供了通用的范数函数torch.norm()(适用于张量/向量/矩阵),以及按维度的范数计算优化器/梯度裁剪的范数接口,同时对常用的L1/L2L^1/L^2L1/L2范数有简化实现。

核心前提

PyTorch中所有范数运算的操作对象是张量(Tensor),向量是1维张量,矩阵是2维张量,高维张量(如神经网络的特征图N×C×H×WN \times C \times H \times WN×C×H×W)可按指定维度计算范数。

1. 通用范数函数:torch.norm()

语法(PyTorch 1.10+,最新版已统一接口):

torch.norm(input, p='fro', dim=None, keepdim=False, out=None, dtype=None)

关键参数

  • input:输入张量(任意维度);
  • p:范数类型,可选1,2,np.inf,'fro'(Frobenius范数,矩阵专用),默认'fro'
  • dim:指定计算范数的维度None表示对所有元素计算范数(得到标量);
  • keepdim:是否保留计算范数的维度,True则维度不变(变为1),False则压缩该维度,默认False

注意

  • 向量(1维张量)p=1/L1p=2/L2p=inf/Linf分别对应L1L^1L1L2L^2L2L∞L^\inftyL范数;
  • 矩阵(2维张量)p='fro'是Frobenius范数,等价于将矩阵展平为向量后的L2L^2L2范数;
  • 高维张量(如4维特征图),需通过dim指定计算范数的维度(如dim=[2,3]对H/W维度计算范数)。

2. 向量范数的PyTorch实现(1维张量)

最基础的场景,计算单个向量的L0L^0L0(伪范数)、L1L^1L1L2L^2L2L∞L^\inftyL范数:

import torch
import numpy as np

# 定义1维张量(向量)
x = torch.tensor([1, -2, 3, 0, -4], dtype=torch.float32)
print("原始向量:", x)

# 1. L0范数:非零元素个数(手动实现,PyTorch无直接接口)
l0 = torch.nonzero(x).size(0)
print("L0范数(非零个数):", l0)  # 输出:4

# 2. L1范数:p=1
l1 = torch.norm(x, p=1)
print("L1范数:", l1.item())  # 输出:1+2+3+4=10.0

# 3. L2范数:p=2
l2 = torch.norm(x,

您可能感兴趣的与本文相关的镜像

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛魔小丸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值