先修:12 数据与预测线;13 向量、数乘与张成;14 点积与正交

拧动一个旋钮,整组预测按一种模式改变;再拧另一个旋钮,预测又按另一种模式变化。第13章把这两种调整方向写成向量,第14章教我们用点积比较方向。现在的问题是:能否把整套调整规则收起来,让“输入两个参数,输出三个预测”成为一次清楚的操作?

矩阵就是这样的表达工具。它保留了每个数的位置,也规定这些数怎样共同作用。只看见一张数字表,还没有看见矩阵在做什么;看见它怎样把输入变成输出,才抓住了这一章的主线。

把两个调整方向并排放好

沿用虚构玩具的读数:滑杆位置依次为0、1、2厘米,观测读数依次为1、2、2厘米。模型仍为ŷ=ax+b,a是斜率,b是截距,ŷ是预测读数。约定使用厘米作长度单位,下面的运算先针对按这一单位记录的数值。

沿用前章的记号,把三个输入数排成向量x=(0,1,2),再记u=(1,1,1)。粗体x表示整组输入,单点模型中的x仍表示一个输入数值。调整a,相当于沿x改变预测;调整b,相当于沿u改变预测。因此预测向量始终是

ŷ=ax+bu=(b,a+b,2a+b)。

这里的ŷ表示成组预测,而不是某一个位置的单独读数;三个分量保持观测的原有顺序。把x、u竖着写,再并排装进同一个长方形,就得到矩阵X:

X=x u=[[0,1],1,1,2,1]。

双层方括号中的每一组内层方括号是一行;三行依次是(0,1)、(1,1)、(2,1)。从上往下读,第一列是x,第二列是u。我们没有添加新的数据,只把已有的两个方向按固定顺序排好。

这时很容易犯一个小错:把参数先后次序看成无关紧要。若只把θ改成(b,a),却不交换X的两列,得到的就是bx+au,已经换了一套规则。矩阵中的位置承担意义:列与输入分量一一对应,行与输出位置一一对应。重排可以,但关联的标签与数值必须一起调整。

将参数写成θ=(a,b),θ读作“西塔”。约定本文参与矩阵运算的向量都竖写成列,正文中的圆括号只是节省版面的列向量简写。矩阵与向量相乘记作Xθ,它的意思就是:用θ的第一个数乘X的第一列,用第二个数乘第二列,再相加。1

所以Xθ=ax+bu。取a=1/2、b=1,就有Xθ=(0,1/2,1)+(1,1,1)=(1,3/2,2)。这是第12章的候选B,包装换了,预测没有变。

还可以反过来认出每一列:输入(1,0),只启用第一个参数,输出就是x;输入(0,1),只启用第二个参数,输出就是u。两列分别记录这两次单独试探的结果,任意参数的输出则由它们按比例叠加。因此,矩阵不是把关系藏进表格,而是把每个输入分量的作用明确摆出来。

矩阵X的两列分别装入方向x与u;乘参数向量时按列组合,按行点积得到同一组三个预测

图1:第一列对应a,第二列对应b;沿列看是两个方向怎样合成,沿行看是每条观测怎样计算。

同一次乘法的两种读法

沿行计算,第一行给出(0,1)·(a,b)=b;第二行给出(1,1)·(a,b)=a+b;第三行给出(2,1)·(a,b)=2a+b。符号“·”是上章的点积:对应分量相乘后求和。于是又得到

Xθ=(b,a+b,2a+b)。

按列看,我们在问“两个参数各自影响哪些输出”;按行看,我们在问“某一个输出怎样受到两个参数影响”。这两种读法必然一致:ax+bu的第i个分量就是a乘x的第i个分量,加上b乘u的第i个分量,恰好是第i行与θ的点积。i只是位置编号,这里依次为1、2、3。

矩阵的尺寸写作“行数×列数”,所以X是3×2矩阵。它接收两个数,产生三个数,写作X:ℝ²→ℝ³;ℝ²是所有实数对组成的集合,ℝ³是所有实数三元组组成的集合,箭头表示从前者输入、在后者输出。

输出有三个分量,不意味着它们可以任意独立调整。我们仍只有x、u两个调整方向,全部预测仍在它们的张成集合中。矩阵记法没有取消第13章发现的限制。

一般说,一个m×n矩阵有m行、n列,乘一个n分量的列向量后,输出有m个分量。m、n是正整数,分别数行和列。先检查尺寸,是比急着算乘法更可靠的习惯。例如X不能直接乘观测向量y=(1,2,2):它等着两个输入,y却给了三个。

也要注意,观测值y并没有写进X。X来自输入位置与所选模型的形式;在相同位置重新测量,即使读数改变,只要仍用这个直线模型,X就不变。变化的是我们希望预测接近的目标。把计算规则与待比较的数据分开,才不会误以为换一种记法已经完成了拟合。

