CP分解

CP分解

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

\mathbf{X} \approx \sum _ { r = 1 } ^ { R } \mathbf { a } _ { r } \circ \mathbf { b } _ { r } \circ \mathbf { c } _ { r }

这里的\circ是指的外积。

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

x _ { i j k } \approx \sum _ { r = 1 } ^ { R } a _ { i r } b _ { j r } c _ { k r } \text { for } i = 1 , \ldots , I , j = 1 , \ldots , J , k = 1 , \ldots , K

定义因子矩阵(factor matrices)表示向量的组合。例如\mathbf { A } = \left[ \begin{array} {} { \mathbf { a } _ { 1 } } & { \mathbf { a } _ { 2 } } & { \cdots } & { \mathbf { a } _ { R } } \end{array} \right]。然后对三维的情况,我们可以将上面的表达式写成下面的形式:

\begin{array} { l } { \mathbf { X } _ { ( 1 ) } \approx \mathbf { A } ( \mathbf { C } \odot \mathbf { B } ) ^ { \top } } ,\\ { \mathbf { X } _ { ( 2 ) } \approx \mathbf { B } ( \mathbf { C } \odot \mathbf { A } ) ^ { \top } } ,\\ { \mathbf { X } _ { ( 3 ) } \approx \mathbf { C } ( \mathbf { B } \odot \mathbf { A } ) ^ { \top } } .\end{array}

其中的\odot表示KR积。然后\mathbf{X}_{(1)}表示张量\mathbf{X}的的mode-n unfolding。

例如:\mathbf{X}\in\mathbb { R } ^ { 3 \times 4 \times 2 }

\mathbf { X } _ { 1 } = \left[ \begin{array} { } { 1 } & { 4 } & { 7 } & { 10 } \\ { 2 } & { 5 } & { 8 } & { 11 } \\ { 3 } & { 6 } & { 9 } & { 12 } \end{array} \right] , \quad \mathbf { X } _ { 2 } = \left[ \begin{array} { } { 13 } & { 16 } & { 19 } & { 22 } \\ { 14 } & { 17 } & { 20 } & { 23 } \\ { 15 } & { 18 } & { 21 } & { 24 } \end{array} \right]

那么

\mathbf { X } _ { ( 1 ) } = \left[ \begin{array} {} { 1 } & { 4 } & { 7 } & { 10 } & { 13 } & { 16 } & { 19 } & { 22 } \\ { 2 } & { 5 } & { 8 } & { 11 } & { 14 } & { 17 } & { 20 } & { 23 } \\ { 3 } & { 6 } & { 9 } & { 12 } & { 15 } & { 18 } & { 21 } & { 24 } \end{array} \right]

\mathbf { X } _ { ( 2 ) } = \left[ \begin{array} { } { 1 } & { 2 } & { 3 } & { 13 } & { 14 } & { 15 } \\ { 4 } & { 5 } & { 6 } & { 16 } & { 17 } & { 18 } \\ { 7 } & { 8 } & { 9 } & { 19 } & { 20 } & { 21 } \\ { 10 } & { 11 } & { 12 } & { 22 } & { 23 } & { 24 } \end{array} \right]

\mathbf { X } _ { ( 3 ) } = \left[ \begin{array} { } { 1 } & { 2 } & { 3 } & { 4 } & { 5 } & { \cdots } & { 9 } & { 10 } & { 11 } & { 12 } \\ { 13 } & { 14 } & { 15 } & { 16 } & { 17 } & { \cdots } & { 21 } & { 22 } & { 23 } & { 24 } \end{array} \right]

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

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

x \approx [[\mathbf { A } , \mathbf { B } , \mathbf { C } ]] \equiv \sum _ { r = 1 } ^ { R } \mathbf { a } _ { r } \circ \mathbf { b } _ { r } \circ \mathbf { c } _ { r }

如果将\mathbf { A } , \mathbf { B } , \mathbf { C }标准化,然后提取出权重\lambda \in \mathbb { R } ^ { R },可以得到如下的表述:

x \approx[[\mathbf { A } , \mathbf { B } , \mathbf { C } ]] \equiv \sum _ { r = 1 } ^ { R } \lambda _ { r } \mathbf { a } _ { r } \circ \mathbf { b } _ { r } \circ \mathbf { c } _ { r }

对于N维的情况,

