范数详解-torch.linalg.norm计算实例

news2024/12/23 15:45:48

文章目录

  • 二范数
  • F范数
  • 核范数
  • 无穷范数
  • L1范数
  • L2范数

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

范数是一种数学概念,可以将向量或矩阵映射到非负实数上,通常被用来衡量向量或矩阵的大小或距离。在机器学习和数值分析领域中,范数是一种重要的工具,常用于正则化、优化、降维等任务中。

本文以torch.linalg.norm()函数举例,详细讲解F范数、核范数、无穷范数等范数的定义和计算。

参考官方文档https://pytorch.org/docs/stable/generated/torch.linalg.norm.html

由于torch.norm()已弃用,所以以torch.linalg.norm()讲解,也可以使用 NumPy 或者 SciPy 库中的 numpy.linalg.norm 或 scipy.linalg.norm 函数。下图是其支持的各种范数:
在这里插入图片描述

二范数


标准二范数(2-norm)是向量的一种范数,通常用来衡量向量的大小。二范数可以说是出场率最高的了,比如在最小二乘法中,还有如线性代数中的向量空间、矩阵分解等。
标准二范数的一些重要性质包括:

  • 非负性:
    对于任意向量 x x x,它的标准二范数都是非负的,即 ∣ ∣ x ∣ ∣ 2 ≥ 0 ||x||_2 \geq 0 ∣∣x20
  • 齐次性:
    对于任意向量 x x x和任意实数 k k k,有 ∣ ∣ k x ∣ ∣ 2 = ∣ k ∣ ∣ ∣ x ∣ ∣ 2 ||kx||_2 = |k|||x||_2 ∣∣kx2=k∣∣∣x2
  • 三角不等式:
    对于任意向量 x 和 y,有 ∣ ∣ x + y ∣ ∣ 2 ≤ ∣ ∣ x ∣ ∣ 2 + ∣ ∣ y ∣ ∣ 2 ||x+y||_2\leq ||x||_2+||y||_2 ∣∣x+y2∣∣x2+∣∣y2
  • 向量的 Cauchy-Schwarz 不等式:
    对于任意向量 x x x y y y,有 ∣ x ⋅ y ∣ ≤ ∣ ∣ x ∣ ∣ 2 ∣ ∣ y ∣ ∣ 2 |x·y| \leq ||x||_2 ||y||_2 xy∣∣x2∣∣y2

对于一个 n n n维向量 x x x,它的标准二范数定义如下:
∣ ∣ x ∣ ∣ 2 = ( ∑ i = 1 n x i 2 ) 1 2 ||x||_2 = (\sum_{i=1}^n x_i^2)^{\frac{1}{2}} ∣∣x2=(i=1nxi2)21

其中, x i x_i xi表示向量 x x x的第 i i i个元素的值。
标准二范数的计算方法类似于欧几里得距离,都是将所有元素的平方和开根号。标准二范数也可以表示为向量的点积和向量的模长的乘积,即:
∣ ∣ x ∣ ∣ 2 = x ⋅ x = ∣ x ∣ x ∣ x ∣ ⋅ x ∣ x ∣ ||x||_2 = \sqrt{x·x}= |x|\sqrt{\frac{x}{|x|}·\frac{x}{|x|}} ∣∣x2=xx =xxxxx

其中, ⋅ · 表示点积, ∣ x ∣ |x| x表示向量 x x x的模长, x ∣ x ∣ \frac{x}{|x|} xx表示向量 x x x的单位向量。

在 PyTorch 中,可以使用 torch.linalg.norm 函数来计算向量的标准二范数,例如:

	x = torch.tensor([1, 2, 3, 4, 5], dtype=torch.float)
	norm_2 = torch.linalg.norm(x)
	print(norm_2)
	# 输出 7.4162,即 (√(1^2 + 2^2 + 3^2 + 4^2 + 5^2))

F范数