为什么这是一种线性变换

这里的“线性”有可检验的含义:先把输入相加再变换,与先分别变换再相加相同;先把输入乘一个数再变换,与先变换再乘这个数相同。

令v=(v₁,v₂)、w=(w₁,w₂)是任意两个参数数值向量,下标1、2标出它们的两个分量。按列组合的定义,

X(v+w)=(v₁+w₁)x+(v₂+w₂)u

=(v₁x+v₂u)+(w₁x+w₂u)=Xv+Xw。

中间那一步只用了数乘的分配律和向量加法的交换、结合规则。再令c为任意实数,就有

X(cv)=(cv₁)x+(cv₂)u=c(v₁x+v₂u)=cXv。

两条等式对所有v、w、c都成立,这才证明X所表示的变换是线性的。我们并没有靠“矩阵看起来像表格”来证明,也没有只检验一组数字就宣布普遍成立。换成更多列,同样逐列分配,理由仍然成立。

一个立即可见的结果是X(0,0)=(0,0,0):零输入产生零输出。另一个结果更实用:参数从θ改成θ+δ时,预测从Xθ改成Xθ+Xδ。δ读作“德尔塔”,表示参数的改变量。只要X保持不变,一次调整造成的预测变化,可以单独算出再加回去。

不过要分清“谁在变化”。此处固定了三条记录的输入位置,变化的是(a,b),所以从参数到预测是线性映射。若固定a、b,让x变化,函数f(x)=ax+b在b≠0时有f(0)=b≠0,不满足线性映射必须把零送到零的要求。它是线性部分ax加上平移b,通常称为仿射函数。日常说“直线模型”,不能省略这里的数学区别。例如f(x)=2x+1时,f(1)+f(1)=6,而f(1+1)=5:图形虽然是直线,加法保持性质却已经失败。

单位也不能省略。a描述“输出厘米/输入厘米”,b描述输出厘米;两种分量的物理角色不同。θ在约定单位下可以作为一对数运算,却不能不加说明地把√(a²+b²)叫作一段物理距离。换单位、重新设定参数尺度,都会改变这种数值长度;矩阵运算本身没有替我们选择参数空间的距离标准。

这与在预测空间里比较残差不同。三个预测分量都表示同一种读数,也都用厘米记录;而参数的两个分量分别控制变化率和起点。把不同角色的数排在一起,是为了方便描述联动,并没有宣称它们能用同一把物理尺子测量。

两次变换怎样合成一次

先暂离玩具,在普通平面上看两个操作。设z=(s,t)表示横、纵坐标,S把横坐标放大两倍、纵坐标不变;R把平面绕原点逆时针旋转90度。因此

S=[[2,0],0,1],Sz=(2s,t);

R=[[0,−1],1,0],Rz=(−t,s)。

从z=(1,1)出发,先S后R得到(1,1)→(2,1)→(−1,2)。反过来,先R后S得到(1,1)→(−1,1)→(−2,1)。两条路线的终点不同,因为横向拉伸始终沿固定的横轴进行,旋转改变了向量相对于这条轴的方向。

同一个向量先横向放大再旋转得到负一二,先旋转再横向放大得到负二一;两幅坐标图使用相同刻度

图2:实心圆是共同起点(1,1),空心圆是中间结果,方块是终点;两个操作都绕固定原点、沿固定坐标轴定义。

矩阵乘法把这样的先后操作合成一个矩阵。RS表示先做右边的S,再做左边的R,满足(RS)z=R(Sz)。怎样求RS?把S的每一列分别交给R,得到的输出依次成为RS的列。2

S的第一列(2,0)经R变成(0,2),第二列(0,1)经R变成(−1,0),所以RS=[[0,−1],2,0]。同理SR=[[0,−2],1,0],两者确实不同。矩阵乘法一般不能交换顺序,并不是每一对矩阵都一定不能交换;这一组反例否定的是“总能交换”。

为什么逐列处理能代表整个复合?若B有两列B₁、B₂,输入w=(w₁,w₂),先得到Bw=w₁B₁+w₂B₂。再施加线性变换A,分配律给出A(Bw)=w₁AB₁+w₂AB₂。所以只要把AB₁、AB₂收成新矩阵的列,就能应对每一个w;这正是AB的定义。

因此,若A有m行、n列,B有n行、k列,AB就有m行、k列,k也表示一个正整数。中间的n必须相同,才能把B输出的n个数交给A;若反过来,尺寸可能根本不允许相乘。矩阵乘法的规则是为变换的衔接服务的,不是任意制定的算术口诀。

还可以从行的角度算同一个乘积:AB中某一位置的数,等于A对应的行与B对应的列做点积。例如RS第一行第二列为(0,−1)·(0,1)=−1。每个新系数累计了输入经过中间各分量到达该输出的贡献;把这个数放回相应的位置,整条计算路径才没有弄乱。