x \approx \mathbb { [[ } \lambda ; \mathbf { A } ^ { ( 1 ) } , \mathbf { A } ^ { ( 2 ) } , \ldots , \mathbf { A } ^ { ( N ) } \mathbb { ]] } \equiv \sum _ { r = 1 } ^ { R } \lambda _ { r } \mathbf { a } _ { r } ^ { ( 1 ) } \circ \mathbf { a } _ { r } ^ { ( 2 ) } \circ \cdots \circ \mathbf { a } _ { r } ^ { ( N ) }

Tensor Rank

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

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

  1. 张量的秩在实数域和复数域可以不同。
  2. 没有直接的算法去计算给定张量的秩。这是一个NP-hard问题。

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

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

Uniqueness 唯一性

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

矩阵的分解是不唯一的。令\mathbf { X } \in \mathbb { R } ^ { I \times J }是一个秩为R的矩阵,它的分解为:

\mathbf { X } = \mathbf { A } \mathbf { B } ^ { \top } = \sum _ { r = 1 } ^ { R } \mathbf { a } _ { r } \circ \mathbf { b } _ { r }

如果\mathbf{X}的SVD分解是\mathbf { U } \Sigma \mathbf { V } ^ { \top }那么我们可以选择\mathbf { A } = \mathbf { U } \boldsymbol { \Sigma } ,\mathbf { B } = \mathbf { V },同时可以选择\mathbf { A } = \mathbf { U } \boldsymbol { \Sigma } \mathbf { W }, \mathbf { B } = \mathbf { V } \mathbf { W }

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

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

k _ { \mathrm { A } } + k _ { \mathrm { B } } + k _ { \mathrm { C } } \geq 2 R + 2

其中的k _ { \mathrm { A } }是矩阵的秩。

将其扩展到N维情况为:

x = \sum _ { r = 1 } ^ { R } \mathbf { a } _ { r } ^ { ( 1 ) } \circ \mathbf { a } _ { r } ^ { ( 2 ) } \circ \cdots \circ \mathbf { a } _ { r } ^ { ( N ) } = [[ \mathbf { A } ^ { ( 1 ) } , \mathbf { A } ^ { ( 2 ) } , \ldots , \mathbf { A } ^ { ( N ) } ]]

充分条件为:

\sum _ { n = 1 } ^ { N } k _ { \mathbf { A } ^ { ( n ) } } \geq 2 R + ( N - 1 )

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

\min \{ \operatorname { rank } ( \mathbf { A } \odot \mathbf { B } ) , \operatorname { rank } ( \mathbf { A } \odot \mathbf { C } ) , \operatorname { rank } ( \mathbf { B } \odot \mathbf { C } ) \} = R

对N维的情况,

\min _ { n = 1 , \ldots , N } \operatorname { rank } \left( \mathbf { A } ^ { ( 1 ) } \odot \cdots \odot \mathbf { A } ^ { ( n - 1 ) } \odot \mathbf { A } ^ { ( n + 1 ) } \odot \cdots \odot \mathbf { A } ^ { ( N ) } \right) = R

然后,因为:

\operatorname { rank } ( \mathbf { A } \odot \mathbf { B } ) \leq \operatorname { rank } ( \mathbf { A } \otimes \mathbf { B } ) \leq \operatorname { rank } ( \mathbf { A } ) \cdot \operatorname { rank } ( \mathbf { B } )

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

\min _ { n = 1 , \ldots , N } \left( \prod _ { m = 1,m \neq n } ^ { N } \operatorname { rank } \left( \mathbf { A } ^ { ( m ) } \right) \right) \geq R

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

R \leq K \text { and } R ( R - 1 ) \leq I ( I - 1 ) J ( J - 1 ) / 2

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

令R是矩阵\mathbf{A}的秩,假设\mathbf{A}的SVD为:

\mathbf { A } = \sum _ { r = 1 } ^ { R } \sigma _ { r } \mathbf { u } _ { r } \circ \mathbf { v } _ { r } \quad \text { with } \sigma _ { 1 } \geq \sigma _ { 2 } \geq \cdots \geq \sigma _ { R } > 0

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

\mathbf { B } = \sum _ { r = 1 } ^ { k } \sigma _ { r } \mathbf { u } _ { r } \circ \mathbf { v } _ { r }

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

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

\mathcal { X } \in \mathbb { R } ^ { I \times J \times K }是一个rank-three张量,被定义为:

\mathbf{X} = \mathbf { a } _ { 1 } \circ \mathbf { b } _ { 1 } \circ \mathbf { c } _ { 2 } + \mathbf { a } _ { 1 } \circ \mathbf { b } _ { 2 } \circ \mathbf { c } _ { 1 } + \mathbf { a } _ { 2 } \circ \mathbf { b } _ { 1 } \circ \mathbf { c } _ { 1 }

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

