外积求和的简化表示问询
外积求和的简化表示问询
嘿,这个问题在矩阵运算优化或者求导场景里真的很实用,我来一步步帮你拆解~
首先,我们先回到你给出的双重求和式:$\sum_{i=1}{n}\sum_{j=1}{m}x_{i}y_{j}^{\top}$,其中$X$的列是$x_i \in \mathbb{R}^d$,$Y$的列是$y_j \in \mathbb{R}^d$。
最直接的矩阵乘积表示
其实不需要用到Kronecker乘积,就能把这个求和式写成简洁的矩阵乘积形式。我们可以利用矩阵乘法的分配律来推导:
- 先把求和顺序调整一下,把对$j$的求和提到内层:$\sum_{i=1}^n x_i \left( \sum_{j=1}^m y_j^\top \right)$
- 注意到$\sum_{j=1}^m y_j^\top$其实是$Y$的所有列的转置之和,也就是$(Y \mathbf{1}_m)\top$,其中$\mathbf{1}_m$是$m$维全1列向量;同理$\sum_{i=1}n x_i = X \mathbf{1}_n$,$\mathbf{1}_n$是$n$维全1列向量。
- 所以整个求和式可以改写为:
$$\sum_{i,j}x_i y_j^\top = (X \mathbf{1}_n)(Y \mathbf{1}_m)^\top$$ - 进一步展开的话,$(Y \mathbf{1}_m)^\top = \mathbf{1}_m^\top Y^\top$,所以也能写成:
$$X \mathbf{1}_n \mathbf{1}_m^\top Y^\top$$
这里$\mathbf{1}n \mathbf{1}m^\top$是一个$n \times m$的全1矩阵,要是记为$\mathbf{J}{n,m}$的话,式子会更简洁:$X \mathbf{J}{n,m} Y^\top$。
这个形式对你求导会非常友好,因为矩阵乘积的导数规则比双重求和好处理得多。比如如果后续要对$X$求导,你可以直接用矩阵导数的链式法则,不需要再展开求和式。
用Kronecker乘积的表示方式(如果确实需要)
如果一定要结合Kronecker乘积的话,我们可以利用向量化(vec)操作的性质:
- 对于任意$d \times d$矩阵$x_i y_j^\top$,有$\text{vec}(x_i y_j^\top) = y_j \otimes x_i$,其中$\otimes$是Kronecker乘积。
- 对求和式两边做vec操作:$\text{vec}\left( \sum_{i,j}x_i y_j^\top \right) = \sum_{i,j} y_j \otimes x_i = \left( \sum_{j=1}^m y_j \right) \otimes \left( \sum_{i=1}^n x_i \right) = (Y \mathbf{1}_m) \otimes (X \mathbf{1}_n)$
- 再做vec的逆操作,就得到原始求和式:
$$\sum_{i,j}x_i y_j^\top = \text{vec}^{-1}\left( (Y \mathbf{1}_m) \otimes (X \mathbf{1}_n) \right)$$
不过说实话,第一种矩阵乘积的形式在求导场景下实用性更高,Kronecker乘积的版本反而会增加复杂度,除非你的后续运算必须依赖Kronecker乘积的性质。
备注:内容来源于stack exchange,提问作者slitherhiss
相关产品推荐
相关产品推荐