F范数(Frobenius范数)是一种矩阵的范数,用来衡量矩阵的大小。F范数在很多应用中都有重要的作用,例如矩阵近似、矩阵压缩、矩阵分解等。
F范数的一些重要性质包括:

  • 非负性
    对于任意矩阵 A A A,它的F范数都是非负的,即 ∣ ∣ A ∣ ∣ F ≥ 0 ||A||_F\geq 0 ∣∣AF0
  • 齐次性
    对于任意矩阵 A A A和任意实数 k k k,有 ∣ ∣ k A ∣ ∣ F = ∣ k ∣ ∣ ∣ A ∣ ∣ F ||kA||_F = |k|||A||_F ∣∣kAF=k∣∣∣AF
  • 三角不等式
    对于任意矩阵 A A A B B B,有 ∣ ∣ A + B ∣ ∣ F ≤ ∣ ∣ A ∣ ∣ F + ∣ ∣ B ∣ ∣ F ||A+B||_F\leq ||A||_F + ||B||_F ∣∣A+BF∣∣AF+∣∣BF
  • 特殊性质
    对于一个正交矩阵 Q Q Q,它的F范数等于 1,即 ∣ ∣ Q ∣ ∣ F = 1 ||Q||_F=1 ∣∣QF=1

对于一个 n n n m m m列的矩阵 A A A,它的F范数定义如下:

∣ ∣ A ∣ ∣ F = ( ∑ i = 1 n ∑ j = 1 m A i j 2 ) 1 2 ||A||_F = (\sum_{i=1}^n\sum_{j=1}^mA_{ij}^2)^{\frac{1}{2}} ∣∣AF=(i=1nj=1mAij2)21

其中, A i j A_{ij} Aij表示矩阵 A A A的第 i i i行第 j j j列元素的值。
F范数的计算方法类似于标准二范数,都是将所有元素的平方和开根号。与标准二范数不同的是,F范数的加和是在矩阵的所有元素上进行的,而不是在向量的所有元素上进行的。

在 PyTorch 中,可以使用 torch.linalg.norm 函数来计算矩阵的F范数,其对应的参数为 ord='fro',例如:

	A = torch.tensor([[1, 2],
	                  [3, 4],
	                  [5, 6]], dtype=torch.float)
	norm_F = torch.linalg.norm(A, ord='fro')
	print(norm_F) 
	# 输出 9.5394,即 (√(1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2))

核范数


核范数(nuclear norm),也称为矩阵1-范数(matrix 1-norm),也是一种用于衡量矩阵的大小的范数。核范数在矩阵分解、矩阵压缩、矩阵近似等方面有广泛的应用。例如在矩阵分解中,核范数可以用于衡量原始矩阵与分解后的矩阵的差异程度,从而可以优化分解的结果。
核范数的一些重要性质包括:

  • 非负性:
    对于任意矩阵 A A A,它的核范数都是非负的,即 ∣ ∣ A ∣ ∣ ∗ ≥ 0 ||A||_* \geq 0 ∣∣A0
  • 齐次性:
    对于任意矩阵 A A A和任意实数 k k k,有 ∣ ∣ k A ∣ ∣ ∗ = ∣ k ∣ ∣ ∣ A ∣ ∣ ∗ ||kA||_* = |k| ||A||_* ∣∣kA=k∣∣∣A
  • 子加性:
    对于任意矩阵 A A A B B B,有 ∣ ∣ A + B ∣ ∣ ∗ ≤ ∣ ∣ A ∣ ∣ ∗ + ∣ ∣ B ∣ ∣ ∗ ||A+B||_* \leq ||A||_* + ||B||_* ∣∣A+B∣∣A+∣∣B
  • 矩阵的谱范数性质:
    对于任意矩阵 A A A,有 ∣ ∣ A ∣ ∣ ∗ = ∣ ∣ A T ∣ ∣ ∗ = ∣ ∣ A H ∣ ∣ ∗ ||A||_* = ||A^T||_* = ||A^H||_* ∣∣A=∣∣AT=∣∣AH,其中 A H A^H AH是矩阵 A A A的共轭转置。

对于一个矩阵 A A A,它的核范数定义如下:
∣ ∣ A ∣ ∣ ∗ = ∑ i σ i ||A||_* = \sum_i\sigma_i ∣∣A=iσi

其中, σ i \sigma_i σi是矩阵 A A A的奇异值(singular value),表示矩阵 A A A的第 i i i大的奇异值。核范数的计算方法是将矩阵 A 奇异值的绝对值相加。

奇异值分解(singular value decomposition,SVD)是一种常用的矩阵分解方法,用于将一个矩阵分解为三个矩阵的乘积,即
A = U Σ V T A = UΣVᵀ A=UΣVT
具体求解这里不过多展开,可以理解为一种压缩分解技术,原本很大的矩阵,现在只需3个小矩阵就能存储,可以使用torch.svd()进行奇异值分解。