\mathbf{Y} = \alpha \left( \mathrm { a } _ { 1 } + \frac { 1 } { \alpha } \mathrm { a } _ { 2 } \right) \circ \left( \mathrm { b } _ { 1 } + \frac { 1 } { \alpha } \mathrm { b } _ { 2 } \right) \circ \left( \mathrm { c } _ { 1 } + \frac { 1 } { \alpha } \mathrm { c } _ { 2 } \right) - \alpha \mathrm { a } _ { 1 } \circ \mathrm { b } _ { 1 } \circ \mathrm { c } _ { 1 }

然后:

\| \mathbf{X} - \mathbf{Y} \| = \frac { 1 } { \alpha } \left\| \mathbf { a } _ { 2 } \circ \mathbf { b } _ { 2 } \circ \mathbf { c } _ { 1 } + \mathbf { a } _ { 2 } \circ \mathbf { b } _ { 1 } \circ \mathbf { c } _ { 2 } + \mathbf { a } _ { 1 } \circ \mathbf { b } _ { 2 } \circ \mathbf { c } _ { 2 } + \frac { 1 } { \alpha } \mathbf { a } _ { 2 } \circ \mathbf { b } _ { 2 } \circ \mathbf { c } _ { 2 } \right\|

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

计算CP分解

没有明确的算法去计算张量的秩,因此计算CP分解的第一个问题是如何去选取rank-one张量的数量。大多数的程序选择好多个不同的值,直到其中一个表现比较好的时候。对于无噪声的理想数据,我们可以从\mathbf{R}=1,2,3,...依次选取,直到达到100\%合适的时候。但是在给定R的情况下,我们也没有完美的程序去计算CP分解。另外根据低秩近似,我们也知道可以通过低秩的张量近似表示高秩张量,这在实践中会引发一些问题。

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

在三维情况下:令\mathcal { X } \in \mathbb { R } ^ { I \times J \times K },最终的计算目标是计算一个R个组件的CP分解能够最好的近似\mathcal{X}

\min _ { \hat { x } } \| x - \hat { x } \| \ \ \text{with}\ \hat { \boldsymbol { X } } = \sum _ { r = 1 } ^ { R } \lambda _ { r } \mathbf { a } _ { r } \circ \mathbf { b } _ { r } \circ \mathbf { c } _ { r } = [[\boldsymbol { \lambda } ; \mathbf { A } , \mathbf { B } , \mathbf { C } ]]

ALS的步骤是固定\mathbf{B}\mathbf{C}去优化\mathbf{A},然后固定\mathbf{A}\mathbf{C}去优化\mathbf{B},最后固定\mathbf{A},\mathbf{B}优化\mathbf{C},持续迭代更新,直到收敛。

\mathbf{B}\mathbf{C}固定的情况下,我们可以得到:

\min _ { \hat { \mathbf { A } } } \left\| \mathbf { X } _ { ( 1 ) } - \hat { \mathbf { A } } ( \mathbf { C } \odot \mathbf { B } ) ^ { \top } \right\| _ { F }

其中\hat { \mathbf { A } } = \mathbf { A } \cdot \operatorname { diag } ( \boldsymbol { \lambda } )

优化的结果是:

\hat { \mathbf { A } } = \mathbf { X } _ { ( 1 ) } \left[ ( \mathbf { C } \odot \mathbf { B } ) ^ { \top } \right] ^ { \dagger }

这里的\dagger表示矩阵的伪逆。\boldsymbol { A } \boldsymbol { G } \boldsymbol { A } = \boldsymbol { A }。又因为:( \mathbf { C } \odot \mathbf { B } ) ^ { \dagger } = \left( \left( \mathbf { C } ^ { \top } \mathbf { C } \right) * \left( \mathbf { B } ^ { \top } \mathbf { B } \right) \right) ^ { \dagger } ( \mathbf { C } \odot \mathbf { B } ) ^ { \top },所以得到:

\hat { \mathbf { A } } = \mathbf { X } _ { ( 1 ) } ( \mathbf { C } \odot \mathbf { B } ) \left( \mathbf { C } ^ { \top } \mathbf { C } * \mathbf { B } ^ { \top } \mathbf { B } \right) ^ { \dagger }

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

通过上面的变化,我们就不用计算一个JK×R的矩阵的伪逆了,只需要计算一个R×R的矩阵的逆即可。然后对\hat { \mathbf { A } }标准化后可以得到\mathbf{A}

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容