张量分解(Cp、Tuker、Block-Term)

news2024/11/16 15:42:19

张量

张量是向量或矩阵在维度空间上的高阶扩展。
一个 ( p , q ) (p,q) (p,q)型的张量 T T T被定义为一个多重线性映射。 T : V ∗ × ⋯ × V ∗ × V × ⋯ × V ↦ R , T:V^* \times \dots \times V^* \times V \times \dots \times V \mapsto \R, T:V××V×V××VR,
其中 V V V 是向量空间, V ∗ V^∗ V 是其对偶空间。

有两种定义张量的方法:

  • 通常定义张量的物理学或传统数学方法,是把张量看成一个多维数组,当变换坐标或变换基底时,其分量会按照一定变换的规则,这些规则有两种:即协变或逆变转换。
  • 通常现代数学中的方法,是把张量定义成某个向量空间或其对偶空间上的多重线性映射,这向量空间在需要引入基底之前不固定任何坐标系统。
    在这里插入图片描述

1.一阶张量(向量)
T j = [ T 1   T 2   . . . . . .   T n ] T_j = [T_1 \space T_2\space ...... \space T_n] Tj=[T1 T2 ...... Tn]
一阶张量(向量)可以用一个行矩阵表示。

2.二阶张量
T j = [ [ T 1   T 2   T 3 ] [ T 4   T 5   T 6 ] . . . . . . [ T n − 2   T n − 1   T n ] ] T_j=[[T_1 \space T_2 \space T_3][T_4 \space T_5 \space T_6]......[T_{n-2} \space T_{n-1} \space T_n]] Tj=[[T1 T2 T3][T4 T5 T6]......[Tn2 Tn1 Tn]]
一个二阶张量可以用一个矩阵表示。

import numpy as np
x = np.array([[5, 78, 2, 34, 0],
              [6, 79, 3, 35, 1],
              [7, 80, 4, 36, 2]])
print(x.ndim)

3.三阶张量
“n张平面”构成一个“立方体”

import numpy as np
x = np.array([[[5, 78, 2, 34, 0],
               [6, 79, 3, 35, 1],
               [7, 80, 4, 36, 2]],
              
              [[5, 78, 2, 34, 0],
               [6, 79, 3, 35, 1],
               [7, 80, 4, 36, 2]],
        
              [[5, 78, 2, 34, 0],
               [6, 79, 3, 35, 1],
               [7, 80, 4, 36, 2]]])
print(x.ndim)

4.高阶张量
将多个 3D 张量组合成一个数组,可以创建一个 4D 张量,以此类推。

实例:

  • 向量数据:2D 张量,形状为 (samples, features) 。
  • 时间序列数据或序列数据:3D 张量,形状为 (samples,
    timesteps, features) 。
  • 图像:4D张量,形状为 (samples, height, width, channels)
    或 (samples, channels, height, width) 。
  • 视频:5D张量,形状为 (samples, frames,
    height, width, channels) 或 (samples,frames, channels, height, width)。

张量操作

纤维(Fibre)

纤维是指从张量中抽取向量的操作。在矩阵中固定其中一个维度,可以得到行或者列。类似于矩阵操作,固定其它维度,只保留一个维度变化,可以得到有纤维的概念。
假设存在三阶张量 A ∈ R i × j × k \mathcal A \in \R^{i \times j \times k} ARi×j×k,其列纤维、行纤维和管纤维分别为 A ( : , j , k ) 、 A ( i , : , k ) \mathcal A(:,j,k)、\mathcal A(i,:,k) A(:,j,k)A(i,:,k) A ( i , j , : ) 。 \mathcal A(i,j,:)。 A(i,j,:)

在这里插入图片描述

切片(Slice)

切片操作是指在张量中抽取矩阵的操作。将其中一维固定,变化的维度成为两个维度,可以得到三种张量切片。其中 A ( i , : , : ) 、 A ( : , j , : ) \mathcal A(i,:,:)、\mathcal A(:,j,:) A(i,:,:)A(:,j,:) A ( : , : , k ) \mathcal A(:,:,k) A(:,:,k)分别表示三维张量的水平切片、侧面切片和前向切片。

在这里插入图片描述

张量分解

cp分解

CP分解就是将一个张量分解成多个单秩张量的和。
在这里插入图片描述