在 PyTorch 中,可以使用 torch.linalg.norm 函数来计算矩阵的核范数,其对应的参数为 ord='nuc',例如:

	A = torch.tensor([[1, 2, 3],
	                  [4, 5, 6],
	                  [7, 8, 9]], dtype=torch.float)
	norm_nuclear = torch.linalg.norm(A, ord='nuc')
	u, s, v = torch.svd(A)
	print(s)
	print(norm_nuclear)
	# 输出 17.9165,即 1.6848e+01 + 1.0684e+00 + 2.3721e-07

在这里插入图片描述

注:不同函数封装的奇异值分解算法可能不同,得到奇异值可能有些许出入,但应都在一个数量级。

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

无穷范数


无穷范数是矩阵的一种范数,也称为最大值范数或者列范数。无穷范数在矩阵计算和优化中有广泛的应用。例如,在矩阵乘法中,可以使用无穷范数来衡量矩阵乘积的大小;在优化问题中,可以使用无穷范数作为约束条件或者目标函数。

无穷范数也有一些重要的性质,包括:

  • 非负性
    对于任意矩阵 A A A,它的无穷范数都是非负的,即 ∣ ∣ A ∣ ∣ ∞ ≥ 0 ||A||_\infty \geq 0 ∣∣A0
  • 齐次性
    对于任意矩阵 A A A和任意实数 k k k,有 ∣ ∣ k A ∣ ∣ ∞ = ∣ k ∣ ∣ ∣ A ∣ ∣ ∞ ||kA||_\infty = |k| ||A||_\infty ∣∣kA=k∣∣∣A
  • 三角不等式
    对于任意矩阵 A A A B B B,有 ∣ ∣ A + B ∣ ∣ ∞ ≤ ∣ ∣ A ∣ ∣ ∞ + ∣ ∣ B ∣ ∣ ∞ ||A+B||_\infty \leq ||A||_\infty + ||B||_\infty ∣∣A+B∣∣A+∣∣B
  • 矩阵乘法性质
    对于任意矩阵 A A A B B B,有 ∣ ∣ A B ∣ ∣ ∞ ≤ ∣ ∣ A ∣ ∣ ∞ ∣ ∣ B ∣ ∣ ∞ ||AB||_\infty \leq ||A||_\infty ||B||_\infty ∣∣AB∣∣A∣∣B

对于一个 m × n m\times n m×n的矩阵 A A A,它的无穷范数定义为:

∣ ∣ A ∣ ∣ ∞ = max ⁡ 1 ≤ i ≤ m ∑ j = 1 n ∣ a i j ∣ ||A||{\infty} = \max_{1\leq i\leq m} \sum_{j=1}^{n} |a_{ij}| ∣∣A∣∣=1immaxj=1naij

其中, i i i的取值范围是 [ 1 , m ] [1, m] [1,m],表示矩阵 A A A的第 i i i行; j j j的取值范围是 [ 1 , n ] [1, n] [1,n],表示矩阵 A A A的第 j j j列。换句话说,无穷范数是将每一列的绝对值相加,然后取其中的最大值。

PyTorch 中其对应的参数为ord='inf',例如:

	A = torch.tensor([[1, 2, 3],
	                  [4, 5, 6],
	                  [7, 8, 9]], dtype=torch.float)
	norm_inf = np.linalg.norm(A, ord=np.inf)
	print(norm_inf)
	# 输出 24,即 max{1+2+3, 4+5+6, 7+8+9}

同理,ord='-inf'表示取最小值。

需要注意的是,计算矩阵的无穷范数比计算其他范数更加简单和快速,因为只需要对每一列的绝对值相加,然后取其中的最大值即可。

L1范数


L1 范数(L1 norm)是指向量中各个元素的绝对值之和,也称为曼哈顿距离(Manhattan distance)或城市街区距离(city block distance)。

L1 范数可以被用于衡量向量或矩阵中各个元素的绝对大小,具有一些特殊的性质,例如对于稀疏向量,它的 L1 范数更容易被最小化,因为它倾向于将向量的一些元素设为 0。

与无穷范数类似,L1 范数也具有一些重要的性质,包括非负性、齐次性、三角不等式和矩阵乘法性质。在矩阵计算和优化中,L1 范数也有广泛的应用。例如,在稀疏信号处理中,可以使用 L1 范数来促进信号的稀疏性;在机器学习中,可以使用 L1 范数作为正则化项来防止过拟合。

