张量分解系列:
张量分解(一):基础知识
张量分解(二):CP分解
张量分解(三):Tucker分解
张量分解(四):Tensor-train Decomposition
张量分解(五):Tensorizing Neural Network
张量分解(六):TTRNN model for video classification

这一篇文章主要讲解CP分解算法(CANDECOMP/PARAFAC decomposition).
首先,我们必须明确,CP分解是做了什么工作,目的是想干什么。
我来自问自答:CP分解是将一个高维的张量,分解成多个核的和,每个核是由向量的外积组成;通过这样的分解,我们可以大大地降低参数的维度。
其实,不止CP分解,其他的张量分解算法都是同个道理,只是所采用的分解方法不同而已。当然,这样的分解只是原来张量的近似,没办法保证完全复原。
从以上角度来说,张量分解的目的跟矩阵分解是相同的,只是一个是在二维上的分解,另一个是在高维上的分解而已。
好了,开始进入正题。简单来说,CP分解其实就是多个rank-one tensors的和。rank-one tensors请参考上一篇文章:张量分解(一):基础知识
一个三维张量的CP分解如下图所示:

用公式表达如下:

当然,我们还可以将张量X矩阵化:

至于怎么转换的,可能要看一下上一篇文章的Khatri-Rao product,这里不细说。
我们可以使用向量 λ \lambda λ对三维向量 a , b , c a,b,c a,b,c进行归一化:

当然,这是当核是三维的情况下,当核是N维时,同个道理:

以上,就是CP分解的介绍。
接下来,我将讲一下CP分解的优化。上面我们已经有了CP分解的形式了,那么我们怎么去优化所有参数,使得分解后跟分解前尽可能的相似呢?
一个常用的方法是使用交替最小二乘法(the alternating least squares,ALS)去优化。我们以三维张量为例,如下所示:

其中, X X X为已知的张量, X ^ \hat X X^为待优化的参数,已经被分解成向量外积的形式。
我们这里的优化方法是:先固定 B , C B,C B,C,优化 A A A;接着固定 A , C A,C A,C,优化 B B B;固定 A , B A,B A,B,优化 C C C;然后继续迭代,直到达到终止条件(达到迭代次数或者损失不再降低等)。
对于参数 A A A,完整的优化过程如下图所示:


参数 B , C B,C B,C同理,然后不断迭代即可。
N维tensor完整的交替最小二乘法优化CP分解参数的过程如下图:

以上,便是关于CP分解的所有内容。

参考:tensor decompositions and application

张量分解(二):CP分解相关推荐

  1. 张量分解算法(CP分解)

    博主今天阅读文献<PARAFAC-Based Channel Estimation for Intelligent Reflective Surface Assisted MIMO System ...

  2. 【张量分解(二)】CP分解

    本文是对论文Tensor Decompositions and Applications进行了翻译.整理.筛选和适当的补充,如何希望深入理解可以阅读原文. 相关文章: [张量分解(一)]符号与基础知识 ...

  3. 浅谈张量分解(五):稀疏张量的CP分解

    在前面的文章中,我们已经讨论了稀疏张量的Tucker分解,并介绍了如何采用梯度下降训练出一个合理的分解结构,与Tucker分解略有不同,这篇文章将介绍在数学表达式上更为简洁的CP分解,同时讨论如何利用 ...

  4. java求秩_张量分解浅谈(二 CP NMF 张量秩)

    欢迎大家来到这一期的张量分解博客学习,本期博客的主要内容就是标题,难度会加大,本人也有写的错误的地方,烦请大家不吝赐教! 一. CANDECOMP/PARAFAC分解法 CANDECOMP(canon ...

  5. 『矩阵论笔记』张量CP分解的详细数学推导以及Python实现

    张量CP分解的详细数学推导以及Python实现! 文章目录 一. 张量的基本概念 1.1 张量定义以及张量空间 1.2 阶和纤维(fiber)及切片 1.3 内积和范数及秩一张量/可合张量 1.4 超 ...

  6. cp分解实现_如何用贝叶斯高斯张量分解修复缺失数据?(Jupyter notebook - Python)

    本文来源于BGCP Imputation - transdim,主要讨论如何利用贝叶斯高斯张量分解(Bayesian Gaussian CP decomposition, BGCP) 估计矩阵中的缺失 ...

  7. 张量分解——CP分解与Tucker分解详解

    关于张量分解一些简单的介绍,可以看我的这篇 张量的CP分解模型 一般而言,给定一个大小为 n 1 × n 2 × n 3 n_1 \times n_2 \times n_3 n

  8. CP分解和HOSVD分解

    一.CP分解(CANDECAMP/PARAFAC) 这是较为古老的一种张量分解方法.最早的研究历史可以追溯到1927年. 在上一节,学习向量乘积的时候,我们看到两个向量外积产生一个矩阵.我们可以推断出 ...

  9. matlab实现CP分解 代码

    使用tensor-box,在matlab中实现cp分解 1.X = sptenrand([5 4 3], 10) //随机生成一个稀疏三维张量5*4* 3,其中有10条数据 X is a sparse ...

最新文章

  1. ubuntu kylin 桌面版 13.10 Firefox中安装 Flash 插件
  2. ​rsync应用拓展多模块同步13
  3. pg高性能服务器,如何充分利用单台服务器的性能将10亿级的json数据尽可能高效的插入postgresql?...
  4. [Kubernetes] 如何关联PVC到特定的PV
  5. 关于Background-size的几个参数区别
  6. 计算机网络中TCP属于,【填空题】TCP/IP协议将计算机网络的结构划分为应用层、传输层、网络互连层等4个层次,其中IP协议属于【1】层。...
  7. java 并发 处理机制 和 cas 理解
  8. Python XML解析(转载)
  9. NP-Hard问题浅谈
  10. 苹果应用的SKU建议使用APP ID
  11. 计算机应用基础实验指导 实验小结,《计算机应用基础》实验指导书
  12. 前端导出 pdf 分页带表头,导出pdf 不分页
  13. 计算机在档案管理出现的问题,浅议档案管理中存在的问题及解决措施_档案管理员资格证...
  14. 【Pytorch】touch.optim
  15. MySQL高级语句(一)---常用查询、视图、null值
  16. 风扇空调照明灯动画的创建
  17. 交通行业大数据应用和发展现状
  18. iphone文件访问ftp服务器,ipad ftp服务器 iPhone/iPad访问FTP服务器设置步骤
  19. jQuery 是一个 JavaScript 库。
  20. C语言练习 | 实现四则运算和单位换算的简易计算器

热门文章

  1. Windows junction
  2. B12xx 的XP驱动
  3. osgi怎么配置访问html,Springboot Application 集成 OSGI 框架开发(示例代码)
  4. 移动护理信息系统闭环管理概念
  5. pandas入门(六):数据清理
  6. 超实用,精心整理了34个Python+Excel+Word+PDF自动化库!
  7. python水浒传名字次数_《水浒传》里重名多,是施耐庵取名不用心还是太随意?...
  8. 计算机辅助设计rhino实训,计算机辅助设计实训.doc
  9. numpy中的log和ln函数介绍
  10. 草图大师自带模型库在哪里_大师在20分钟或更短的时间内创建您的第一个神经网络模型...