张量(二):张量分解(tensor decomposition)

2023-11-11

与矩阵分解一样,我们希望通过张量分解去提取原数据中所隐藏的信息或主要成分。当前主流的张量分解方法有CP分解,Tucker分解,t-SVD分解等,更新的方法大多是在他们的基础上做进一步的改进或引用。因此,张量分解也是张量算法的基础。下面分别做介绍。

目录

一、CP分解

二、Tucker分解

三、t-SVD分解

四、张量链分解

五、张量环分解


一、CP分解

CP分解是将任意高阶张量分解成多个秩为1的“因子张量”之和。如下图,每个因子张量的单个维度上秩都为1。若一个三维张量的数据为\textit{X} \in \mathbb{R}^{\mathit{I}\times \mathit{J}\times \mathit{K}},则其CP分解表达式为\mathit{X}=\sum_{r=1}^{R}a_{r}\circ b_{r}\circ c_{r},其中R为张量秩的大小,向量之间的乘积是外积的形式。虽然CP分解的表达式很简洁,但对其秩的求解却是一个NP-hard的问题,很难确定张量秩的大小。

CP分解模型图


二、Tucker分解

Tucker分解又名高阶奇异值分解(higher-order SVD,HOSVD)。众所周知,奇异值分解(SVD)是将矩阵分解为两个因子矩阵和一个奇异值对角矩阵,扩展到高阶领域就是将张量分解成一个核张量和多个正交因子矩阵的模式积。同时,CP分解是一种特殊的Tucker分解。示意图如下。

Tucker分解示意图

对一个N阶张量\mathit{X}\in \mathbb{R}^{\mathit{I_{1}\times \mathit{I_{2}\times \cdots \times \mathit{I_{N}}}}},Tucker分解表达式为\mathit{X}=\mathfrak{g}\times _{1}\mathbf{U}^{\left ( 1 \right )}\times_{2}\mathbf{U}^{\left ( 2 \right )}\cdots \times _{N}\mathbf{U}^{\left ( N \right )}。Tucker分解中Tucker秩可以用核范数之和来近似表示,其定义为\sum _{k}\left \| \mathbf{X}_{\left ( k \right )} \right \|,其中\left \| \mathbf{X}_{\left ( k \right )} \right \|表示展开矩阵\mathbf{X}_{\left ( k \right )}的奇异值之和。在分解模型图中,三个因子矩阵分别是三个不同空间对应的正交基,它们秩的大小决定了张量的Tucker秩。

Tucker分解可以用交替最小二乘法来求解。其基本思想是利用在第k次求出的因子矩阵\mathbf{U}_{k}^{\left ( i+1 \right )}\cdots \mathbf{U}_{k}^{\left ( N \right )}和在第k+1次更新的因子矩阵\mathbf{U}_{k+1}^{\left ( 1 \right )}\cdots \mathbf{U}_{k+1}^{\left ( i-1 \right )}来求解因子矩阵\mathbf{U}_{k+1}^{i}的最小二乘解:

\hat{\mathbf{U}}_{k+1}^{\left ( i \right )}=argmin\left \| \mathit{X}-f\left ( \mathbf{\mathbf{U}_{k+1}^{\left ( 1 \right )}\cdots \mathbf{U}_{k+1}^{\left ( i-1 \right )},\mathbf{U}^{\left ( i \right )},\mathbf{U}_{k}^{\left ( i+1 \right )}\cdots \mathbf{U}_{k}^{\left ( N \right )}} \right ) \right \|_{2}^{2}

对于每次迭代和每个因子矩阵交替使用最小二乘法,直到满足算法的收敛准则。算法流程图如下。

HOSVD算法流程图

 


三、t-SVD分解

t-SVD分解是建立在新定义的张量积(t-product)基础上的新的分解框架,主要针对三维张量数据的分解。

  • 张量积:对张量\mathit{A}\in \mathbb{R}^{\mathit{I}_{1}\times \mathit{I}_{2}\times \mathit{I}_{3}}\mathit{B}\in \mathbb{R}^{\mathit{I}_{2}\times \mathit{I}_{4}\times \mathit{I}_{3}},张量积定义为\boldsymbol{l}=\mathit{A}\ast \mathit{B}\in \mathbb{R}^{\mathit{I}_{1}\times \mathit{I}_{4}\times \mathit{I}_{3}}。即不同形式展开矩阵之间的乘积:

\boldsymbol{l}=\mathit{A}\ast \mathit{B}=fold\left ( circ\left ( \mathit{A} \right ) \cdot unfold\left ( \mathit{B} \right )\right )