给定一个三阶张量 X ∈ R I × J × K \mathcal X \in \R^{I \times J \times K} XRI×J×K 将一个张量表示成有限个秩一张量之和: X ≈ a 1 ∘ b 1 ∘ c 1 + a 2 ∘ b 2 ∘ c 2 + ⋯ + a R ∘ b R ∘ c R = ∑ r = 1 R a r ∘ b r ∘ c r \mathcal X \approx a_1 \circ b_1 \circ c_1 +a_2 \circ b_2 \circ c_2 + \dots +a_R \circ b_R \circ c_R = \sum_{r=1}^{R}a_r \circ b_r \circ c_r Xa1b1c1+a2b2c2++aRbRcR=r=1Rarbrcr,
如果记 A = [ a 1   a 2   . . .   a R ]   B = [ b 1   b 2   . . .   b R ]   C = [ c 1   c 2   . . .   c R ] \\ A=[a_1 \space a_2 \space ... \space a_R] \ B=[b_1 \space b_2 \space ... \space b_R] \ C=[c_1 \space c_2 \space ... \space c_R ] A=[a1 a2 ... aR] B=[b1 b2 ... bR] C=[c1 c2 ... cR] A , B , C A,B,C A,B,C为因子矩阵,则张量可以表示为: X ≈ ⟦ A , B , C ⟧ = ∑ r = 1 R a r ∘ b r ∘ c r \mathcal X \approx \llbracket A,B,C\rrbracket = \sum_{r=1}^{R}a_r \circ b_r \circ c_r X[[A,B,C]]=r=1Rarbrcr即为 cp 分解

CP分解的目标是通过使用低秩矩阵的乘积来近似原始张量,以达到降低维度和提取张量中的潜在结构的目的。

Tuker 分解

HOSVD分解又称作Tucker分解。HOSVD全名为high order SVD,即高阶的SVD。
Tucker分解可以看作是主成分分析(PCA)的一种高阶版本,其将张量分解为一个核张量与每一维度上对应矩阵的乘积。
以三阶张量 X ∈ R I × J × K \mathcal X \in \R^{I\times J \times K} XRI×J×K为例,其 Tuker 分解为: X ≈ G × 1 A × 2 B × 3 C = ∑ p = 1 P ∑ q = 1 Q ∑ r = 1 R = g p q r a p ∘ b q ∘ c r = ⟮ G ; A , B , C ⟯ \mathcal X \approx \mathcal G \times_1A \times_2 B \times_3C = \sum_{p=1}^{P}\sum_{q=1}^{Q}\sum_{r=1}^{R}=g_{pqr}a_p \circ b_q \circ c_r = ⟮\mathcal G;A,B,C⟯ XG×1A×2B×3C=p=1Pq=1Qr=1R=gpqrapbqcr=G;A,B,C其中, A ∈ R I × P , B ∈ R J × Q , C ∈ R K × R A\in \R^{I \times P},B\in \R^{J \times Q},C\in \R^{K \times R} ARI×P,BRJ×Q,CRK×R是不同维度上的因子矩阵,这些矩阵通常被认为是不同维度上的主成分。 G ∈ R P × Q × R \mathcal G \in \R^{P \times Q \times R} GRP×Q×R 称为核张量,其中每个元素代表了不同成分之间的交互程度。

从元素的角度看,Tuker 分解可以写为 x i j k = ∑ p = 1 P ∑ q = 1 Q ∑ r = 1 R g p q r a i p b j q c k r , i = 1 , 2 , . . . , I , j = 1 , 2 , . . . , J , k = 1 , 2 , . . . , K x_{ijk}=\sum_{p=1}^{P}\sum_{q=1}^{Q}\sum_{r=1}^{R}g_{pqr}a_{ip}b_{jq}c_{kr},i=1,2,...,I,j=1,2,...,J,k=1,2,...,K xijk=p=1Pq=1Qr=1Rgpqraipbjqckr,i=1,2,...,I,j=1,2,...,J,k=1,2,...,KP,Q 和 R 是因子矩阵 A,B,C \textbf{A,B,C} A,B,C的成分数(例如因子矩阵的列数)。如果 P,Q 和 R 小于 I,J,K,那么张量 G \mathcal{G} G 可以被认为是张量 X \mathcal{X} X 的压缩版本。

Tucker分解的目标是通过使用核张量和模式矩阵的乘积来近似原始张量,以达到降低维度、提取潜在特征和压缩数据的目的。

