张量积表示 [Tensor Product Representation, TPR]
张量积
线性代数中学习过向量(一维数组)和矩阵(二维数组)。在更广泛的数学领域,这些都是“张量”的特例:
-
标量(一个单独的数字)可以看作是 0阶张量。
-
向量(一维数组)可以看作是 1阶张量。
-
矩阵(二维数组)可以看作是 2阶张量。
-
更高阶的张量 就是三维、四维…乃至更高维度的数组。
向量的“外积”(Outer Product)
我们知道向量的点积(内积),比如两个向量 a = [ a 1 , a 2 ] \mathbf{a} = [a_1, a_2] a=[a1,a2] 和 b = [ b 1 , b 2 ] \mathbf{b} = [b_1, b_2] b=[b1,b2] 的点积是 a ⋅ b = a 1 b 1 + a 2 b 2 \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 a⋅b=a1b1+a2b2,结果是一个标量。
而向量的外积是这样计算的:假设我们有一个列向量 u = ( u 1 u 2 ) \mathbf{u} = \begin{pmatrix} u_1 \\ u_2 \end{pmatrix} u=(u1u2) 和一个行向量 v = ( v 1 v 2 ) \mathbf{v} = \begin{pmatrix} v_1 & v_2 \end{pmatrix} v=(v1v2)。它们的外积 u v \mathbf{u}\mathbf{v} uv(注意这里是将列向量写在前面,行向量写在后面进行矩阵乘法)得到一个矩阵:
u v = ( u 1 u 2 ) ( v 1 v 2 ) = ( u 1 v 1 u 1 v 2 u 2 v 1 u 2 v 2 ) \mathbf{u}\mathbf{v} = \begin{pmatrix} u_1 \\ u_2 \end{pmatrix} \begin{pmatrix} v_1 & v_2 \end{pmatrix} = \begin{pmatrix} u_1v_1 & u_1v_2 \\ u_2v_1 & u_2v_2 \end{pmatrix} uv=(u1u2)(v1v2)=(u1v1u2v1u1v2u2v2)
可以看到,结果是一个矩阵。矩阵中的每一个元素是第一个向量的一个分量乘以第二个向量的一个分量。
这个外积,就是两个向量的“张量积”最具体的例子 (外积是张量积在向量上的特例)。 我们用符号 ⊗ \otimes ⊗ 来表示张量积。所以,两个向量 u \mathbf{u} u 和 v \mathbf{v} v 的张量积通常就写成 u ⊗ v \mathbf{u} \otimes \mathbf{v} u⊗v。
什么是更一般的张量积呢?
张量积是一种将两个向量空间“组合”成一个更大的向量空间的方式,或者说,是一种将两个张量“组合”成一个更高阶的张量的方式。
想象一下有两个张量 A A A 和 B B B。它们的张量积 A ⊗ B A \otimes B A⊗B 会产生一个新的张量,其维度是将 A A A 和 B B B 的维度“堆叠”起来。新张量的每一个元素,都是 A A A 的一个元素乘以 B B B 的一个元素。
张量积 ⊗ 的思想是组合所有可能的分量乘积,可以对任意两个张量进行张量积运算 (没有那种类似矩阵乘法的 “内部维度相等” 的限制)。
简单来说,张量积 ⊗ \otimes ⊗ 就是一种乘法,它:
- 增加阶数: 如果 A A A 是 m m m 阶张量, B B B 是 n n n 阶张量,那么 A ⊗ B A \otimes B A⊗B 是 m + n m+n m+n 阶张量。
- 组合信息: 结果张量的每个元素是输入张量元素两两相乘的结果。
举例:
-
向量(1阶) ⊗ \otimes ⊗ 向量(1阶)= 矩阵(2阶)(这就是上面说的外积)
- 向量 u ∈ R 2 \mathbf{u} \in \mathbb R^2 u∈R2,向量 v ∈ R 3 \mathbf{v}\in \mathbb R^3 v∈R3,则 W = u ⊗ v W=\mathbf{u} \otimes \mathbf{v} W=u⊗v 是一个 2 × 3 2 \times 3 2×3 的矩阵, W ∈ R 2 × 3 W\in \mathbb R^{2\times 3} W∈R2×3。可以说 W W W 是一个 2 × 3 2\times 3 2×3 维的 2 2 2 阶张量。
-
向量(1阶) ⊗ \otimes ⊗ 矩阵(2阶)= 3阶张量
- 如果向量 v \mathbf{v} v 维度是 n n n,矩阵 M M M 维度是 m × k m \times k m×k,则 v ⊗ M \mathbf{v} \otimes M v⊗M 是一个 n × m × k n \times m \times k n×m×k 的三维数组。
-
矩阵(2阶) ⊗ \otimes ⊗ 矩阵(2阶)= 4阶张量
- 如果矩阵 A A A 维度是 n × m n \times m n×m,矩阵 B B B 维度是 p × q p \times q p×q,则 A ⊗ B A \otimes B A⊗B 是一个 n × m × p × q n \times m \times p \times q n×m×p×q 的四维数组。
同构
在理解张量积空间 V ⊗ W V \otimes W V⊗W 时,一个重要的概念是“同构”(Isomorphism)。对于有限维向量空间而言,同构意味着两个向量空间在结构上是完全相同的,只是元素的“表现形式”可能不一样。
如果我们考虑实数域 R \mathbb{R} R 上的有限维向量空间,例如 V = R n V = \mathbb{R}^n V=Rn 和 W = R m W = \mathbb{R}^m W=Rm,它们的张量积空间 V ⊗ W V \otimes W V⊗W(即 R n ⊗ R m \mathbb{R}^n \otimes \mathbb{R}^m Rn⊗Rm)是一个新的向量空间,其维度是 dim ( V ) × dim ( W ) = n × m \text{dim}(V) \times \text{dim}(W) = n \times m dim(V)×dim(W)=n×m。
任何一个维度为 k k k 的实向量空间都与 R k \mathbb{R}^k Rk 空间是同构的。因此,维度为 n × m n \times m n×m 的张量积空间 R n ⊗ R m \mathbb{R}^n \otimes \mathbb{R}^m Rn⊗Rm 与 R n × m \mathbb{R}^{n \times m} Rn×m 空间是同构的。
举例来说:
我们之前提到,向量 u ∈ R 2 \mathbf{u} \in \mathbb R^2 u∈R2 和 v ∈ R 3 \mathbf{v} \in \mathbb R^3 v∈R3 的张量积 u ⊗ v \mathbf{u} \otimes \mathbf{v} u⊗v 是一个 2 × 3 2 \times 3 2×3 的矩阵。所有这样的 2 × 3 2 \times 3 2×3 矩阵(以及它们的线性组合)构成了张量积空间 R 2 ⊗ R 3 \mathbb{R}^2 \otimes \mathbb{R}^3 R2⊗R3。这个空间的维度是 2 × 3 = 6 2 \times 3 = 6 2×3=6。
而 R 6 \mathbb{R}^6 R6 是一个标准的 6 维向量空间,其元素通常是包含 6 个数字的列向量。
我们可以建立一个一一对应的线性映射,将 R 2 ⊗ R 3 \mathbb{R}^2 \otimes \mathbb{R}^3 R2⊗R3 中的任意一个 2 × 3 2 \times 3 2×3 矩阵 ( a b c d e f ) \begin{pmatrix} a & b & c \\ d & e & f \end{pmatrix} (adbecf) 映射到 R 6 \mathbb{R}^6 R6 中的一个 6 维向量,例如通过简单地将矩阵的元素按列堆叠成一个向量 ( a d b e c f ) ⊤ (a \ d \ b \ e \ c \ f )^\top (a d b e c f)⊤。这个映射是线性的且可逆的,所以 R 2 ⊗ R 3 \mathbb{R}^2 \otimes \mathbb{R}^3 R2⊗R3 和 R 6 \mathbb{R}^6 R6 是同构的。
这意味着,尽管 R 2 ⊗ R 3 \mathbb{R}^2 \otimes \mathbb{R}^3 R2⊗R3 中的元素看起来是矩阵,而 R 6 \mathbb{R}^6 R6 中的元素看起来是向量,但它们作为向量空间的内在结构是完全相同的。理解同构有助于我们将张量积空间与我们更熟悉的标准向量空间联系起来。
张量积与线性变换
张量积的概念不仅适用于向量,也适用于线性变换(如矩阵)。如果 A : V → V ′ A: V \to V' A:V→V′ 是一个从向量空间 V V V 到 V ′ V' V′ 的线性变换,而 B : W → W ′ B: W \to W' B:W→W′ 是一个从 W W W 到 W ′ W' W′ 的线性变换,我们可以定义它们的张量积 A ⊗ B A \otimes B A⊗B,这是一个从张量积空间 V ⊗ W V \otimes W V⊗W 到 V ′ ⊗ W ′ V' \otimes W' V′⊗W′ 的线性变换。
这个张量积变换 A ⊗ B A \otimes B A⊗B 最重要的定义方式,就是它如何作用在张量积空间的基本元素——简单张量 v ⊗ w \mathbf{v} \otimes \mathbf{w} v⊗w 上:
( A ⊗ B ) ( v ⊗ w ) = A v ⊗ B w (A \otimes B)(\mathbf{v} \otimes \mathbf{w}) = A\mathbf{v} \otimes B\mathbf{w} (A⊗B)(v⊗w)=Av⊗Bw
这意味着, A ⊗ B A \otimes B A⊗B 作用在一个简单张量上时,相当于分别将 A A A 作用在 v \mathbf{v} v 上,将 B B B 作用在 w \mathbf{w} w 上,然后对结果向量 A v A\mathbf{v} Av 和 B w B\mathbf{w} Bw 计算张量积。
由于 A ⊗ B A \otimes B A⊗B 是一个线性变换,它作用在张量积空间中任意一个由简单张量组成的线性组合上时,会遵循线性法则(分配律和与标量乘法的交换律):
( A ⊗ B ) ( ∑ i c i ( v i ⊗ w i ) ) = ∑ i c i ( A ⊗ B ) ( v i ⊗ w i ) = ∑ i c i ( A v i ⊗ B w i ) (A \otimes B) \left( \sum_i c_i (\mathbf{v}_i \otimes \mathbf{w}_i) \right) = \sum_i c_i (A \otimes B)(\mathbf{v}_i \otimes \mathbf{w}_i) = \sum_i c_i (A\mathbf{v}_i \otimes B\mathbf{w}_i) (A⊗B)(i∑ci(vi⊗wi))=i∑ci(A⊗B)(vi⊗wi)=i∑ci(Avi⊗Bwi)
这个性质在线性代数和张量运算中极其重要,它允许我们将复杂的变换分解为在各自空间中的独立变换的组合。
张量积表示
张量积表示 (Tensor Product Representation, TPR) 是论文 Tensor product variable binding and the representation of symbolic structures in connectionist systems 提出的一种在向量空间中表示组合结构的方法,在神经网络和神经-符号人工智能等领域有重要应用。TPR 的核心思想是通过结合“角色”(roles)和“填充物”(fillers)来编码结构化的信息,同时解决符号系统中的“绑定问题”(binding problem)。
核心概念:
-
角色 (Roles): 代表结构中的位置、槽位或属性。例如,在一个句子“猫追老鼠”中,“主语”和“宾语”就是角色。在更抽象的结构中,它们可以是位置索引或预定义的结构槽。角色通常用向量表示。
-
填充物 (Fillers): 代表填充这些角色位置的具体内容或实体。在“猫追老鼠”的例子中,“猫”是主语角色的填充物,“老鼠”是宾语角色的填充物。填充物也通常用向量表示。
-
绑定 (Binding): 将特定的填充物与特定的角色关联起来的过程。TPR 通过张量积(通常是外积)来实现这种绑定。如果角色向量是 r \mathbf{r} r 且填充物向量是 f \mathbf{f} f,它们的绑定可以通过它们的张量积 f ⊗ r \mathbf{f} \otimes \mathbf{r} f⊗r 来表示。这个结果通常是一个更高维度的张量(例如,如果 f \mathbf{f} f 和 r \mathbf{r} r 都是向量,它们的张量积是一个矩阵)。
工作原理
TPR 利用了张量积概念。给定两个向量空间 V V V 和 W W W,它们的张量积 V ⊗ W V \otimes W V⊗W 是一个新的向量空间。在 TPR 中,我们通常使用向量来表示角色和填充物,它们分别属于各自的向量空间。角色向量和填充物向量的张量积(外积)产生一个张量,这个张量编码了该角色-填充物对的绑定信息。
例如,如果角色向量 r ∈ R m \mathbf{r} \in \mathbb{R}^m r∈Rm 且填充物向量 f ∈ R n \mathbf{f} \in \mathbb{R}^n f∈Rn,它们的外积 f ⊗ r \mathbf{f} \otimes \mathbf{r} f⊗r 将产生一个 n × m n \times m n×m 的矩阵。对于包含多个角色-填充物对的复杂结构,其 TPR 是所有这些对的张量积的总和。
组合结构的表示
一个包含多个角色-填充物对的完整结构(如一个句子或一个列表)的 TPR 表示是通过将所有这些绑定张量相加得到的:
S = ∑ i = 1 n ( f i ⊗ r i ) \mathbf{S} = \sum_{i=1}^n (\mathbf{f}_i \otimes \mathbf{r}_i) S=i=1∑n(fi⊗ri)
这里的 S \mathbf{S} S 是表示整个结构的张量,是所有构成结构的绑定对的线性叠加。这种线性的叠加是 TPR 的一个重要特性,它允许我们将复杂的结构分解为简单的绑定,并通过求和重新组合。
这种通过求和形成的表示可以被视为一种近似组合 (Superposition)。理想情况下,我们希望能够从这个叠加的张量 S \mathbf{S} S 中,“解绑”出任何一个原始的角色-填充物对。
解绑定与信息提取
从表示组合结构的混合张量 S \mathbf{S} S 中提取特定信息(例如,某个角色上的填充物)是 TPR 的另一个核心操作,称为解绑定 (Unbinding)。这通常通过张量收缩来实现,利用角色向量的“逆”或共轭 r ∗ \mathbf{r}^* r∗ (正交矩阵的逆等于其转置):
为了从 S \mathbf{S} S 中提取与角色 r k \mathbf{r}_k rk 绑定的填充物 f k \mathbf{f}_k fk,我们使用 r k ∗ \mathbf{r}_k^* rk∗ 与 S \mathbf{S} S 进行收缩:
S ⋅ r k ∗ = ( ∑ i = 1 n ( f i ⊗ r i ) ) ⋅ r k ∗ = ∑ i = 1 n f i ⊗ ( r i ⋅ r k ∗ ) \mathbf{S} \cdot \mathbf{r}_k^* = \left(\sum_{i=1}^n (\mathbf{f}_i \otimes \mathbf{r}_i)\right) \cdot \mathbf{r}_k^* = \sum_{i=1}^n \mathbf{f}_i \otimes (\mathbf{r}_i \cdot \mathbf{r}_k^*) S⋅rk∗=(i=1∑n(fi⊗ri))⋅rk∗=i=1∑nfi⊗(ri⋅rk∗)
解绑定的效果在很大程度上依赖于角色向量集合 { r i } \{\mathbf{r}_i\} {ri} 的性质。如果这些角色向量是正交且归一化的(即对于 i ≠ j i \neq j i=j, r i ∗ ⋅ j = 0 \mathbf{r}_i^* \cdot \mathbf{j} = 0 ri∗⋅j=0,且 r i ∗ ⋅ r i = 1 \mathbf{r}_i^* \cdot \mathbf{r}_i = 1 ri∗⋅ri=1),那么上式中的点积除了 i = k i=k i=k 时为1,其他情况下都为0:
S ⋅ r k ∗ = f k ⊗ ( r k ⋅ r k ∗ ) + ∑ i ≠ k f i ⊗ ( r i ⋅ r k ∗ ) = f k ⊗ 1 + ∑ i ≠ k f i ⊗ 0 = f k \mathbf{S} \cdot \mathbf{r}_k^* = \mathbf{f}_k \otimes (\mathbf{r}_k \cdot \mathbf{r}_k^*) + \sum_{i \neq k} \mathbf{f}_i \otimes (\mathbf{r}_i \cdot \mathbf{r}_k^*) = \mathbf{f}_k \otimes 1 + \sum_{i \neq k} \mathbf{f}_i \otimes 0 = \mathbf{f}_k S⋅rk∗=fk⊗(rk⋅rk∗)+i=k∑fi⊗(ri⋅rk∗)=fk⊗1+i=k∑fi⊗0=fk
在理想的正交情况下,可以完美地从叠加的张量中恢复出与指定角色绑定的填充物,而不会受到其他绑定项的干扰。这使得TPR能够清晰地表示和区分结构中的不同元素。
容量与交叉干扰
然而,在实际应用中,特别是在通过神经网络学习角色向量时,很难保证它们是正交的。当角色向量之间存在相关性(非零点积)时,解绑定操作会产生交叉干扰 (Cross-talk):
S ⋅ r k ∗ = ( r k ∗ ⋅ r k ) ⊗ f k + ∑ i ≠ k ( r k ∗ ⋅ r i ) ⊗ f i \mathbf{S} \cdot \mathbf{r}_k^* = (\mathbf{r}_k^* \cdot \mathbf{r}_k) \otimes \mathbf{f}_k + \sum_{i \neq k} (\mathbf{r}_k^* \cdot \mathbf{r}_i) \otimes \mathbf{f}_i S⋅rk∗=(rk∗⋅rk)⊗fk+∑i=k(rk∗⋅ri)⊗fi
此时,提取的结果是期望填充物 f k \mathbf{f}_k fk 与其他填充物 f i \mathbf{f}_i fi 的加权混合。交叉干扰的存在限制了TPR的容量——即在可接受的精度下,一个TPR张量能够“容纳”并区分多少个不同的绑定。角色向量之间的相关性越高,交叉干扰越严重,容量就越小。因此,设计或学习具有较低相关性的角色向量是提高TPR容量的关键。高维向量空间通常有助于找到低相关的向量,但同时也带来了维度爆炸的挑战。
不过尽管严格正交性对于精确解绑定至关重要,但适度的非正交性也可能带来一些潜在优势。非正交的角色向量允许实现软绑定,一个角色可以以不同强度与多个填充物关联,或者一个填充物可以以不同强度出现在多个角色上。这种软关联性可以促进信息之间的联想 和泛化,使得系统能够在相关概念之间建立联系,表现出更灵活的认知能力。这种性质在某种程度上类似于大脑中神经活动的分布式和重叠编码。