等价于两个张量中管纤维之间的圆周卷积:

\boldsymbol{l}\left ( i,j,: \right )= \sum_{k=1}^{n_{2}}\mathit{A}\left ( i,k,: \right )\bullet \mathit{B}\left ( j,k,: \right )

这里的unfold和fold分别表示张量的展开和叠加操作,二者互为逆操作。circ()表示循环展开操作,定义如下:

循环展开公式

对于向量之间的圆周卷积操作\bullet可以用傅里叶变换(DFT)来计算,即两个向量进行傅里叶变换后对应位置元素的乘积通过反傅里叶变换(IDFT)得到。

  • t-SVD分解:给定张量\mathit{A}\in \mathbb{R}^{\mathit{N}_{1}\times \mathit{N}_{2}\times \mathit{N}_{3}},它的t-SVD分解为:

\mathit{A}=\mathit{U}\ast \mathit{S}\ast \mathit{V}^{T}

其中U和V是正交张量,大小分别为N_{1}\times N_{1}\times N_{3}N_{2}\times N_{2}\times N_{3}。S是f-对角张量,大小为N_{1}\times N_{2}\times N_{3}。下图为t-SVD分解的算法流程图。其中fft为DFT的快速算法。

t-SVD算法流程图

主要步骤是在张量第三个维度进行FFT变换,然后对每个正面切片矩阵进行SVD分解就可以得到因子矩阵。t-SVD分解由于是对每个正面切片矩阵分别进行SVD分解,互相独立,因此可以用并行计算的方式来提高计算效率。但当数据维度过大时,消耗时间会显著增加。下图为t-SVD分解模型图。

t-SVD分解模型图

 


四、张量链分解

对于张量A\in \mathbb{R}^{I_{1}\times \cdots \times I_{N}},张量链分解定义为

A\left ( i_{1},i_{2},\cdots ,i_{N} \right )=U_{1}\left ( :,i_{1},: \right )U_{2}\left ( :,i_{2},: \right )\cdots U_{N}\left ( :,i_{N},: \right )

张量链的秩定义为rank_{TT}\left ( A \right )=\left ( S_{1},S_{2},\cdots S_{N+1} \right ),其中S_{1}=S_{N+1}=1。示意图如下

张量链模型图


五、张量环分解

对于张量A\in \mathbb{R}^{I_{1}\times \cdots \times I_{N}},张量环分解定义为

A\left ( i_{1},i_{2},\cdots ,i_{N} \right )=tr\left ( U_{1}\left ( :,i_{1},: \right )U_{2}\left ( :,i_{2},: \right )\cdots U_{N}\left ( :,i_{N},: \right ) \right )

张量环的秩定义为rank_{TR}\left ( A \right )=\left ( S_{1},S_{2},\cdots ,S_{N} \right ),其中S_{N+1}=S_{1}。示意图如下

张量环模型图

张量链是当S_{1}=1时的特殊的张量环。张量链和张量环都属于简单的张量网络分解,并不是我所探讨问题的重点,因此后面的文章将不再涉及。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

张量(二):张量分解(tensor decomposition) 的相关文章