对于一个 m × n m \times n m×n的矩阵 A A A,它的 L1 范数定义为:

∣ A ∣ 1 = max ⁡ 1 ≤ j ≤ n ∑ i = 1 m ∣ a i j ∣ |A|_1 = \max_{1\leq j\leq n} \sum_{i=1}^{m} |a_{ij}| A1=1jnmaxi=1maij

其中, j j j表示矩阵 A A A的第 j j j列, ∑ i = 1 m ∣ a i j ∣ \sum_{i=1}^{m} |a_{ij}| i=1maij表示第 j j j 列中各个元素的绝对值之和。换句话说,L1 范数是将每一列的绝对值相加,然后取其中的最大值。

PyTorch 中其对应的参数为ord='1',例如:

	A = torch.tensor([[1, 2, 3],
	                  [4, 5, 6],
	                  [7, 8, 9]],dtype=torch.float)
	norm_1 = np.linalg.norm(A, ord=1)
	print(norm_1)
	# 输出 18,即 max{1+4+7, 2+5+8, 3+6+9}

同理ord=-1表示取最小值。

L2范数


L2范数(L2 norm)也称为谱范数(spectral norm),或者最大奇异值范数(maximum singular value norm),是矩阵范数中的一种。

L2范数可以被用于衡量向量的大小,也可以被用于衡量向量之间的距离,具有一些特殊的性质,例如在最小化误差的时候,L2范数可以找到唯一的最小化点,而L1范数可能有多个最小化点。

对于一个 m × n m \times n m×n 的矩阵 A A A,它的L2范数定义为:

∣ A ∣ 2 = σ max ⁡ ( A ) |A|_2 = \sigma_{\max}(A) A2=σmax(A)
其中, ∣ ⋅ ∣ 2 |\cdot|_2 2 表示向量的 L2 范数, σ max ⁡ ( A ) \sigma{\max}(A) σmax(A) 表示矩阵 A A A 的最大奇异值(singular value)。

在实际应用中,计算矩阵的 L2 范数可以使用 SVD 分解,例如:

PyTorch 中其对应的参数为ord='2',例如:

	A = torch.tensor([[1, 2, 3],
	                 [4, 5, 6], 
	                 [7, 8, 9]], dtype=torch.float)
	norm_2 = torch.linalg.norm(A, ord=2)
	u, s, v = torch.svd(A)
	print(s)
	print(norm_2)
	# 输出 16.84810352325432

同理ord=-2表示取最小奇异值。

原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗👀
如果文章对你有帮助,记得一键三连❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python使用pytorch深度学习框架构造Transformer神经网络模型预测红酒分类例子

1、红酒数据介绍 经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量&a…

Python之硬汉巴特勒

一、前言 2023年4月27日,NBA季后赛热火4:1淘汰雄鹿,实现黑八。全NBA联盟最硬气的男人——巴特勒,再次向全世界证明了他是NBA最硬气的男人。上一场刚狂轰56分大比分逆转雄鹿,这一场又是带领球队打出了血性,超高难度绝平…

快速搭建简单图床 - 远程访问本地搭建的EasyImage图床【内网穿透】

文章目录 1.前言2. EasyImage网站搭建2.1. EasyImage下载和安装2.2. EasyImage网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 一个好的图床,是网站或者文章图片能稳定显示的关键,…

驱动管理软件推荐

最近发现电脑右下角的任务栏中有一个叹号图标,如下: 点进去之后发现是Windows自家的安全中心的内核隔离出现了点问题,内核隔离功能打不开 点击“查看不兼容的驱动程序”,发现是一些驱动作祟 我的电脑中显示了好多不兼容的驱动程序…

跟着我学习 AI丨语音识别:将语音转为数字信号

语音识别是一种人工智能技术,其主要目的是将人类说话转化为计算机可以理解的信息。语音识别技术的应用非常广泛,包括智能家居、汽车导航、语音搜索、人机交互、语音翻译等。 语音识别的技术原理 语音识别的技术原理是将人类的语音信号转化为数字信号。这…

『python爬虫』06. 数据解析之re正则解析(保姆级图文)

