cp分解实现_CP分解

CP分解

将高维的张量分解成为Rank-One Tensors的和。

这里的

是指的外积。

上面的式子也可以展开成:

定义因子矩阵(factor matrices)表示向量的组合。例如

。然后对三维的情况,我们可以将上面的表达式写成下面的形式:

其中的

表示KR积。然后

表示张量

的的mode-n unfolding。

例如:

那么

我们可以把它展开后验证一下式子的正确性,当然肯定是对的。也可以从维度的角度去进行验证。

CP分解可以简明的表述为:

如果将

标准化,然后提取出权重

,可以得到如下的表述:

对于N维的情况,

Tensor Rank

当取等号的时候,R的最小取值,就是该张量的秩。

对张量的秩的定义和对矩阵的张量的定义类似。但是存在一些不同。

张量的秩在实数域和复数域可以不同。

没有直接的算法去计算给定张量的秩。这是一个NP-hard问题。

张量集合的最大秩和典型秩。对一个张量的集合,所能取到的最大的秩成为最大秩(maximum rank),发生概率大于0的秩成为典型秩typical rank。

对于不同形状的张量有不同的最大秩和典型秩,可以通过查表获得。

Uniqueness 唯一性

高阶张量的一个特性是他们的分解通常是唯一的,但是矩阵分解通常不是唯一的。

矩阵的分解是不唯一的。令

是一个秩为R的矩阵,它的分解为:

如果

的SVD分解是

那么我们可以选择

,同时可以选择

张量分解的唯一性是指排除简单的重新组合和缩放的情况后,只存在一种可能的分解。

三维情况下,CP分解唯一性的充分条件是:

其中的

是矩阵的秩。

将其扩展到N维情况为:

充分条件为:

CP分解唯一性的必要条件为:

对N维的情况,

然后,因为:

所以,更一般的必要条件为:

三维张量在以下的条件下,CP分解通常是唯一的。

低秩近似和边界秩Low-Rank Approximations and the Border Rank

令R是矩阵

的秩,假设

的SVD为:

然后他的rank-k近似可以写作:

但是这种结果不适用于高阶张量。

存在低阶近似不是高阶近似的因子的情况。导致最佳秩近似的分量不能够按照顺序一个个的求解,必须同时找到所有的因子。

是一个rank-three张量,被定义为:

然后这个张量可以被下面的rank-two张量任意的近似:

然后:

但是在某些情况下,低秩近似是不存在的,并且这不是一个少见的情况。在不存在低秩近似的时候,引入边界秩的概念。他被定义为等于一个张量的最小数量,其足以近似给定张量且具有任意小的非零值。

计算CP分解

没有明确的算法去计算张量的秩,因此计算CP分解的第一个问题是如何去选取rank-one张量的数量。大多数的程序选择好多个不同的值,直到其中一个表现比较好的时候。对于无噪声的理想数据,我们可以从

依次选取,直到达到

合适的时候。但是在给定R的情况下,我们也没有完美的程序去计算CP分解。另外根据低秩近似,我们也知道可以通过低秩的张量近似表示高秩张量,这在实践中会引发一些问题。

假设组件的数量已经确定,有很多方法去计算CP分解,我们关注ALS(交替最小二乘法)算法去计算CP分解。

在三维情况下:令

,最终的计算目标是计算一个R个组件的CP分解能够最好的近似

ALS的步骤是固定

去优化

,然后固定

去优化

,最后固定

优化

,持续迭代更新,直到收敛。

固定的情况下,我们可以得到:

其中

优化的结果是:

这里的

表示矩阵的伪逆。

。又因为:

,所以得到:

这个地方有一步没想清楚。

通过上面的变化,我们就不用计算一个JK×R的矩阵的伪逆了,只需要计算一个R×R的矩阵的逆即可。然后对

标准化后可以得到

N维张量CP分解的完整的步骤如上图所示。

ALS方法易于理解和扩展,但是需要花费比较多的迭代次数使它收敛。同时,它不能够保证一定能够收敛到全局最小值,仅保证目标函数不再减小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值