随机推荐

  • 华为OD机试真题-最大花费金额-2023年OD统一考试(B卷)

    题目描述 双十一众多商品进行打折销售 小明想购买自己心仪的一些物品 但由于受购买资金限制 所以他决定从众多心仪商品中购买三件 而且想尽可能的花完资金 现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额 输入描述 输入第一行为一维整型数
  • 区块链技术生态的设计

    区块链技术生态的设计 详见 区块链技术生态
  • String-字符串替换

    例子 原始字符串 String demo aback 文章目录 一 replace 字符或者字符串替换 1 使用方法 2 源码 二 replaceAll 多个正则替换 1 使用方法 2 源码 三 replaceFirst 首次出现替换 1
  • 移动端兼容宝典大全,专治各种不适

    古人学问遗无力 少壮功夫老始成 移动端兼容宝典大全 专治各种不适 你是否也曾为浏览器各种的不兼容而苦恼 尤其是IE这个牛皮癣 这篇文章可能会给你帮助哦 常码字不易 出精品更难 没有特别幸运 那么请先特别努力 别因为懒惰而失败 还矫情地将原因
  • 小程序调整文章正文样式:

    1 官网地址 npm install github markdown css 2 案例 右键 gt 另存为 gt 导入 使用css文件 引入的css已markdown body的class名开头 适配时禁止github markdown转换
  • Openlayers API-Select点击要素图层

    Select是交互事件中的一种 用于选择矢量图层上的几何图形 添加选择交互事件后 点击地图上的几何图形或者将鼠标移动到几何图形上时 将获取到几何图形的相关信息 我们可以将选择的几何图形进行高亮显示 使用起来很简单 首先创建一个Select对
  • Xcode MacOS与clang c++版本关系

    关于clang https en wikipedia org wiki Clang 7 September 2017 Clang 5 0 0 released 19 January 2018 Clang becomes default co
  • QT系列第2节 QT中元对象系统

    QT是在标准C 上进行了扩展 所以就有自己的特性 其中元对象系统就是其一 元对象系统有点类似于java和go语言中的反射 让我们在编程时解决问题多了些方法和思路 关于元对象可以简单总结出以下内容项 目录 一 元对象要点总结 二 示例代码 一
  • SVN的常见用法

    3 发生冲突后 执行 更新 操作后 对于发生冲突的文件 SVN会加上冲突标记 冲突解决 Tortoise 编辑冲突 找到这个文件 右键选择Edit conflicts 按钮 弹出编辑冲突的界面 手工将前一版本中的修改整合到自己的文件中 选择
  • apache2.4+php5.4 安装配置

    尝试一个新东西有时候会遇到很多问题 apache2 4 php5 4 安装完成后 记录下解决的办法 1 安装apache2 4需要 microsoft visual C 2010 x86 运行库 2 apache2 4 加载php5 4 需
  • 连接oracle出现ORA-12514错误

    1 PL SQL连接oracle出现ORA 12514错误 注意看图中画出的重点 2 java 连接的时候报错 连接URL option url jdbc oracle thin 47 97 11 138 1522 XE java sql
  • gitlab合并不同分支的(二)种方法 git merge 分支

    gitlab分支 git merge 合并 文章目录 gitlab分支 git merge 合并 前言 一 第一种gitlab工具合并的方法 二 代码提交进行合并 总结 前言 提示 遇到的问题 以前在公司的开发 多人开发的时候是在统一个 m
  • 微信小程序 -- ios 底部小黑条安全距离兼容解决方案(转载)

    在苹果 iPhoneX iPhone XR等设备上 可以看到物理Home键被取消 改为底部小黑条替代home键功能 微信小程序和 h5 网页需要针对这种情况进行适配 否则可能会遇到底部按钮或选项卡栏与底部黑线重叠的情况 如下图 在微信小程序
  • 原来还有linux kernel api

    linux kernel api http www gnugeneration com books linux 2 6 20 kernel api 居然有人将linux kernel api给列出来了 这样编写驱动程序就是和编写普通程序一样
  • 区块链行业前景还好吗?区块链技术有没有经过时间的检验?

    一直有人在发问 被各种科技大佬们炒得那么火热的区块链技术 说到底 跟我们普通的 市井小民 有什么切身的关系利益吗 各位大佬们一口一个 改变未来 革命未来 未来又在哪里 各种吃瓜群众们还在观望的时候 区块链行业的小伙伴们 已经将区块链技术慢慢
  • Java:数值-字符串转换(String转Double)

    代码如下 String ss 3 141592653 double value Double valueOf ss toString
  • 【JavaScript——牛客网算法No.HJ26】字符串排序(字符串里英文字母按字典顺序重新排列,其他字符保持原位)附:详细排坑经历

    No HJ26 字符串排序 problem description 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如 输入 Type 输出 epTy 规则 2 同一个英文字母的大小写
  • 4.1.3.1Spring源码解析——createBean方法细节之doCreateBean

    先贴代码 doCreateBean方法位于AbstractAutowireCapableBeanFactory方法中 前面已经解析了CreateBean方法 可以点这里传送CreateBean方法解析 protected Object do
  • 剖析算法:解决问题的艺术

    前言 一 实战中的精选算法 工作和学习的无法替代的助手 1 1 效率之王 排序算法 如快速排序和归并排序 1 2 寻路之魔 图算法 如 Dijkstra 算法和贝尔曼 福特算法 1 3 问题解决之神 动态规划算法在复杂问题中的应用 1 4
  • 张量(二):张量分解(tensor decomposition)

    与矩阵分解一样 我们希望通过张量分解去提取原数据中所隐藏的信息或主要成分 当前主流的张量分解方法有CP分解 Tucker分解 t SVD分解等 更新的方法大多是在他们的基础上做进一步的改进或引用 因此 张量分解也是张量算法的基础 下面分别做