目录 1. 什么是re解析2. 正则规则元字符量词匹配模式测试 3. 正则案例4. re模块的使用4.1 findall: 匹配字符串中所有的符合正则的内容4.2 finditer: 匹配字符串中所有的内容[返回的是迭代器]4.3 search, 找到一个结果就返回, 返回的结果是match对象4.4 match 从头开始匹配&…

Windows forfiles命令详解,Windows按时间搜索特定类型的文件。

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 forfiles 一、结果输出格式二、按时间搜索三、搜索指定类型文件四、批量删除文件 forfile…

Ubuntu远程SSH连接与远程桌面连接

目录 一、远程桌面连接 二、远程SSH连接 1、安装客户端 2、安装服务端 3、SSH客户端和服务端的区别 一、远程桌面连接 首先需要在Ubuntu里进行些设置,点击界面右上角的控制区,选择设置选项; 弹出界面进入网络中,点击设置图…

【致敬未来的攻城狮计划】— 连续打卡第十八天:FSP固件库开发GPT — PWM输出波形 — LED呼吸灯

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

Rust开发环境搭建到运行第一个程序HelloRust

一、Rust语言 1.1 Rust语言介绍 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于2014年 9月。Rust 的编…

《ADC和DAC的基本架构》----学习记录(二)

2 模数转换器 2.1 ADC架构I:Flash转换器 2.1.1 比较器:1位ADC 转换开关是 1 位 DAC,而比较器是 1 位 ADC,如图所示。如果输入超过阈值,输出即会具有一个逻辑值,而输入低于阈值时输出又会有另一个值。此外…

寻找2020+跳蚱蜢(蓝桥杯JAVA解法)

目录 寻找2020:用户登录 题目描述 运行限制 跳蚱蜢:用户登录 题目描述 运行限制 寻找2020:用户登录 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵&a…

使用ChatGPT生成了十种排序算法

前言 当前ChatGPT非常火爆,对于程序员来说,ChatGPT可以帮助编写很多有用的代码。比如:在算法的实现上,就可以替我们省很多事。所以,小试牛刀一下,看看ChatGPT生成了排序算法怎么样? 简介 排序…

网站搭建之配置tomcat

【 本次配置架构】 【安全配置】 1.删除后台登录 在tomcat安装目录下的/conf文件下编辑tomcat-users.xml,删除里面带有标签的内容块,默认这部分是被注释了的。注释了任然会显示后台登录,需要彻底删除。 进入末行模式,也就是使用vim进去后&…

Flask开发之环境搭建

目录 1、安装flask 2、创建Flask工程 ​编辑 3、初始化效果 4、运行效果 5、设置Debug模式 6、设置Host 7、设置Port 8、在app.config中添加配置 1、安装flask 如果电脑上从没有安装过flask,则在命令行界面输入以下命令: pip install flask 如果电…

【MFAC】基于偏格式动态线性化的无模型自适应控制(Matlab代码)

例题来源:侯忠生教授的《无模型自适应控制:理论与应用》(2013年科学出版社)。 👉对应书本 4.3 单输入单输出系统(SISO)偏格式动态线性化(PFDL)的无模型自适应控制(MFAC) 上一篇博客介绍了基于紧格式动态线性化的无模型…

C++每日一练:打家劫室(详解动态规划法)

文章目录 前言一、题目二、分析三、代码总结 前言 这题目出得很有意思哈,打劫也是很有技术含量滴!不会点算法打劫这么粗暴的工作都干不好。 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 题目名称: 打家…

实现Newton方法的最小化函数(pytorch)

首先,我们要明确需求 def newton(theta, f, tol 1e-8, fscale1.0, maxit 100, max_half 20) ● theta是优化参数的初始值的一个向量。 ● f是要最小化的目标函数。该函数应将PyTorch张量作为输入,并返回一个张量。 ● tol是收敛容忍度。 ● fscale 粗…

【Leetcode -328.奇偶链表 - 725.分隔链表】

Leetcode Leetcode -328.奇偶链表Leetcode - 725.分隔链表 Leetcode -328.奇偶链表 题目:给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &am…

苏州百特电器有限公司网站设计

苏州百特电器有限公司网站设计 五一假期作业企业门户网站布局设计 基于 <div> 的企业门户网站设计 by 小喾苦 我这里仅仅是使用 html css 来实现这个网站的效果&#xff0c;并不是宣传这个网站(现在这个网站已经过时并且无法进入) 实现效果 https://xkk1.github.io/…