查看向量的最有用的方法之一是将其视为分量向量的组合。这个观点有助于我们理解矩阵变换。我们可以询问矩阵对每个分量的作用,而不是只询问矩阵对整个输入向量的作用。由于变换是线性的,变换后的分量加起来与变换整个向量具有相同的输出。有些组件可能会强烈影响输出,有些可能会被削弱或重定向,有些可能会被完全忽略。
对于神经网络来说,这种观点特别有用,因为激活向量通常同时包含多种信息。特定的权重矩阵不一定使用所有这些信息。因此,理解变换在一定程度上就变成了识别激活空间中哪些方向对矩阵重要、哪些方向不重要的问题。
进行这种区分的一种准确方法是通过矩阵的行空间和零空间。他们将输入空间分成可以影响输出的方向和矩阵完全擦除的方向。这解释了两个不同的激活向量如何在相同的权重矩阵下产生完全相同的结果。
在上一篇文章 中,我们探讨了权重矩阵如何变换向量以及为什么神经网络需要非线性激活。在本文中,我们开发了更仔细地研究这些变换所需的线性代数。
我们将首先了解如何从其他向量构建向量,为什么同一向量可以沿不同方向分解,以及线性组合和点积如何帮助我们推理变换。然后,我们将研究矩阵的四个基本子空间(行空间、零空间、列空间和左零空间),并使用它们来了解哪些输入分量决定输出以及矩阵删除哪些分量。配套实验通过构建和测试投影将这一基础付诸实践。
这为未来的文章奠定了基础,包括我们的 MNIST 实验:经过训练的分类器读取的内容 。在那里,隐藏层为每个手写数字图像生成一个包含 128 个激活值的向量。我们识别出训练输出层忽略的 118 个独立方向,删除激活向量的相应分量,并保留分类器的数字分数直至数值舍入。
从组件构建向量
矩阵定义从输入空间到输出空间的线性变换。它的形状指定了这些空间中的坐标数量;它的条目决定每个输入的去向。
在神经网络中,输入空间是来自前一层的激活向量所在的空间。输出空间是在应用任何非线性激活之前线性变换的向量所在的位置。
为了理解矩阵对向量的影响,我们需要看看它可以分解成的向量分量。
每个分量本身就是输入空间中的一个向量,原始向量是它们的和。
通过线性,矩阵分别变换每个分量,所得向量加起来与直接变换原始向量相同的输出。
一些组件可能会被拉伸、缩短或向不同方向发送,而其他组件可能会映射到零并完全消失。
向量有许多可能的分解,使用坐标轴或交叉多个轴的方向。在机械可解释性和表示分析中,PCA/SVD、线性探针和稀疏自动编码器等技术有助于从数据中识别有用的方向,揭示分布在激活向量的多个条目中的结构。
现在让我们看看如何从组件构建向量。下面小部件中的每个选项都使用不同分量向量的线性组合 构建相同的蓝色向量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) :每个彩色箭头都是按系数缩放的选定向量,这些分量向量加起来为 h h h 。第一个选项使用三个坐标基向量 e 1 = ( 1 , 0 , 0 ) e_1=(1,0,0) e 1 = ( 1 , 0 , 0 ) 、e 2 = ( 0 , 1 , 0 ) e_2=(0,1,0) e 2 = ( 0 , 1 , 0 ) 和 e 3 = ( 0 , 0 , 1 ) e_3=(0,0,1) e 3 = ( 0 , 0 , 1 ) 。每个点沿着其对应的坐标轴并通过对应的坐标h h h 进行缩放。
让我们更仔细地看看小部件的 Coordinate basis 选项,以区分基本向量、其系数和结果向量分量。基向量 e 1 e_1 e 1 是代表方向的单位向量:它的长度为一。标量 5 5 5 告诉我们要缩放多少,而 5 e 1 = ( 5 , 0 , 0 ) 5e_1=(5,0,0) 5 e 1 = ( 5 , 0 , 0 ) 是实际的 向量分量**。三个向量分量加起来就是我们的输入:
h = 5 e 1 + 3 e 2 + 2 e 3 = ( 5 , 0 , 0 ) + ( 0 , 3 , 0 ) + ( 0 , 0 , 2 ) = ( 5 , 3 , 2 ) . h=5e_1+3e_2+2e_3=(5,0,0)+(0,3,0)+(0,0,2)=(5,3,2). h = 5 e 1 + 3 e 2 + 2 e 3 = ( 5 , 0 , 0 ) + ( 0 , 3 , 0 ) + ( 0 , 0 , 2 ) = ( 5 , 3 , 2 ) .
5 5 5 等坐标通常称为标量分量。在本文中,矢量分量是指整个缩放后的矢量,例如( 5 , 0 , 0 ) (5,0,0) ( 5 , 0 , 0 ) 。
在神经网络层中,每个神经元都会产生这些标量坐标之一。因此,小部件的系数 5 5 5 、3 3 3 和 2 2 2 可以是单个输入的三个神经元的输出。每个激活都会缩放其相应的坐标基向量,给出沿该轴的分量向量。这些分量向量共同构成了该层的激活向量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) ,如下所示:
例如,神经元 2 输出标量 3 3 3 。我们将其对层向量的贡献表示为 3 e 2 = ( 0 , 3 , 0 ) 3e_2=(0,3,0) 3 e 2 = ( 0 , 3 , 0 ) 。乘以e 2 e_2 e 2 并添加分量向量就是我们对坐标组装的数学描述;它不需要额外的层。同样的h h h 是本层的输出和下一层的输入。
下一层的权重矩阵W W W 对这些分量向量进行变换,结果相加得到一个新的向量:W h = 5 W e 1 + 3 W e 2 + 2 W e 3 Wh=5We_1+3We_2+2We_3 W h = 5 W e 1 + 3 W e 2 + 2 W e 3 。这是在添加任何偏差并应用其激活函数之前下一层计算的线性部分。
神经元输出提供了一种分解层激活向量的方法。许多表示分析和机械可解释性都寻求信息更丰富的分解 - 有助于解释网络表示什么以及如何使用该信息的方向或子空间。无限多种分解在数学上是可能的,因此我们需要标准和实验来识别有用的分解。
将方向与大小分开
将方向与大小分开有助于我们推理子空间和变换。尽管长度不同,但 ( 1 , 1 , 1 ) (1,1,1) ( 1 , 1 , 1 ) 和 ( 2 , 2 , 2 ) (2,2,2) ( 2 , 2 , 2 ) 等向量跨越同一条线。用单位向量表示它们的方向可以让点积直接测量带符号的投影长度,并让我们检查矩阵如何独立于输入中存在的方向来转换该方向。
为了使这种分离明确,我们将向量分量写为 α d \alpha d α d :d d d 是表示所选方向的单位向量,而 α \alpha α 是一个有符号标量,指定要包含其中的多少。在我们的示例中,d = e 1 d=e_1 d = e 1 和 α = 5 \alpha=5 α = 5 。由于长度永远不会是负数,因此我们使用绝对值 ∣ α ∣ |\alpha| ∣ α ∣ 来表示组件的长度。 α \alpha α 中的负号表示该分量指向与 d d d 相反的方向。
当我们只知道一个分量的坐标时,如何将其表示为标量乘以单位向量?对于任何非零向量 v v v ,计算其长度 ∥ v ∥ \|v\| ∥ v ∥ 并将每个坐标除以该长度。这是标准化:
d = v ∥ v ∥ , α = ∥ v ∥ , v = α d . d=\frac{v}{\|v\|},
\qquad \alpha=\|v\|,
\qquad v=\alpha d. d = ∥ v ∥ v , α = ∥ v ∥ , v = α d .
选择 d d d 指向与 v v v 相同的方向使得 α \alpha α 为正。如果我们首先固定一个单位方向,则指向相反方向的分量具有负系数。
我们可以使用小部件中已有的向量来演示标准化。 Other basis 集中的向量之一是 v = ( 1 , 1 , 1 ) v=(1,1,1) v = ( 1 , 1 , 1 ) ,它指向所有三个坐标轴。最初,其系数为2 2 2 ,因此绿色分量为2 v = ( 2 , 2 , 2 ) 2v=(2,2,2) 2 v = ( 2 , 2 , 2 ) 。这些向量具有不同的长度但方向相同。
为了用单位向量表示它们的共享方向,我们可以使用 L2 归一化 。
归一化将向量缩放到总长度 1 1 1 ,同时保留其方向。首先,我们通过将其坐标平方、相加并开平方来计算 v v v 的长度。然后我们将每个坐标除以该长度。将所有坐标缩放相同的正值可以保留方向:
∥ v ∥ = 1 2 + 1 2 + 1 2 = 3 , d = v ∥ v ∥ = 1 3 ( 1 , 1 , 1 ) . \|v\|=\sqrt{1^2+1^2+1^2}=\sqrt{3},
\qquad
d=\frac{v}{\|v\|}=\frac{1}{\sqrt{3}}(1,1,1). ∥ v ∥ = 1 2 + 1 2 + 1 2 = 3 , d = ∥ v ∥ v = 3 1 ( 1 , 1 , 1 ) .
所得向量的长度为 ∥ d ∥ = 1 3 + 1 3 + 1 3 = 1 \|d\|=\sqrt{\tfrac13+\tfrac13+\tfrac13}=1 ∥ d ∥ = 3 1 + 3 1 + 3 1 = 1 。我们可以用这种方式标准化任何非零向量;零向量没有方向,不能除以它的长度。
乘以原始长度即可重建基向量:v = 3 d = ( 1 , 1 , 1 ) v=\sqrt{3}\,d=(1,1,1) v = 3 d = ( 1 , 1 , 1 ) 。因此,小部件的绿色分量可以写为:
2 v = 2 3 d = 2 3 ( 1 3 , 1 3 , 1 3 ) = ( 2 , 2 , 2 ) . 2v=2\sqrt{3}\,d
=2\sqrt{3}\left(\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}\right)
=(2,2,2). 2 v = 2 3 d = 2 3 ( 3 1 , 3 1 , 3 1 ) = ( 2 , 2 , 2 ) .
当我们缩放 v v v 时,系数为 2 2 2 ,而当我们缩放单位向量 d d d 时,系数为 2 3 2\sqrt{3} 2 3 。组件本身保持不变。移动第一个滑块会沿相同方向缩放该组件;负值会将其反转。
从分量向量到子空间
到目前为止,我们已经选择了系数来构建单个向量。保持我们组合的向量固定,我们可以改变所有实数的系数来构建整个向量集。这个集合就是它们的跨度,它形成一个子空间。
在下面的小部件中,固定向量 ( 4 , 1 , 1 ) (4,1,1) ( 4 , 1 , 1 ) 和 ( 1 , 2 , 1 ) (1,2,1) ( 1 , 2 , 1 ) 跨越一个平面。绿色和粉色箭头显示它们的缩放分量,蓝色向量是它们的总和。当您更改系数时,蓝色矢量在平面内移动,显示同一子空间的不同成员。它没有添加独立方向,因为它完全由两个固定向量构建。
尝试更改上面小部件中标记为 a a a 和 b b b 的两个系数。蓝色矢量在阴影平面内移动。无论我们选择哪个系数,都无法通过组合两个固定向量来获得该平面之外的向量。选择 Show vector outside the plane 以显示一个这样的示例:橙色标记 ( 0 , 0 , 3 ) (0,0,3) ( 0 , 0 , 3 ) 。
阴影部分显示了两个固定向量的跨度 的一部分:包含所有可能的线性组合的无限平面。小部件的整数滑块仅显示其中的一些组合;允许 a a a 和 b b b 取任何实数值到达平面中的每个向量。每个结果的形式如下:
a ( 4 , 1 , 1 ) + b ( 1 , 2 , 1 ) = ( 4 a + b , a + 2 b , a + b ) a(4,1,1)+b(1,2,1)=(4a+b,\;a+2b,\;a+b) a ( 4 , 1 , 1 ) + b ( 1 , 2 , 1 ) = ( 4 a + b , a + 2 b , a + b )
更一般地,对于固定向量 v 1 v_1 v 1 和 v 2 v_2 v 2 ,我们写:
S = span { v 1 , v 2 } = { a v 1 + b v 2 : a , b ∈ R } S=\operatorname{span}\{v_1,v_2\}
=\{av_1+bv_2:a,b\in\mathbb R\} S = span { v 1 , v 2 } = { a v 1 + b v 2 : a , b ∈ R }
整个跨度是 R 3 \mathbb R^3 R 3 的一个子空间 ,即周围的三维向量空间。 一次分解选择特定系数并产生一个向量;子空间包含我们的固定跨度向量可以构建的每个向量。它包含零向量,并且在其中缩放或添加向量总是给出同一集合中的另一个向量。在我们的示例中,整个平面是子空间,每个蓝色向量都是其中的一个成员。
我们的两个独立向量跨越通过原点的平面。矢量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) 位于该平面内,因为我们可以用 a = b = 1 a=b=1 a = b = 1 构建它。但 ( 0 , 0 , 3 ) (0,0,3) ( 0 , 0 , 3 ) 是无法到达的:使前两个坐标为零会强制 a = b = 0 a=b=0 a = b = 0 ,这也会使第三个坐标为零。为了达到 3D 中的每个向量,我们需要平面外的第三个向量。早期小部件的 Coordinate basis 和 Other basis 各自提供三个独立的向量,因此它们的跨度填充了所有 R 3 \mathbb R^3 R 3 。
相同的向量可以属于不同的子空间。例如,( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 可以构建为 ( 1 , 1 , 0 ) + ( 0 , − 1 , 0 ) (1,1,0)+(0,-1,0) ( 1 , 1 , 0 ) + ( 0 , − 1 , 0 ) ,其组件跨越 x y xy x y 平面,或者构建为 ( 1 , 0 , 1 ) + ( 0 , 0 , − 1 ) (1,0,1)+(0,0,-1) ( 1 , 0 , 1 ) + ( 0 , 0 , − 1 ) ,其组件跨越 x z xz x z 平面。通过原点的无数个平面都包含这个相同的向量。
Reset view
xy-plane · z = 0 xz-plane · y = 0 Shared line: the x-axis
The vector (1, 0, 0) belongs to two planes The green xy-plane and pink xz-plane intersect along the x-axis. A blue arrow from the origin to the point (1, 0, 0) lies along this intersection, so the entire vector belongs to both planes. The shaded patches show only part of each infinite plane. xz-plane xy-plane z y x 0 (1, 0, 0)
因此向量并不能确定唯一的较大子空间。然而,一旦我们确定了跨度向量,它们的跨度就被唯一确定了。在上面的小部件中,两个平面都包含 x x x 轴。蓝色矢量及其端点 ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 位于两个平面内。每个阴影块都是无限平面的一部分。
子空间为我们提供了一种研究神经网络表示中的结构的方法。 子空间可以与一个特征或一组相关特征相关联:它的跨越向量提供了表示可以变化的方向,并且改变它们的系数产生可以编码不同特征值的分量。然而,跨越子空间的向量不一定代表单独的特征,例如颜色或形状。我们需要实验来找出它们代表什么信息(如果有的话)。
研究人员通过实验测试了这种解释。 一项奥赛罗研究 确定了编码棋盘状态的方向,并通过修改沿这些方向的激活来改变模型的行为。另一项研究 发现,在二维激活子空间内,日子和月份近似排列成圆圈;干预措施改变了对日和月算术任务的预测。平面是子空间,而圆周围的位置表示特征值。这些实验提供了模型使用已识别的表示的证据,但并不意味着子空间中的每个点都有有意义的解释。
在上面的示例中,我们看到了两个向量如何跨越一个平面,以及无论我们选择什么系数,该平面之外的向量如何仍然无法到达。现在,有趣的问题是,是什么决定了该跨度的几何形状:为什么是一个平面而不是一条线或整个 3D 空间,以及什么决定了我们得到哪个平面?为了回答这个问题,我们需要区分坐标的数量和独立方向的数量。
三个坐标不需要三个独立的方向
如果我们通过添加分量向量来构建 R 3 \mathbb R^3 R 3 中的向量,则每个分量也有三个坐标。拥有三个坐标告诉我们向量存在于三维空间中;它没有告诉我们它们跨越的子空间的维度。 跨度的维度取决于有多少个所选向量是线性无关的。
考虑两个独立向量,v 1 = ( 1 , 0 , 0 ) v_1=(1,0,0) v 1 = ( 1 , 0 , 0 ) 和 v 2 = ( 0 , 1 , 0 ) v_2=(0,1,0) v 2 = ( 0 , 1 , 0 ) 。它们的组合形式为 ( a , b , 0 ) (a,b,0) ( a , b , 0 ) 。由于第三个坐标始终为零,因此这些向量填充 x y xy x y 平面。他们可以构建 ( 3 , 5 , 0 ) (3,5,0) ( 3 , 5 , 0 ) ,但不能构建 ( 3 , 5 , 2 ) (3,5,2) ( 3 , 5 , 2 ) 。现在用 ( 0 , 1 , 2 ) (0,1,2) ( 0 , 1 , 2 ) 替换第二个向量:
a ( 1 , 0 , 0 ) + b ( 0 , 1 , 2 ) = ( a , b , 2 b ) a(1,0,0)+b(0,1,2)=(a,b,2b) a ( 1 , 0 , 0 ) + b ( 0 , 1 , 2 ) = ( a , b , 2 b )
跨度仍然是一个平面,现在倾斜以便z = 2 y z=2y z = 2 y 。比如3 ( 1 , 0 , 0 ) + 5 ( 0 , 1 , 2 ) = ( 3 , 5 , 10 ) 3(1,0,0)+5(0,1,2)=(3,5,10) 3 ( 1 , 0 , 0 ) + 5 ( 0 , 1 , 2 ) = ( 3 , 5 , 10 ) 就在其中。 三维空间中的二维子空间不需要一个坐标为零。 向量可以具有三个非零坐标并且仍然位于该平面中:第三个坐标与第二个坐标相关联,只留下两个独立的选择。
比较下面的平面和倾斜平面。更改系数会使蓝色向量在其平面内移动;这两个建筑都无法达到其标记的红色目标。
在该平面外添加第三个向量,例如 ( 0 , 0 , 1 ) (0,0,1) ( 0 , 0 , 1 ) ,让我们可以通过选择合适的系数来构建 R 3 \mathbb{R}^3 R 3 中的任何向量:
a ( 1 , 0 , 0 ) + b ( 0 , 1 , 2 ) + c ( 0 , 0 , 1 ) = ( a , b , 2 b + c ) a(1,0,0)+b(0,1,2)+c(0,0,1)=(a,b,2b+c) a ( 1 , 0 , 0 ) + b ( 0 , 1 , 2 ) + c ( 0 , 0 , 1 ) = ( a , b , 2 b + c )
我们现在可以构建任何目标向量 ( x , y , z ) (x,y,z) ( x , y , z ) 。我们的组合产生 ( a , b , 2 b + c ) (a,b,2b+c) ( a , b , 2 b + c ) ,因此我们选择 a = x a=x a = x 和 b = y b=y b = y 来匹配前两个坐标,然后选择 c = z − 2 y c=z-2y c = z − 2 y 来匹配第三个坐标。例如,要构建 ( 3 , 5 , 2 ) (3,5,2) ( 3 , 5 , 2 ) ,请选择 a = 3 a=3 a = 3 、b = 5 b=5 b = 5 和 c = − 8 c=-8 c = − 8 。平面上已有的第三个向量不会添加任何独立方向。
下一个小部件显示了从平面开始的扩展:添加 ( 0 , 0 , 1 ) (0,0,1) ( 0 , 0 , 1 ) 为右手结构提供了第三个独立方向。通过三个自由选择的系数,该结构可以到达 R 3 \mathbb R^3 R 3 中的任何向量。初始值a = 3 a=3 a = 3 、b = 5 b=5 b = 5 和c = 2 c=2 c = 2 达到目标( 3 , 5 , 2 ) (3,5,2) ( 3 , 5 , 2 ) 。移动 c c c 以更改其第三个坐标而不更改前两个坐标。
从表示分析的角度来看,共享子空间(在本例中是一个平面)可以告诉我们有关表示集合的一些信息。 要将此几何图形连接到神经网络,请考虑当它处理多个不同输入时会发生什么。我们可以将同一层的激活向量收集到一个激活矩阵中,每行一个输入,每列一个神经元。分析该矩阵可以揭示收集的激活是否位于共享的低维子空间中。
假设三个图像产生激活向量 ( 1 , 1 , 0 ) (1,1,0) ( 1 , 1 , 0 ) 、( 2 , 0 , 2 ) (2,0,2) ( 2 , 0 , 2 ) 和 ( 3 , 1 , 2 ) (3,1,2) ( 3 , 1 , 2 ) 。所有这三个都可以从相同的两个固定向量 v 1 = ( 1 , 1 , 0 ) v_1=(1,1,0) v 1 = ( 1 , 1 , 0 ) 和 v 2 = ( 1 , − 1 , 2 ) v_2=(1,-1,2) v 2 = ( 1 , − 1 , 2 ) 构建:
( 1 , 1 , 0 ) = v 1 , ( 2 , 0 , 2 ) = v 1 + v 2 , ( 3 , 1 , 2 ) = 2 v 1 + v 2 . \begin{aligned}
(1,1,0)&=v_1,\\
(2,0,2)&=v_1+v_2,\\
(3,1,2)&=2v_1+v_2.
\end{aligned} ( 1 , 1 , 0 ) ( 2 , 0 , 2 ) ( 3 , 1 , 2 ) = v 1 , = v 1 + v 2 , = 2 v 1 + v 2 .
因此,所有三个激活都位于同一平面,尽管每个激活都有三个坐标。跨度向量保持固定;只是它们的系数随图像而变化。
当我们将不同的图像传递到同一层时,每个图像都会产生自己的激活向量。为了检查这些向量是否共享一个平面,我们询问相同的两个生成向量是否可以构建它们中的每一个。找到包含一幅图像的激活向量的平面并不能告诉我们其他图像的激活向量是否也位于其中。
接下来,让我们看看当我们将构造向量组织为矩阵列时会发生什么。
线性组合:从列构建输出
想象两组可能的向量。我们称它们为输入空间和输出空间。矩阵 W W W 定义了它们之间的映射函数:它采用输入向量 x x x 并生成输出向量 W x Wx W x 。该映射是线性变换。
如果我们看看 W W W 如何构建输出,我们可以看到每一列如何贡献一个分量向量。每列位于输出空间中,并按 x x x (前一层中一个神经元的输出)的相应坐标进行缩放。我们之前看到了神经元激活如何缩放坐标基向量以形成层的激活向量。当传递到下一层时,这些相同的激活会缩放 W W W 的列,这些列充当我们组合起来构建输出的向量。这些缩放的列加起来为 W x Wx W x ,使输出成为矩阵列的线性组合。
将列写为 w 1 , … , w n w_1,\ldots,w_n w 1 , … , w n ,将输入坐标写为 x 1 , … , x n x_1,\ldots,x_n x 1 , … , x n ,我们可以将此结构表示为:
W x = x 1 w 1 + x 2 w 2 + ⋯ + x n w n . Wx=x_1w_1+x_2w_2+\cdots+x_nw_n. W x = x 1 w 1 + x 2 w 2 + ⋯ + x n w n .
在神经网络中,W W W 是层的权重矩阵,x x x 是前一层提供的激活向量。每个坐标x i x_i x i 缩放相应的列w i w_i w i ,产生输出的分量向量x i w i x_iw_i x i w i 。
下面的小部件一次一列地遵循此结构。输入 x = ( 5 , 3 , 2 ) x=(5,3,2) x = ( 5 , 3 , 2 ) 的每个坐标缩放其相应的列以产生分量向量。选择 Next column 以遵循每个输入坐标如何缩放其列。匹配箭头突出显示了此步骤,而所有三个贡献加起来就是转换后的输出 W x = ( 19 , 8 , 2 ) Wx=(19,8,2) W x = ( 19 , 8 , 2 ) 。
这些组件让我们可以跟踪各个输入坐标对结果的影响。为了研究分布在多个坐标上的特征,我们可以沿着与该特征相关的方向分解输入,并检查 W W W 如何转换这些分量。
列空间:矩阵可以到达哪些输出?
矩阵不一定到达输出空间中的每个向量;它可以将所有输入向量映射到较小的子空间,例如三维空间内的平面。早些时候,我们看到了一组固定的分量向量如何只能构建位于其跨度内的向量,从而形成一个子空间。对于矩阵,可达输出的子空间称为其列空间 。
这个名字来自这样一个事实:矩阵的列是跨越可能输出的子空间的固定向量。
在早期的小部件 中,我们使用三组不同的分量向量构建了相同的向量h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) 。现在让我们将每个构造视为矩阵变换:我们选择的向量成为 W W W 的列,它们的系数成为输入向量 x x x ,而 h h h 是输出 W x Wx W x 。
所有三种结构都会产生具有所选系数的 h h h ,但它们不能全部产生相同范围的其他输出。通过保持每个矩阵固定并改变其输入,我们可以看到哪些向量属于其列空间。
首先,我们从Coordinate basis 选项下的向量开始。我们将 h h h 构建为 5 ( 1 , 0 , 0 ) + 3 ( 0 , 1 , 0 ) + 2 ( 0 , 0 , 1 ) 5(1,0,0)+3(0,1,0)+2(0,0,1) 5 ( 1 , 0 , 0 ) + 3 ( 0 , 1 , 0 ) + 2 ( 0 , 0 , 1 ) 。三个坐标向量成为W W W 的列,缩放系数5 , 3 , 2 5,3,2 5 , 3 , 2 成为x x x 的条目:
W = ( 1 0 0 0 1 0 0 0 1 ) , x = ( 5 3 2 ) , W x = ( 5 3 2 ) W=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix},
\qquad x=\begin{pmatrix}5\\3\\2\end{pmatrix},
\qquad Wx=\begin{pmatrix}5\\3\\2\end{pmatrix} W = 1 0 0 0 1 0 0 0 1 , x = 5 3 2 , W x = 5 3 2
由于 W W W 是单位矩阵,因此输入保持不变:W x = x = ( 5 , 3 , 2 ) Wx=x=(5,3,2) W x = x = ( 5 , 3 , 2 ) 。
输入向量 x x x 有三个坐标,因此输入空间为 R 3 \mathbb R^3 R 3 。每个坐标缩放 W W W 的一列。这三列跨越了所有的R 3 \mathbb R^3 R 3 ,因此这个矩阵可以到达输出空间中的每个向量。
现在让我们看看 Other basis 选项。我们构建与 h = 2 ( 1 , 1 , 1 ) + 1 ( 1 , − 1 , 1 ) + 1 ( 2 , 2 , − 1 ) = ( 5 , 3 , 2 ) h=2(1,1,1)+1(1,-1,1)+1(2,2,-1)=(5,3,2) h = 2 ( 1 , 1 , 1 ) + 1 ( 1 , − 1 , 1 ) + 1 ( 2 , 2 , − 1 ) = ( 5 , 3 , 2 ) 相同的向量。现在的列是 ( 1 , 1 , 1 ) (1,1,1) ( 1 , 1 , 1 ) 、( 1 , − 1 , 1 ) (1,-1,1) ( 1 , − 1 , 1 ) 和 ( 2 , 2 , − 1 ) (2,2,-1) ( 2 , 2 , − 1 ) ,输入系数为 2 , 1 , 1 2,1,1 2 , 1 , 1 :
W = ( 1 1 2 1 − 1 2 1 1 − 1 ) , x = ( 2 1 1 ) , W x = ( 5 3 2 ) W=\begin{pmatrix}1&1&2\\1&-1&2\\1&1&-1\end{pmatrix},
\qquad x=\begin{pmatrix}2\\1\\1\end{pmatrix},
\qquad Wx=\begin{pmatrix}5\\3\\2\end{pmatrix} W = 1 1 1 1 − 1 1 2 2 − 1 , x = 2 1 1 , W x = 5 3 2
输入空间和输出空间仍然是R 3 \mathbb R^3 R 3 。这三列也是独立的,因此它们的线性组合可以产生每个输出向量。我们改变了构造向量和输入系数,但仍然可以达到全部R 3 \mathbb R^3 R 3 。
当我们尝试 Two vectors 选项时,一些有趣的事情出现了。现在仅使用两个构建向量构建相同的向量 h h h :h = 1 ( 4 , 1 , 1 ) + 1 ( 1 , 2 , 1 ) = ( 5 , 3 , 2 ) h=1(4,1,1)+1(1,2,1)=(5,3,2) h = 1 ( 4 , 1 , 1 ) + 1 ( 1 , 2 , 1 ) = ( 5 , 3 , 2 ) 。这意味着我们的变换矩阵只有两列。其输入包含两个系数 1 , 1 1,1 1 , 1 :
W = ( 4 1 1 2 1 1 ) , x = ( 1 1 ) , W x = ( 5 3 2 ) W=\begin{pmatrix}4&1\\1&2\\1&1\end{pmatrix},
\qquad x=\begin{pmatrix}1\\1\end{pmatrix},
\qquad Wx=\begin{pmatrix}5\\3\\2\end{pmatrix} W = 4 1 1 1 2 1 , x = ( 1 1 ) , W x = 5 3 2
输入空间现在是 R 2 \mathbb R^2 R 2 ,因为我们只提供两个系数。输出空间仍然是 R 3 \mathbb R^3 R 3 ,因为每个输出仍然具有三个坐标:( 4 a + b , a + 2 b , a + b ) (4a+b,\;a+2b,\;a+b) ( 4 a + b , a + 2 b , a + b ) 。然而,尽管结果具有三个坐标,但只有两个独立的选择:a a a 和b b b 。 矩阵的形状将输出空间内的可达子空间限制为最多二维。
我们选择的两个构造向量以及相应的矩阵列是独立的,因此它们跨越原点的平面,而它们的值决定了它是哪个平面。在前面的示例中,列跨越整个三维输出空间。在这种情况下,只需两个向量,我们仍然可以得到相同的向量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) ,但这只是因为它位于它们跨越的平面(矩阵的列空间)中。该平面之外的向量仍然无法到达。
下表比较了这三种结构:每个矩阵接受哪些输入向量以及它可以生成哪些输出向量。所有三个矩阵都具有相同的三维输出空间,但只有某些矩阵可以生成该空间中的每个向量。
小部件选项 输入空间:系数x x x 列空间:可达输出 坐标基础 R 3 \mathbb R^3 R 3 全部R 3 \mathbb R^3 R 3 其他依据 R 3 \mathbb R^3 R 3 全部R 3 \mathbb R^3 R 3 两个向量 R 2 \mathbb R^2 R 2 R 3 \mathbb R^3 R 3 内的一架飞机
我们看到只有两列如何将可达输出限制为最多一个平面。有趣的是,拥有三列并不能保证矩阵可以到达整个三维输出空间。这些列还必须是线性独立的。
在以下矩阵中,前两列相同,因此第二列没有添加新方向。 c 1 c_1 c 1 和 c 3 c_3 c 3 列是独立的,构成可到达输出平面的基础:
W = ( 1 1 0 0 0 1 1 1 1 ) , c 1 = ( 1 0 1 ) , c 2 = ( 1 0 1 ) , c 3 = ( 0 1 1 ) W=\begin{pmatrix}1&1&0\\0&0&1\\1&1&1\end{pmatrix},
\qquad
c_1=\begin{pmatrix}1\\0\\1\end{pmatrix},\quad
c_2=\begin{pmatrix}1\\0\\1\end{pmatrix},\quad
c_3=\begin{pmatrix}0\\1\\1\end{pmatrix} W = 1 0 1 1 0 1 0 1 1 , c 1 = 1 0 1 , c 2 = 1 0 1 , c 3 = 0 1 1
我们可以从数学上看出为什么这三列仅在两个独立方向上产生输出。我们将输入写为 h h h ,将输出写为 z = W h z=Wh z = W h 。从 c 2 = c 1 c_2=c_1 c 2 = c 1 开始,前两个输入坐标缩放相同的列向量:
z = W h = h 1 c 1 + h 2 c 2 + h 3 c 3 = ( h 1 + h 2 ) ( 1 , 0 , 1 ) + h 3 ( 0 , 1 , 1 ) z=Wh=h_1c_1+h_2c_2+h_3c_3
=(h_1+h_2)(1,0,1)+h_3(0,1,1) z = W h = h 1 c 1 + h 2 c 2 + h 3 c 3 = ( h 1 + h 2 ) ( 1 , 0 , 1 ) + h 3 ( 0 , 1 , 1 )
如果我们让 s = h 1 + h 2 s=h_1+h_2 s = h 1 + h 2 和 t = h 3 t=h_3 t = h 3 ,每个可能的输出都具有以下形式:
s ( 1 , 0 , 1 ) + t ( 0 , 1 , 1 ) = ( s , t , s + t ) s(1,0,1)+t(0,1,1)=(s,t,s+t) s ( 1 , 0 , 1 ) + t ( 0 , 1 , 1 ) = ( s , t , s + t )
我们可以看到,每个输出都由两个值决定,s = h 1 + h 2 s=h_1+h_2 s = h 1 + h 2 和 t = h 3 t=h_3 t = h 3 ,第三个坐标始终等于前两个坐标之和。所有具有这种关系的向量形成一个平面,即矩阵的列空间。维度取决于独立方向的数量,而不是列的数量。
点积:一次构建一行输出
在上一节中,我们了解了矩阵的列如何从缩放向量构建其输出。现在让我们通过矩阵的行查看相同的变换,并检查输入的分量向量如何对每个输出坐标做出贡献。正如神经元如何协同工作来变换向量 中所解释的,权重矩阵的每一行都采用与整个输入向量的点积 ,产生一个输出坐标。
下面的小部件一次一行地进行计算。选择每一行,查看其权重与整个输入 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) 的点积,生成输出 W h = ( 19 , 8 , 2 ) Wh=(19,8,2) W h = ( 19 , 8 , 2 ) 的一个坐标。
让我们关注第一行。它与整个输入的点积产生标量 19 19 19 :
( 2 , 1 , 3 ) ⋅ ( 5 , 3 , 2 ) = 10 + 3 + 6 = 19. (2,1,3)\cdot(5,3,2)=10+3+6=19. ( 2 , 1 , 3 ) ⋅ ( 5 , 3 , 2 ) = 10 + 3 + 6 = 19.
线性使我们可以将此点积表示为输入分量向量的贡献之和。要查看 10 10 10 、3 3 3 和 6 6 6 来自何处,请将输入拆分为其坐标分量:
h = c 1 + c 2 + c 3 , c 1 = ( 5 , 0 , 0 ) , c 2 = ( 0 , 3 , 0 ) , c 3 = ( 0 , 0 , 2 ) . h=c_1+c_2+c_3,
\qquad c_1=(5,0,0),\quad c_2=(0,3,0),\quad c_3=(0,0,2). h = c 1 + c 2 + c 3 , c 1 = ( 5 , 0 , 0 ) , c 2 = ( 0 , 3 , 0 ) , c 3 = ( 0 , 0 , 2 ) .
对于第一行 r = ( 2 , 1 , 3 ) r=(2,1,3) r = ( 2 , 1 , 3 ) ,线性度给出:
r ⋅ h = r ⋅ ( c 1 + c 2 + c 3 ) = r ⋅ c 1 + r ⋅ c 2 + r ⋅ c 3 . r\cdot h=r\cdot(c_1+c_2+c_3)=r\cdot c_1+r\cdot c_2+r\cdot c_3. r ⋅ h = r ⋅ ( c 1 + c 2 + c 3 ) = r ⋅ c 1 + r ⋅ c 2 + r ⋅ c 3 .
每个组件为此输出坐标提供一个标量贡献:
r ⋅ c 1 = ( 2 , 1 , 3 ) ⋅ ( 5 , 0 , 0 ) = 10 , r ⋅ c 2 = ( 2 , 1 , 3 ) ⋅ ( 0 , 3 , 0 ) = 3 , r ⋅ c 3 = ( 2 , 1 , 3 ) ⋅ ( 0 , 0 , 2 ) = 6. \begin{aligned}
r\cdot c_1&=(2,1,3)\cdot(5,0,0)=10,\\
r\cdot c_2&=(2,1,3)\cdot(0,3,0)=3,\\
r\cdot c_3&=(2,1,3)\cdot(0,0,2)=6.
\end{aligned} r ⋅ c 1 r ⋅ c 2 r ⋅ c 3 = ( 2 , 1 , 3 ) ⋅ ( 5 , 0 , 0 ) = 10 , = ( 2 , 1 , 3 ) ⋅ ( 0 , 3 , 0 ) = 3 , = ( 2 , 1 , 3 ) ⋅ ( 0 , 0 , 2 ) = 6.
将它们相加得到 r ⋅ h = 10 + 3 + 6 = 19 r\cdot h=10+3+6=19 r ⋅ h = 10 + 3 + 6 = 19 ,与直接计算 ( 2 , 1 , 3 ) ⋅ ( 5 , 3 , 2 ) (2,1,3)\cdot(5,3,2) ( 2 , 1 , 3 ) ⋅ ( 5 , 3 , 2 ) 的结果完全相同。
对每一行重复此计算会得到每行一个标量结果。收集这些结果会产生输出向量 W h = ( 19 , 8 , 2 ) Wh=(19,8,2) W h = ( 19 , 8 , 2 ) 。对于每一行,将点积与整个输入相加所得到的结果与将点积与其分量相加得到的结果相同。
这适用于输入的任何分解:如果 h = v 1 + v 2 h=v_1+v_2 h = v 1 + v 2 ,则 r ⋅ h = r ⋅ v 1 + r ⋅ v 2 r\cdot h=r\cdot v_1+r\cdot v_2 r ⋅ h = r ⋅ v 1 + r ⋅ v 2 ,即使组件指向其他方向也是如此。
从几何角度来看,我们可以将每个分量投影到同一条线上(行向量 r r r 的方向),并将这些带符号的投影相加。它们的总和等于整个输入的投影。部分指向 r r r 的分量贡献为正,部分指向相反的分量贡献为负,垂直分量贡献为零。
为了清楚地看到这些投影,下一个小部件使用二维示例,单位行 r = ( 1 , 0 ) r=(1,0) r = ( 1 , 0 ) 沿着水平轴指向。绿色向量 c 1 c_1 c 1 和粉色向量 c 2 c_2 c 2 是两个分量向量。蓝色向量 h = c 1 + c 2 h=c_1+c_2 h = c 1 + c 2 是他们构建的组合向量。
虚线将每个向量的端点与其在水平轴上的投影连接起来。沿该轴的匹配彩色箭头显示投影向量:绿色表示 c 1 c_1 c 1 ,粉色表示 c 2 c_2 c 2 ,蓝色表示它们的总和 h h h 。这些投影箭头可以重叠。指向右侧的投影会产生正向贡献,指向左侧的投影会产生负向影响,而零投影则不会产生任何影响。由于 r r r 的长度为 1,因此每个带符号投影长度等于与 r r r 对应的点积。
拖动任一组件的端点或更改其坐标以查看组合矢量及其投影的更新。尝试 Opposite signs 、Perpendicular 和 Cancelling 查看负贡献、零贡献和取消贡献。
该小部件使用单位行,因此每个组件的带符号投影长度是其对输出的贡献。权重矩阵行的长度不必为一:它的长度会缩放每个贡献。 为了了解每个组件的贡献,我们需要考虑它的长度以及它与行的对齐方式。
对于单位行方向u = r / ∥ r ∥ u=r/\|r\| u = r /∥ r ∥ ,点积u ⋅ c u\cdot c u ⋅ c 是分量c c c 的带符号投影长度。使用 r r r 本身将该长度乘以 ∥ r ∥ \|r\| ∥ r ∥ :
u ⋅ c = ∥ c ∥ cos θ , r ⋅ c = ∥ r ∥ ( u ⋅ c ) = ∥ r ∥ ∥ c ∥ cos θ , u\cdot c=\|c\|\cos\theta,
\qquad
r\cdot c=\|r\|\,(u\cdot c)=\|r\|\,\|c\|\cos\theta, u ⋅ c = ∥ c ∥ cos θ , r ⋅ c = ∥ r ∥ ( u ⋅ c ) = ∥ r ∥ ∥ c ∥ cos θ ,
其中 θ \theta θ 是分量与行方向之间的角度。对于我们的行 r = ( 2 , 1 , 3 ) r=(2,1,3) r = ( 2 , 1 , 3 ) ,其长度为 14 \sqrt{14} 14 :
c 1 = ( 5 , 0 , 0 ) c_1=(5,0,0) c 1 = ( 5 , 0 , 0 ) 的长度为 5 5 5 ,对齐方式为 cos θ 1 = 2 / 14 \cos\theta_1=2/\sqrt{14} cos θ 1 = 2/ 14 ,贡献为 10 10 10 。
c 2 = ( 0 , 3 , 0 ) c_2=(0,3,0) c 2 = ( 0 , 3 , 0 ) 的长度为 3 3 3 ,对齐方式为 cos θ 2 = 1 / 14 \cos\theta_2=1/\sqrt{14} cos θ 2 = 1/ 14 ,贡献为 3 3 3 。
c 3 = ( 0 , 0 , 2 ) c_3=(0,0,2) c 3 = ( 0 , 0 , 2 ) 的长度为 2 2 2 ,对齐方式为 cos θ 3 = 3 / 14 \cos\theta_3=3/\sqrt{14} cos θ 3 = 3/ 14 ,贡献为 6 6 6 。
由此,我们可以看到,第三个分量与 r r r 最接近 :它具有最大的余弦,因此与行方向的角度最小。但第一个组件贡献更多 ,因为它更长。每个输入分量根据其长度以及与行方向的对齐情况做出贡献,而线性使我们可以将这些带符号的贡献相加以获得行对整个输入向量的响应。
行和列提供了两种计算相同变换的方法:
专栏 行 载体所在的地方 输出空间 输入空间 在乘法中的作用 缩放并添加以构建输出 每个都需要一个点积来计算一个输出坐标
行空间和零空间:矩阵读取和忽略的内容
让我们从两个向量 ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 和 ( 0 , 1 , 0 ) (0,1,0) ( 0 , 1 , 0 ) 开始。它们是独立的,它们的线性组合具有以下形式
a ( 1 , 0 , 0 ) + b ( 0 , 1 , 0 ) = ( a , b , 0 ) a(1,0,0)+b(0,1,0)=(a,b,0) a ( 1 , 0 , 0 ) + b ( 0 , 1 , 0 ) = ( a , b , 0 )
它们的跨度是 x y xy x y 平面,其所有向量的形式为 ( a , b , 0 ) (a,b,0) ( a , b , 0 ) ,如下面的小部件所示。
现在想象我们有一个蓝色向量 h = ( 3 , 5 , 2 ) h=(3,5,2) h = ( 3 , 5 , 2 ) 并想看看它是否位于这个子空间中。一种分解方法是将其分解为绿色分量 ( 1 , 1 , 0 ) (1,1,0) ( 1 , 1 , 0 ) 和粉色分量 ( 2 , 4 , 2 ) (2,4,2) ( 2 , 4 , 2 ) 。
请注意绿色分量如何位于平面内,而粉色分量和蓝色向量位于平面外。绿色分量位于平面内,因为它可以由跨越平面的两个向量 ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 和 ( 0 , 1 , 0 ) (0,1,0) ( 0 , 1 , 0 ) 构建。
现在假设我们使用两个固定向量 ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 和 ( 0 , 1 , 0 ) (0,1,0) ( 0 , 1 , 0 ) 作为矩阵的行:
W = ( 1 0 0 0 1 0 ) W=\begin{pmatrix}1&0&0\\0&1&0\end{pmatrix} W = ( 1 0 0 1 0 0 )
在这种情况下,每一行提供一个我们可以在线性组合中使用的向量。 这些向量一起跨越输入空间的一个子空间,称为行空间。 因此,小部件中的平面是该矩阵的行空间。
现在让我们尝试使用绿色分量 ( 3 , 5 , 0 ) (3,5,0) ( 3 , 5 , 0 ) 和粉色分量 ( 0 , 0 , 2 ) (0,0,2) ( 0 , 0 , 2 ) 对同一蓝色向量进行不同的分解。绿色仍然位于行空间平面中,但粉色现在垂直于它,如下面的小部件所示。
让我们将蓝色向量 h h h 视为输入,并检查其分量如何对每次分解中的输出做出贡献。矩阵在两种情况下都会产生相同的输出,但每个分解中的组件对其做出不同的贡献。
在第一次分解中,我们可以通过将每个分量与 W W W 的每一行进行点积来计算其贡献。每个结果都会给出该组件对输出的贡献的一个坐标。
绿色组件( 1 , 1 , 0 ) (1,1,0) ( 1 , 1 , 0 ) 粉色组件( 2 , 4 , 2 ) (2,4,2) ( 2 , 4 , 2 ) 与第 1 行的点积 ( 1 , 0 , 0 ) ⋅ ( 1 , 1 , 0 ) = 1 (1,0,0)\cdot(1,1,0)=1 ( 1 , 0 , 0 ) ⋅ ( 1 , 1 , 0 ) = 1 ( 1 , 0 , 0 ) ⋅ ( 2 , 4 , 2 ) = 2 (1,0,0)\cdot(2,4,2)=2 ( 1 , 0 , 0 ) ⋅ ( 2 , 4 , 2 ) = 2 与第 2 行的点积 ( 0 , 1 , 0 ) ⋅ ( 1 , 1 , 0 ) = 1 (0,1,0)\cdot(1,1,0)=1 ( 0 , 1 , 0 ) ⋅ ( 1 , 1 , 0 ) = 1 ( 0 , 1 , 0 ) ⋅ ( 2 , 4 , 2 ) = 4 (0,1,0)\cdot(2,4,2)=4 ( 0 , 1 , 0 ) ⋅ ( 2 , 4 , 2 ) = 4 对产出的贡献 ( 1 , 1 ) (1,1) ( 1 , 1 ) ( 2 , 4 ) (2,4) ( 2 , 4 )
两个分量的第三个坐标都不会影响输出,因为两个矩阵行的第三个坐标均为零。根据线性关系,绿色和粉色的贡献加起来就是输出:
W h = W ( 1 , 1 , 0 ) + W ( 2 , 4 , 2 ) = ( 1 , 1 ) + ( 2 , 4 ) = ( 3 , 5 ) Wh=W(1,1,0)+W(2,4,2)=(1,1)+(2,4)=(3,5) W h = W ( 1 , 1 , 0 ) + W ( 2 , 4 , 2 ) = ( 1 , 1 ) + ( 2 , 4 ) = ( 3 , 5 )
在第二次分解中,绿色 ( 3 , 5 , 0 ) (3,5,0) ( 3 , 5 , 0 ) 贡献了整个输出,而粉色 ( 0 , 0 , 2 ) (0,0,2) ( 0 , 0 , 2 ) 没有贡献任何内容:
绿色组件( 3 , 5 , 0 ) (3,5,0) ( 3 , 5 , 0 ) 粉色组件( 0 , 0 , 2 ) (0,0,2) ( 0 , 0 , 2 ) 与第 1 行的点积 ( 1 , 0 , 0 ) ⋅ ( 3 , 5 , 0 ) = 3 (1,0,0)\cdot(3,5,0)=3 ( 1 , 0 , 0 ) ⋅ ( 3 , 5 , 0 ) = 3 ( 1 , 0 , 0 ) ⋅ ( 0 , 0 , 2 ) = 0 (1,0,0)\cdot(0,0,2)=0 ( 1 , 0 , 0 ) ⋅ ( 0 , 0 , 2 ) = 0 与第 2 行的点积 ( 0 , 1 , 0 ) ⋅ ( 3 , 5 , 0 ) = 5 (0,1,0)\cdot(3,5,0)=5 ( 0 , 1 , 0 ) ⋅ ( 3 , 5 , 0 ) = 5 ( 0 , 1 , 0 ) ⋅ ( 0 , 0 , 2 ) = 0 (0,1,0)\cdot(0,0,2)=0 ( 0 , 1 , 0 ) ⋅ ( 0 , 0 , 2 ) = 0 对产出的贡献 ( 3 , 5 ) (3,5) ( 3 , 5 ) ( 0 , 0 ) (0,0) ( 0 , 0 )
正如在第一次分解中一样,两个分量的第三个坐标都对输出没有贡献,因为两个矩阵行的第三个坐标都为零。根据线性关系,绿色和粉色的贡献加起来就是输出:
W h = W ( 3 , 5 , 0 ) + W ( 0 , 0 , 2 ) = ( 3 , 5 ) + ( 0 , 0 ) = ( 3 , 5 ) Wh=W(3,5,0)+W(0,0,2)=(3,5)+(0,0)=(3,5) W h = W ( 3 , 5 , 0 ) + W ( 0 , 0 , 2 ) = ( 3 , 5 ) + ( 0 , 0 ) = ( 3 , 5 )
请注意两个分解之间的差异:第一个粉红色分量仍然对输出有贡献,而第二个则没有贡献。 发生这种情况是因为第二个粉红色分量垂直于两行,因此垂直于整个行空间。 我们可以在小部件和表中的点积计算中看到这一点。在第一种情况下,粉红色分量具有 2 2 2 和 4 4 4 与两行的点积,而在第二种情况下,两个点积均为零。这表明位于行空间之外并不意味着向量被完全忽略;垂直于每一行都可以。
零空间:没有任何贡献的输入
我们已经看到第二个粉色分量 ( 0 , 0 , 2 ) (0,0,2) ( 0 , 0 , 2 ) 没有任何贡献,因为它垂直于每一行。对于沿 z z z 轴的每个向量 ( 0 , 0 , z ) (0,0,z) ( 0 , 0 , z ) 也是如此:更改其长度或反转其方向仍然会使两个点积为零。
矩阵映射到零的所有输入向量的集合称为其零空间。 对于我们在前面部分中使用的矩阵,该集合是整个 z z z 轴。第一个粉色分量有一部分位于零空间;第二个完全在于其中。
在这两种情况下,输入的零空间分量都是 ( 0 , 0 , 2 ) (0,0,2) ( 0 , 0 , 2 ) 。第二次分解显式地隔离它,将整个行空间组件置于绿色。 输入有多种可能的分解,但它分为行空间分量和零空间分量是唯一的。
因此,我们可以采用任何矩阵及其接受的输入,并计算出矩阵忽略该输入的哪一部分以及哪一部分影响输出。只有一种方法可以分割输入,使一部分完全位于行空间中,另一部分完全位于零空间中。
对于我们的矩阵和输入,这正是我们的小部件和表格中显示的第二个分解:
( 3 , 5 , 2 ) = ( 3 , 5 , 0 ) ⏟ row-space component + ( 0 , 0 , 2 ) ⏟ null-space component (3,5,2)=\underbrace{(3,5,0)}_{\text{row-space component}}+\underbrace{(0,0,2)}_{\text{null-space component}} ( 3 , 5 , 2 ) = row-space component ( 3 , 5 , 0 ) + null-space component ( 0 , 0 , 2 )
替代分解 ( 1 , 1 , 0 ) + ( 2 , 4 , 2 ) (1,1,0)+(2,4,2) ( 1 , 1 , 0 ) + ( 2 , 4 , 2 ) 构建相同的输入,但其第二个分量并不完全位于零空间中。对于这个例子来说,计算很简单;对于一般矩阵,SVD 等方法让我们可以系统地计算分割。
当向量垂直于每一行(因此垂直于行空间中的每个向量)时,向量映射为零。零空间是行空间的垂直补 ,我们将其写为:
Null ( W ) = Row ( W ) ⊥ \operatorname{Null}(W)=\operatorname{Row}(W)^\perp Null ( W ) = Row ( W ) ⊥
符号 ⊥ \perp ⊥ 表示与该空间中的每个向量垂直的所有向量。将输入分为这两部分给出:
h = h r o w + h n u l l , W h = W h r o w h=h_{\mathrm{row}}+h_{\mathrm{null}},
\qquad Wh=Wh_{\mathrm{row}} h = h row + h null , W h = W h row
因此 W h = W h r o w Wh=Wh_{\mathrm{row}} W h = W h row 显示只有行空间分量影响输出。矩阵仍然可以改变其长度和方向,或者将其映射到具有不同坐标数的输出空间。
左零空间:垂直于每个可能的输出
假设层的权重矩阵的第三行等于其前两行之和。这导致对输出的限制:第三个坐标始终等于前两个坐标之和。无论我们给它什么输入,它都不能产生 ( 1 , 2 , 4 ) (1,2,4) ( 1 , 2 , 4 ) ,因为前两个坐标需要第三个坐标为 3 3 3 。左零空间帮助我们识别层输出上的此类约束。
正如我们之前看到的,列空间包含所有可能的输出。 左零空间 描述了垂直于它们的方向。正如零空间垂直于输入空间中的行空间一样,左零空间垂直于输出空间中的列空间。
在我们前面的列空间示例中,每个输出都具有 ( s , t , s + t ) (s,t,s+t) ( s , t , s + t ) 的形式。第三个坐标始终等于前两个坐标之和。向量 q = ( − 1 , − 1 , 1 ) q=(-1,-1,1) q = ( − 1 , − 1 , 1 ) 捕获此约束:
q ⋅ ( s , t , s + t ) = − s − t + ( s + t ) = 0 q\cdot(s,t,s+t)=-s-t+(s+t)=0 q ⋅ ( s , t , s + t ) = − s − t + ( s + t ) = 0
它位于左侧零空间,因为它垂直于每个可能的输出。像 ( 0 , 0 , 1 ) (0,0,1) ( 0 , 0 , 1 ) 这样的目标打破了这个约束,因此没有输入可以使这个矩阵产生它。仅更改输入无法修复这种不匹配。
这赋予了左零空间一个实际的作用:它揭示了对固定权重矩阵可以产生什么的限制。 对于线性预测层,它可以告诉我们,即使在我们尝试找到产生它们的输入之前,一些目标输出也是无法到达的。这些约束适用于线性输出 W h Wh W h ;添加偏置会将它们转变为 z = W h + b z=Wh+b z = W h + b 的 q ⋅ z = q ⋅ b q\cdot z=q\cdot b q ⋅ z = q ⋅ b ,并且以下非线性激活可以进一步改变它们。
需要强调的是,左侧的零空间不是擦除输入所在的位置;这些输入映射到原点。它描述了输出侧的限制。
将四个子空间放在一起
现在我们可以将四个空间连接到一张图片中。行空间和零空间将输入分割成垂直分量。该矩阵将零空间分量发送为零,并将行空间分量转换为列空间中的输出。左侧零空间垂直于该输出子空间中的每个向量。
该图像显示了四个子空间如何相互关联,但其平坦块是示意性的:子空间可以是一条线或一个平面,具体取决于矩阵。下面的两个小部件使这些关系变得具体。您可以更改输入并查看它如何拆分为行空间和零空间分量,以及每个分量如何对输出做出贡献。
现在让我们在下面的小部件中探索这些关系。它使用输入向量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) 和矩阵:
W = ( 1 1 0 0 0 1 1 1 1 ) W=\begin{pmatrix}1&1&0\\0&0&1\\1&1&1\end{pmatrix} W = 1 0 1 1 0 1 0 1 1
起始输入 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) 位于行空间平面和零空间线之外。每个都有一个组件。三个滑块控制输入坐标 h 1 h_1 h 1 、h 2 h_2 h 2 和 h 3 h_3 h 3 。改变它们会改变矩阵变换的向量,而矩阵本身保持固定。
Reset
Input space · ℝ³ h₁ h₂ h₃ h hrow hnull 0 Row space is a plane , Null space is a line
Output space · ℝ³ z₁ z₂ z₃ Wh = Whrow 0 Whnull = (0, 0, 0) Column space is a plane , Left null space is a line
Drag either plot to rotate; scroll to zoom. With a plot focused, use the arrow keys to rotate, + and − to zoom, or 0 to reset zoom.
Input h₁ 5 Input h₂ 3 Input h₃ 2
Whole input h (5, 3, 2) → (8, 2, 10)
Row-space component hrow (4, 4, 2) → (8, 2, 10)
Null-space component hnull (1, −1, 0) → (0, 0, 0)
以下是四个子空间的定义。参数a a a 、b b b 、d d d 、s s s 和t t t 可以是任意实数。
子空间 形状 它包含的向量 这意味着什么 行距 飞机 ( a , a , b ) (a,a,b) ( a , a , b ) 前两个输入坐标相等(h 1 = h 2 h_1=h_2 h 1 = h 2 );第三是不受限制。 零空间 线 ( d , − d , 0 ) (d,-d,0) ( d , − d , 0 ) 前两个输入坐标取消,第三个为零。这些向量映射为零。 柱间距 飞机 ( s , t , s + t ) (s,t,s+t) ( s , t , s + t ) 第三个输出坐标是前两个坐标之和 (z 3 = z 1 + z 2 z_3=z_1+z_2 z 3 = z 1 + z 2 )。 左零空间 线 ( − d , − d , d ) (-d,-d,d) ( − d , − d , d ) 前两个坐标相等,第三个坐标为负值。这些向量垂直于列空间中的每个向量。
这三张卡片显示了整个输入及其两个组成部分。将 W W W 应用于行空间组件会得到与将其应用于整个输入相同的输出。零空间分量贡献为零,因此添加或删除它会使输出保持不变。
图像的 h r h_r h r 和 h n h_n h n 对应于小部件的 h r o w h_{\mathrm{row}} h row 和 h n u l l h_{\mathrm{null}} h null 。最初,蓝色输入分为绿色和粉色分量:
( 5 , 3 , 2 ) ⏟ h = ( 4 , 4 , 2 ) ⏟ h r o w + ( 1 , − 1 , 0 ) ⏟ h n u l l . \underbrace{(5,3,2)}_{h}
=\underbrace{(4,4,2)}_{h_{\mathrm{row}}}
+\underbrace{(1,-1,0)}_{h_{\mathrm{null}}}. h ( 5 , 3 , 2 ) = h row ( 4 , 4 , 2 ) + h null ( 1 , − 1 , 0 ) .
穿过图像的箭头表示应用 W W W 。在小部件中,整个输入及其绿色分量都会生成 ( 8 , 2 , 10 ) (8,2,10) ( 8 , 2 , 10 ) ,因此它们的输出箭头在橙色平面中重叠。粉红色分量映射为零。紫色左零空间线垂直于输出平面;它不是擦除输入的去处。
更改输入会使四个子空间保持不变。
现在让我们对这个替代矩阵使用相同的输入向量 h = ( 5 , 3 , 2 ) h=(5,3,2) h = ( 5 , 3 , 2 ) :
W = ( 1 1 0 2 2 0 3 3 0 ) W=\begin{pmatrix}1&1&0\\2&2&0\\3&3&0\end{pmatrix} W = 1 2 3 1 2 3 0 0 0
它具有相同的 3 × 3 3\times3 3 × 3 形状,但排名为 1:其所有行都是 ( 1 , 1 , 0 ) (1,1,0) ( 1 , 1 , 0 ) 的倍数。它的行空间和列空间都是线,两个零空间都是平面。起始输入位于行空间线和零空间平面之外,每个输入都有一个分量。滑块改变输入,而该矩阵保持固定。
Reset
Input space · ℝ³ h₁ h₂ h₃ h hrow hnull 0 Row space is a line , Null space is a plane
Output space · ℝ³ z₁ z₂ z₃ Wh = Whrow 0 Whnull = (0, 0, 0) Column space is a line , Left null space is a plane
Drag either plot to rotate; scroll to zoom. With a plot focused, use the arrow keys to rotate, + and − to zoom, or 0 to reset zoom.
Input h₁ 5 Input h₂ 3 Input h₃ 2
Whole input h (5, 3, 2) → (8, 16, 24)
Row-space component hrow (4, 4, 0) → (8, 16, 24)
Null-space component hnull (1, −1, 2) → (0, 0, 0)
对于该矩阵,四个子空间包含以下向量。同样,参数可以是任何实数。
子空间 形状 它包含的向量 这意味着什么 行距 线 ( a , a , 0 ) (a,a,0) ( a , a , 0 ) 前两个输入坐标相等,第三个为零。 零空间 飞机 ( d , − d , b ) (d,-d,b) ( d , − d , b ) 前两个输入坐标取消(h 1 + h 2 = 0 h_1+h_2=0 h 1 + h 2 = 0 );第三是不受限制。这些向量映射为零。 柱间距 线 ( s , 2 s , 3 s ) (s,2s,3s) ( s , 2 s , 3 s ) 第二个和第三个输出坐标是第一个的两倍和三倍。 左零空间 飞机 ( − 2 a − 3 b , a , b ) (-2a-3b,a,b) ( − 2 a − 3 b , a , b ) 坐标满足z 1 + 2 z 2 + 3 z 3 = 0 z_1+2z_2+3z_3=0 z 1 + 2 z 2 + 3 z 3 = 0 。这些向量垂直于列空间方向 ( 1 , 2 , 3 ) (1,2,3) ( 1 , 2 , 3 ) 。
在这里,更改 h 3 h_3 h 3 会使输出保持不变:第三个坐标方向位于零空间。只有沿绿色行空间线的分量对输出有贡献;每个输出都位于橙色的列空间线上。
矩阵秩和四个子空间的维度
我们需要了解的最后一个概念是矩阵秩。我们已经看到,具有相同形状的矩阵可以具有不同的子空间维度。秩告诉我们矩阵保留了多少个独立方向,并与其形状一起决定了所有四个子空间的维度。
对于具有 m m m 行和 n n n 列的矩阵,n n n 列定义 R n \mathbb R^n R n 的输入空间,m m m 行定义 R m \mathbb R^m R m 的输出空间。这些是完整输入和输出空间 的维度,由矩阵的形状 决定。
每个矩阵都有一个名为 rank r r r 的属性,它定义其行和列空间的共享维度:行和列跨越多少个独立方向。即使完整的输入和输出空间具有不同的维度,这两个空间也始终具有相同的维度。
同样,线性独立行的最大数量始终等于线性独立列的最大数量。排名不能超过行数或列数,形式为 r ≤ min ( m , n ) r\leq\min(m,n) r ≤ min ( m , n ) 。
考虑我们之前的 2 × 3 2\times3 2 × 3 矩阵:
W = ( 1 0 0 0 1 0 ) W=\begin{pmatrix}1&0&0\\0&1&0\end{pmatrix} W = ( 1 0 0 1 0 0 )
它的形状描述了从三个输入坐标到两个输出坐标的转换:3 → 2 3\to2 3 → 2 。它的两行是独立的,所以它的秩是2。行空间是R 3 \mathbb R^3 R 3 内部的x y xy x y 平面,由向量( a , b , 0 ) (a,b,0) ( a , b , 0 ) 组成。列空间全部为R 2 \mathbb R^2 R 2 ,由向量( a , b ) (a,b) ( a , b ) 组成。
因此,行和列空间共享二维,即使完整的输入和输出空间具有不同的维度。行空间仍然包含三坐标向量;只有两个坐标可以独立变化。在列空间中,这两个独立的坐标填充整个输出空间。
Two independent directions on each side → rank(W) = 2
Input space · ℝ³
The row space is a plane inside 3D.
Two independent rows span a plane in three dimensions The rows (1, 0, 0) and (0, 1, 0) span the horizontal h1 h2 plane. The vertical h3 axis is the null space. The row space has dimension two, although the input has three coordinates. h₃ · null space erased by W 0 r₁ r₂ h₁ h₂ Row-space dimension: 2
Null-space dimension: 3 − 2 = 1
Output space · ℝ²
The column space fills all of 2D.
Two independent columns span the entire two-dimensional output space The columns (1, 0) and (0, 1) span all of R2. The third column is (0, 0), marked at the origin, and adds no direction. The column space has dimension two. Its perpendicular complement, the left null space, contains only zero. c₁ c₂ c₃ = 0 z₁ z₂ Column-space dimension: 2
Left-null-space dimension: 2 − 2 = 0
阴影平面具有相同的尺寸,但位于不同的环境空间中。标签r 1 , r 2 r_1,r_2 r 1 , r 2 表示输入空间R 3 \mathbb R^3 R 3 中的行; c 1 , c 2 , c 3 c_1,c_2,c_3 c 1 , c 2 , c 3 表示输出空间 R 2 \mathbb R^2 R 2 中的列,其中 c 3 = 0 c_3=0 c 3 = 0 位于原点。阴影显示每个无限平面的一部分。
该表将该矩阵的完整输入和输出空间与行和列空间进行了比较:
空间 它住在哪里 它的尺寸 输入空间 R 3 \mathbb R^3 R 3 3 行距 R 3 \mathbb R^3 R 3 内的平面:向量 ( a , b , 0 ) (a,b,0) ( a , b , 0 ) 2 输出空间 R 2 \mathbb R^2 R 2 2 柱间距 所有 R 2 \mathbb R^2 R 2 :向量 ( a , b ) (a,b) ( a , b ) 2
该矩阵保留前两个坐标并删除第三个:
( 1 0 0 0 1 0 ) ⏟ W ( h 1 h 2 h 3 ) = ( h 1 h 2 ) . \underbrace{\begin{pmatrix}1&0&0\\0&1&0\end{pmatrix}}_{W}
\begin{pmatrix}h_1\\h_2\\h_3\end{pmatrix}
=\begin{pmatrix}h_1\\h_2\end{pmatrix}. W ( 1 0 0 1 0 0 ) h 1 h 2 h 3 = ( h 1 h 2 ) .
我们可以将其写为 W ( h 1 , h 2 , h 3 ) = ( h 1 , h 2 ) W(h_1,h_2,h_3)=(h_1,h_2) W ( h 1 , h 2 , h 3 ) = ( h 1 , h 2 ) ,使用元组作为列向量的简写。例如,( 5 , 3 , 2 ) (5,3,2) ( 5 , 3 , 2 ) 和 ( 5 , 3 , 99 ) (5,3,99) ( 5 , 3 , 99 ) 都映射到 ( 5 , 3 ) (5,3) ( 5 , 3 ) 。行空间分量 ( a , b , 0 ) (a,b,0) ( a , b , 0 ) 映射到 ( a , b ) (a,b) ( a , b ) ,而零空间分量 ( 0 , 0 , c ) (0,0,c) ( 0 , 0 , c ) 映射到零。
这会在输入中留下一个零空间方向:第三坐标轴。在输出侧,列空间已经填充了所有 R 2 \mathbb R^2 R 2 ,因此其垂直补集(左零空间)仅包含零向量且维度为零。
相同的维度计算适用于秩为 r r r 的任何 m × n m\times n m × n 矩阵:行和列空间各自具有维度 r r r ,零空间具有维度 n − r n-r n − r ,左侧零空间具有维度 m − r m-r m − r 。
形状设定限制; 不同的 2 × 3 2\times3 2 × 3 矩阵可以具有等级 1。其完整的输入和输出空间仍为 R 3 \mathbb R^3 R 3 和 R 2 \mathbb R^2 R 2 ,但其行和列空间均为行。其零空间将具有维度 3 − 1 = 2 3-1=2 3 − 1 = 2 ,其左零空间将具有维度 2 − 1 = 1 2-1=1 2 − 1 = 1 。