从函数角度去看矩阵
考虑矩阵运算本质上很困难,我们期望寻找一个简单的思考逻辑而不是反复纠结矩阵每一项的具体意义。我们可以从函数的角度去看矩阵,这样可以让我们更简单理解矩阵的运算。
矩阵和函数映射 Matrix and Function
我们知道对于函数 ,其可以将一个输入空间映射到一个输出空间,如 ,如果输入空间为 维的实数空间 (即输入是 个实数),输出空间为 维的实数空间 (输出是 个实数),则可以表示为,则其可以用如下标记表示:
也可以使用 笛卡尔积(Cartesian product) 表示: 让我们再考虑一个 行 列的矩阵 ,其的表示形式为:
矩阵的形状
对于 行 列 的矩阵,其形状为 ,类似的,我们可以认为 维向量是一个 形状的矩阵。
我们发现矩阵的形状表示和函数的笛卡尔积非常类似( vs. ),表示其中必然有相似联系。
我们可以将 个实数()看作一个 的矩阵,即一个 维的向量 。如果将这个向量分别作用在函数 和矩阵 上,我们会发现一个有趣的性质:
对于 函数和 矩阵都能右接受一个 维的数字,然后将其映射到一个 维的数字。
换句话说,我们可以认为矩阵运算和函数运算非常类似。其都是将输入空间映射到对应的输出空间。 即其都在将输入空间变换到输出空间。
组合 Composition
如果我们再考虑组合,即考虑一个函数 ,其与函数 的 composition 可以被描述为
组合运算为:
而我们再考虑矩阵,假设矩阵 ,则有 即,我们发现矩阵点乘也类似于函数的组合。
逆运算 Inverse
如考虑点 可以通过函数 映射到 , 可以通过 通过函数 映射。
即
flowchart LR s1((s1)) s2((s2)) s3((s3)) s1 --f1--> s2 s2 --f2--> s3 s1 --f1 o f2--> s3
如令 的组合为 ,则有
flowchart LR s1((s1)) s2((s2)) s3((s3)) s1 --f1--> s2 s2 --f2--> s3 s1 --g--> s3
如果矩阵 可以分别表示 ,则可以写作:
flowchart LR s1((s1)) s2((s2)) s3((s3)) s1 --M1--> s2 s2 --M2--> s3 s1 --G--> s3
而如果考虑逆运算,即
类似的,矩阵可以写作
因此我们获得了矩阵的逆运算规则:
而如果矩阵 不是方阵(Square Matrix),则其并没有严格意义上的 Inverse,即 ,我们可以引入 Pseudo Inverse (Moore–Penrose inverse) 来表示 的逆: 满足一个逆的定义
⚠️注意:这两个性质并不总是同时成立。实际上,对于非方阵的伪逆,只有在以下情况下才成立:
如果 且 是行满秩的,则只有第一个等式成立 如果 且 是列满秩的,则只有第二个等式成立 只有当 且 是满秩方阵时,两个等式才同时成立
总结
在函数空间和向量空间,我们有如下对应关系
运算 | 函数空间 | 向量空间 |
---|---|---|
映射/变换 | 或 | |
组合 | ||
逆运算 | 或 | |
组合逆运算 |
我们可以把矩阵看作一个函数映射,这样的好处是你不再需要关注矩阵具体在做什么,而只需要映射这件事的语义(semantic)以及输入和输出空间的形状即可。
例如,如果我们需要求一个矩阵,其可以将红绿蓝三色的光值(3 维向量,分别代表红绿蓝的值)转换为灰度值(1 个标量,也可以看作 的矩阵)。从空间视角,我们期望能寻找到函数能够将 3 维三色空间中的点映射到 1 维灰度空间。那其实意味着我们需要找一个形状为 的矩阵 (如果左结合则为 ),其满足对应转换即可。很多时候,我们只在乎矩阵中的语义(做了什么),而不需要在乎里面在进行什么计算(怎么做)。
当然,需要注意的矩阵能表达的映射是有限的,而函数则可以表达更多的映射关系。因此,矩阵看作是函数的一种特殊形式。