【Python/Pytorch - 网络模型】-- 高阶SVD算法

文章目录

文章目录

  • [00 写在前面](#00 写在前面)
  • [01 基于Python版本的高阶SVD算代码](#01 基于Python版本的高阶SVD算代码)
  • [02 HOSVD 的步骤](#02 HOSVD 的步骤)

00 写在前面

高阶奇异值分解(Higher-Order SVD,HOSVD)是一种将传统的奇异值分解(SVD)扩展到高阶张量的方法。它能够将一个高阶张量分解成一个核心张量和一组正交矩阵,类似于将矩阵分解成奇异值矩阵和两个正交矩阵。HOSVD 在多维数据分析、压缩和降维等领域有广泛应用。

01 基于Python版本的高阶SVD算代码

python 复制代码
import numpy as np
import tensorly as tl
from tensorly.decomposition import tucker

# Create a random 3rd-order tensor
tensor = np.random.rand(3, 4, 5)

# Perform HOSVD (Tucker decomposition)
core, factors = tucker(tensor, ranks=[3, 4, 5])

print("Core tensor shape:", core.shape)
print("Factor matrices shapes:", [factor.shape for factor in factors])

# Reconstruct the tensor
reconstructed_tensor = tl.tucker_to_tensor((core, factors))

# Verify reconstruction accuracy
print("Original tensor shape:", tensor.shape)
print("Reconstructed tensor shape:", reconstructed_tensor.shape)
print("Reconstruction error:", np.linalg.norm(tensor - reconstructed_tensor))

高阶奇异值分解 (HOSVD) 介绍

基本概念

HOSVD 的基本思想是将一个 N 维张量 X \mathcal{X} X 分解为一个核心张量 S \mathcal{S} S 和一组因子矩阵 U ( 1 ) , U ( 2 ) , ... , U ( N ) U^{(1)}, U^{(2)}, \ldots, U^{(N)} U(1),U(2),...,U(N) 的乘积,这些因子矩阵是正交的。具体来说,对于一个三阶张量 X \mathcal{X} X,HOSVD 可以表示为:

X = S × 1 U ( 1 ) × 2 U ( 2 ) × 3 U ( 3 ) \mathcal{X} = \mathcal{S} \times_1 U^{(1)} \times_2 U^{(2)} \times_3 U^{(3)} X=S×1U(1)×2U(2)×3U(3)

其中:

  • X \mathcal{X} X 是原始张量。
  • S \mathcal{S} S 是核心张量。
  • U ( i ) U^{(i)} U(i) 是正交矩阵,表示第 i i i 维的因子矩阵。
  • × i \times_i ×i 表示在第 i i i 维上的张量-矩阵乘积。

02 HOSVD 的步骤

  1. 构造模式矩阵

    • 对于每一个模式(维度),将张量展平为矩阵,称为模式矩阵。例如,对于一个三阶张量 X \mathcal{X} X,我们可以得到三个模式矩阵 X ( 1 ) , X ( 2 ) , X ( 3 ) X_{(1)}, X_{(2)}, X_{(3)} X(1),X(2),X(3)。
  2. 计算奇异值分解

    • 对每个模式矩阵进行奇异值分解(SVD),得到奇异值矩阵和左右奇异矩阵。对于模式矩阵 X ( i ) X_{(i)} X(i),可以得到 X ( i ) = U ( i ) Σ ( i ) ( V ( i ) ) T X_{(i)} = U^{(i)} \Sigma^{(i)} (V^{(i)})^T X(i)=U(i)Σ(i)(V(i))T。
  3. 构造因子矩阵

    • 从每个模式矩阵的 SVD 结果中提取左奇异矩阵 U ( i ) U^{(i)} U(i) 作为对应维度的因子矩阵。
  4. 计算核心张量

    • 使用张量-矩阵乘积计算核心张量 S \mathcal{S} S,即 S = X × 1 ( U ( 1 ) ) T × 2 ( U ( 2 ) ) T × 3 ( U ( 3 ) ) T \mathcal{S} = \mathcal{X} \times_1 (U^{(1)})^T \times_2 (U^{(2)})^T \times_3 (U^{(3)})^T S=X×1(U(1))T×2(U(2))T×3(U(3))T。
相关推荐
有为少年42 分钟前
Welford 算法 | 优雅地计算海量数据的均值与方差
人工智能·深度学习·神经网络·学习·算法·机器学习·均值算法
GISer_Jing1 小时前
跨境营销前端AI应用业务领域
前端·人工智能·aigc
Ven%1 小时前
从单轮问答到连贯对话:RAG多轮对话技术详解
人工智能·python·深度学习·神经网络·算法
山楂树の1 小时前
爬楼梯(动态规划)
算法·动态规划
OpenCSG1 小时前
OpenCSG社区:激发城市AI主权创新引擎
人工智能·opencsg·agentichub
谈笑也风生1 小时前
经典算法题型之复数乘法(二)
开发语言·python·算法
大厂技术总监下海1 小时前
没有千卡GPU,如何从0到1构建可用LLM?nanoChat 全栈实践首次公开
人工智能·开源
机器之心1 小时前
谁还敢说谷歌掉队?2025年,它打了一场漂亮的翻身仗
人工智能·openai
元智启1 小时前
企业AI智能体加速产业重构:政策红利与场景落地双轮驱动——从技术验证到价值交付的范式跃迁
人工智能·重构
智算菩萨1 小时前
强化学习从单代理到多代理系统的理论与算法架构综述
人工智能·算法·强化学习