BTD 分解

BTD分解是一种将高阶张量分解为块张量乘积的方法。
定义一个张量 T ∈ R I × J × K \mathcal T \in \R^{I\times J \times K} TRI×J×K,在CP分解中,张量 T \mathcal T T 分解为 R 个秩一张量的形式。低秩往往是一些局部的特征,但是在一些应用中,我们想要得到多尺度的特征,这个时候CP分解就无法直观地做到了。

如果CP分解中的一个秩一张量与另一个秩一张量的转置的乘积不是一个秩一的矩阵,而是一个秩为 K 的矩阵,那么这两个向量则应该是秩为 L r L_r Lr 的矩阵。
在这里插入图片描述

数学表达式为 T = ∑ r = 1 R D r × 1 A r × 2 B r × 3 C r \mathcal T =\sum_{r=1}^{R}\mathcal D_r \times_1 A_r \times_2 B_r \times_3 C_r T=r=1RDr×1Ar×2Br×3Cr其中, D r ∈ K K × M × N \mathcal D_r \in {\mathbb K} ^{K \times M \times N} DrKK×M×N 是 满秩 Rank − ( L r , M r , N r ) \text {Rank}-(L_r,M_r,N_r) Rank(Lr,Mr,Nr) 张量,而 A r ∈ K I × L ( I ≥ L ) , A_r \in \mathbb K^{I \times L}(I \geq L), ArKI×L(IL), B r ∈ K J × M ( J ≥ M ) , B_r \in \mathbb K^{J \times M}(J \geq M), BrKJ×M(JM), C r ∈ K K × N ( K ≥ N ) C_r \in \mathbb K^{K \times N}(K \geq N) CrKK×N(KN)都是全列秩,且 1 ≤ r ≤ R . 1 \leq r \leq R. 1rR.

BTD 分解可以看作是 CP 分解和 Tucker 分解的组合形式:
当 R = 1 的时候,成员张量只有一个,此时这个分解就是 Rank − ( L , M , N ) \text{Rank}−(L,M,N) Rank(L,M,N) 的 Tucker 分解;
当每一个成员张量是一个秩一分解的时候,该分解退化为一个CP分解 (CP分解是将一个张量 T \mathcal T T 分解为 R 个秩为1的张量形式)

BTD分解的目标是通过使用块张量的乘积来近似原始张量,以实现降低维度、提取潜在特征和压缩数据的目的。BTD分解可以看作是对高阶张量进行多维矩阵分解(Multilinear Matrix Decomposition)的推广。

维基百科:张量
博客:什么是张量(Tensor)
博客:张量分解算法

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

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

相关文章

用GPT4写2023高考语文作文,新课标I卷,Ⅱ卷

文章目录 新课标Ⅰ卷新课标Ⅱ卷总结 每年的高考语文题目都会是热议的话题,今年同样也不例外。但是今年讨论的话题除了作文题目本身之外,对于chatgpt写出的作文会是什么样子的也​让广大网友同样期待 新课标Ⅰ卷 好的故事,可以帮我们更好地表达…

chatgpt赋能python:Python怎么让结果同行输出

Python怎么让结果同行输出 在Python编程中,我们经常需要打印出一系列的结果并在同一行输出。这对于输出更为整洁的结果和提高代码清晰度都是非常有帮助的。下面就让我们来介绍一些实现这一功能的方法。 方法一:使用 end 参数 在Python的 print() 函数…

机器视觉_HALCON_模板匹配_1.CreateScaledShapeModel

文章目录 一、前言二、create_scaled_shape_model 算子2.1 名称2.2 算子签名2.3 描述2.3.1 输入参数详述2.3.2 完整的预生成模型 2.4 执行信息2.5 参数2.6 执行结果2.7 可能的前驱算子2.8 可能的后继算子2.9 替代选择 一、前言 在HALCON算子手册中,对算子的介绍通常…

chatgpt赋能python:Python访问数据库

Python访问数据库 Python是一种高级编程语言,在数据分析、科学计算和Web开发等领域都有广泛的应用。Python还有一个很强的优势就是它能够方便地访问数据库。在本文中,我们将介绍Python如何与数据库交互以及Python数据库API的使用。 Python的数据库API …

chatgpt赋能python:Python如何访问数组中的元素