转置把列变成行

回到玩具矩阵X。将每一列原样改写成一行,得到它的转置,记作Xᵀ,上标T表示转置:

Xᵀ=[[0,1,2],1,1,1]。

X有三行两列,Xᵀ便有两行三列。一般地,转置把原矩阵第i行、第j列的数放到新矩阵第j行、第i列,i、j是行列编号。3

现在Xᵀ可以乘三个分量的观测向量y=(1,2,2)。按行点积,

Xᵀy=(x·y,u·y)=(0×1+1×2+2×2,1+2+2)=(6,5)。

它一次收集了y与X各列的点积。6和5是按约定单位得到的数值汇总,不是拟合出的斜率和截距,也不是已经除以方向长度的投影系数。

矩阵X的两列在转置后成为两行,分别与观测向量(1,2,2)做点积,得到六和五

图3:颜色追踪同一组数字,转置改变排列方式;点积才产生右侧的两个汇总值。

转置与求逆是两件事。求逆想找到能撤销原变换的操作,转置只规定行列互换,不能自动理解为“撤销原来的变换”。例如先把θ=(1,1)变成Xθ=(1,2,3),再乘Xᵀ会得到(8,6),并没有回到(1,1)。撤销变换需要另外的条件与概念,行列互换本身并不提供这个保证。第17章会用转置集中表达残差与各调整方向的关系,此处先学会它确切做了什么。

从三个预测到成批计算

若把候选A、B的参数并排作为矩阵Θ的两列,Θ=[[1,1/2],1,1],那么XΘ的第一列就是A的三个预测,第二列就是B的三个预测。这是矩阵乘法按列定义的直接应用:同一套规则可以同时施加到多个输入上。

人工智能中的线性层也使用这种加权求和。权重矩阵W的每一行规定一个输出怎样组合输入向量h的分量,Wh一次形成全部输出;许多输入并排放好,就可以组织成批运算。如果再加固定偏置向量d,得到Wh+d,严格说整体通常是仿射变换。把数字组织得整齐,并不自动说明权重从何而来,也不保证预测可靠。

这一章收起的是一套关系:列描述各输入怎样影响整体,行描述每个输出怎样算出,乘法衔接前后操作,转置重新组织点积。下一章再问:哪些输出能够到达,不同输入会不会产生相同输出?

顺手试一下

题目1: 用本章的X与θ=(1/2,1),分别按列组合、按行点积计算Xθ。再令δ=(1/2,−1/2),求Xδ,并用它求出X(θ+δ)。说明为什么能这样相加。

**提示:**δ的第一项改变斜率,第二项改变截距;检验直接计算与线性性质是否一致。

**参考答案:**按列,Xθ=(0,1/2,1)+(1,1,1)=(1,3/2,2)。按行,三个点积依次为1、1/2+1、2×1/2+1,结果相同。Xδ=(−1/2,0,1/2),所以Xθ+Xδ=(1/2,3/2,5/2)。直接用θ+δ=(1,1/2)计算也得到同一结果。因为X固定且满足加法保持性质,X(θ+δ)=Xθ+Xδ;这不是所有带平移的变换都自动具备的性质。

题目2: 仍使用本章的S与R,但输入改为z=(2,−1)。分别求RSz和SRz,再写出Sᵀ并计算Sᵀ(Sz)。它是否回到了原输入?这对“转置总能撤销原变换”的说法意味着什么?

**提示:**先算最右边的操作。Sᵀ由行列互换得到,仍可用行点积计算。

**参考答案:**Sz=(4,−1),所以RSz=(1,4);Rz=(1,2),所以SRz=(2,2)。Sᵀ=[[2,0],0,1],与S相同,于是Sᵀ(Sz)=Sᵀ(4,−1)=(8,−1),没有回到(2,−1)。这个反例足以否定“转置总能撤销原变换”:这里行列互换之后仍是横向放大,连续施加两次就放大了四倍。

参考与延伸

1 佐治亚理工学院,Dan Margalit、Joseph Rabinoff,《Interactive Linear Algebra》,2.3 Matrix Equations。核对矩阵乘向量的列组合、行列乘法与尺寸规则。

2 同书,3.4 Matrix Multiplication。核对矩阵乘法与变换复合、从右向左的作用顺序及一般不交换的性质。

3 麻省理工学院开放课程,Gilbert Strang,18.06SC,第5讲转置、置换与向量空间讲稿,第4—5页。核对转置的行列互换定义;本文不展开讲稿中的消元、置换与对称矩阵内容。

本文玩具读数沿用第12章的虚构教学数据,推导、练习与图解围绕这组数据独立编排;以上资料用于核对概念。


作者:Jiancheng Wang · 数学之美(独立原创)