Python如何访问数组中的元素 Python是一种高级编程语言,访问数组中的元素也非常简单。 它提供了一种简单而灵活的方式访问数组中的元素,这使得在Python中使用数组变得非常容易。在本文中,我们将介绍如何在Python中访问数组中的元素以及如何使…

DecimalFormat基本用法

1.保留两位小数(截断) 下面展示一些 内联代码片。 double num 11.256;DecimalFormat df new DecimalFormat("#.##");//指定RoundingModedf.setRoundingMode(RoundingMode.DOWN);String str df.format(num);double formatNum Double.parseDouble(str)…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1. 关于变量,下列描述错误的是?(A)(2分) (变量那一栏…

对于ChatGPT,马化腾、马斯克等科技大佬竟然这么说!

ChatGPT一夜爆火之后,国内几乎是各大互联网公司都在摩拳擦掌,跃跃欲试,从百度的文心一言,到阿里的通义千问,还有360的智脑,讯飞的星火,语言大模型如雨后春笋一般涌出,犹如2014年新能…

代码审计——未授权访问详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通…

express 基础知识实战

1 Express框架介绍与安装 1.1 Express 安装 生成配置文件package.json npm init --yes安装 Express 框架,就是使用 npm 的命令。 npm install express --save yarn add express --save初次使用 const express require(express) //实例化express const app ex…

全志V3S嵌入式驱动开发(u盘写读)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于现在的soc来说,基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下,host模式,就…

数据库原理与应用第2章作业

数据库原理与应用第2章作业 一.单选题(共15题,45分)二.填空题(共5题,25分)三.简答题(共1题,10分)四.计算题(共1题,20分) 一.单选题(共15题,45分) 1.(单选题,3分)关系数据库管理系统应能实现的专门关系运算…

chatgpt赋能python:Python怎么让输出换行?

Python怎么让输出换行? 对于有10年python编程经验的工程师,输出换行是一项基本的操作。在本篇文章中,我们将讨论Python中的换行方法,以便您可以更好地控制输出。 什么是Python的换行符? 在Python中,换行…

SPI总线

目录 声明 1、 SPI简介 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 2.2采用同步方式(Synchronous)传输数据 2.3数据交换(Data Exchanges) 2.4 SPI有四种传输模式 2.5 SPI只有主模式和从模式之分。 3、 工作机制 3.1概述 3.2 Timing 声明 转自&#xf…

多层感知机与深度学习算法概述

多层感知机与深度学习算法概述 读研之前那会儿我们曾纠结于机器学习、深度学习、神经网络这些概念的异同。现在看来深度学习这一算法竟然容易让人和他的爸爸机器学习搞混…可见深度学习技术的影响力之大。深度学习,作为机器学习家族中目前最有价值的一种算法&#…

6.compute部署nova服务

Nova-compute 是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理着虚拟机实例的生命周期,在计算节点上运行,负责管理节点上的实例Instance,例如:创建、关闭、重启、挂起、恢复、中止、调整大小、迁…

chatgpt赋能python:Python计算圆的周长

Python计算圆的周长 Python是一种简单易学的编程语言,被广泛应用于各种领域,包括科学、数据分析、网站开发等等。在本文中,我们将介绍如何使用Python计算圆的周长。 什么是圆的周长 圆的周长是指圆周的长度,也就是圆内任意两点…

chatgpt赋能python:Python计算加法-简单易学,快速实现

Python计算加法 - 简单易学,快速实现 介绍 Python是一种高级编程语言,因其优雅简洁的语法和强大的功能而备受开发者的喜爱。Python不仅可以应用于数据科学领域,也广泛用于Web开发、网络编程、图形界面和游戏等领域。在这篇文章中&#xff0…

Java之异常

Java之异常 异常 抛出异常 所有标准异常类都有两个构造器:一个是默认构造器,另一个是接收字符串作为参数的构造器。使用throw关键字来抛出异常对象。可以抛出任何类型的Throwable对象,它是异常类型的根类。但是通常来说,我们对于…

【IC设计】数字IC设计读书笔记

文章目录 《专用集成电路设计实用教程》集成电路系统的组成集成电路的设计流程综合转化逻辑优化映射同步电路和异步电路亚稳态单时钟同步设计的时序约束目标库和初始环境设置DC如何计算每个逻辑单元的延迟(Cell Delay)?target librarylink li…