2119 字
11 分钟
初探线性代数:向量、矩阵和张量

最近打算开始读《深度学习》(花书),开局就是线性代数,给了我这个高中生当头一棒,但奈何这深度学习还是得学,也只好试试初探一下线性代数,也希望这篇文章可以给想要学习线性代数的高中生一些建议

接下来我将跟随花书的节奏,一步步往下看,作为初探线性代数的第一篇文章,本文讲述的是向量、矩阵和张量

我们对线性代数并不陌生,无论是物理中的力的合成与分解,还是数学中的向量,都是线性代数的一部分

向量、矩阵和张量#

从向量 (vectorvector) 讲起#

基于我们对于向量更加了解,我们先从向量开始学习

在线性代数中,向量的常规表示如下:

x=[x_1x_2x_n]\mathbf{x}=\begin{bmatrix} x\_1\\ x\_2\\ \vdots\\ x\_n \end{bmatrix}

其中,向量的名字通常为一个粗体小写字母 (如 x\mathbf {x} ) 表示,每个元素为 x_nx\_n

让我们来举一个更为直观的例子:

a=[12],b=[42]\mathbf{a}=\begin{bmatrix} -1\\ 2 \end{bmatrix}, \mathbf{b}=\begin{bmatrix} 4\\ 2 \end{bmatrix}

我们定义了两个二维向量 a\mathbf {a}b\mathbf {b} ,或许我们可以将其写成我们更为熟悉的形式:

a=(1,2),b=(4,2)\mathbf{a}=(-1,2),\mathbf{b}=(4,2)

没错,这就是我们数学课上学习到的向量的坐标表示

让我们来看一个实际应用的例子。假设一个物体从原点出发,先向东移动 3 米,再向北移动 4 米,那么这个位移向量可以表示为:

d=[34]\mathbf{d}=\begin{bmatrix} 3\\ 4 \end{bmatrix}

这个向量的长度 (模) 就是物体移动的直线距离:d=32+42=5|\mathbf {d}| = \sqrt {3^2 + 4^2} = 5 米。

你或许会注意到这里使用的是双竖线而非单竖线,这是因为我们使用的是欧几里得范数 (EuclideanNormEuclidean \enspace Norm),其定义为:x=x_12+x_22++x_n2|\mathbf {x}| = \sqrt {x\_1^2 + x\_2^2 + \cdots + x\_n^2},对于向量,其欧几里得范数 (使用双竖线表示),就是我们学校中学到的使用单竖线表示的模长 (向量的长度)

接下来是矩阵 (matrixmatrix)#

矩阵在线性代数中与向量的表示类似,其常规表示如下:

A=[A_1,1&A_1,2A_2,1&A_2,2]\mathbf{A}=\begin{bmatrix} A\_{1,1}\&A\_{1,2}\\ A\_{2,1}\&A\_{2,2} \end{bmatrix}

矩阵是一个二维数组,与计算机中的二维数组类似,其每一个元素可以用两个索引确定,我们通常会赋予矩阵粗体的大写变量名称,比如此处使用 A\mathbf {A} ,对于每个元素 A_i,jA\_{i,j}ii 为行索引, jj 为列索引

请注意:当我们需要使用索引定位某一个元素时,我们通常会在表达式后面接下标,如 f(A)_i,jf (\mathbf {A})\_{i,j}

还有张量 (tensortensor)#

张量这个词你或许感觉很陌生,但它的英文你一定很熟悉 **:Tensor**,是的,大名鼎鼎的神经网络框架 TensorFlow 的名字就取自张量一词

所谓张量,就是超过两维的数组,一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。

因为张量描述的是超越二维的数组,我们也就无法像矩阵 “列举出来”,对于一个张量 A\mathbf {A} ,只能写成类似于 A_i,j,kA\_{i,j,k}

举个例子,在图像处理中,一张彩色图片就可以用一个三维张量表示:

  • 第一维表示图片的高度 (像素行数)
  • 第二维表示图片的宽度 (像素列数)
  • 第三维表示 RGB 三个颜色通道

所以一张 100×100 像素的彩色图片可以表示为一个 100×100×3 的张量。

转置#

矩阵的转置 (transposetranspose​) 操作或许一开始不太好理解,坦白地讲我也觉得其 “几何定义”(即镜像) 确实不好理解,不妨直接记住 “代数” 定义,其操作如下:

(A)i,j=Aj,i(A^\top)_{i,j}= A_{j,i}

是的,转置操作所谓的沿对角线镜像在索引表示上的操作其实就是行、列索引的互换,让我们来举个例子:

A=[A_1,1&A_1,2A_2,1&A_2,2A_3,1&A_3,2]A=[A_1,1&A_2,1&A_3,1A_1,2&A_2,2&A_3,2]\mathbf{A}=\begin{bmatrix} A\_{1,1}\&A\_{1,2} \\ A\_{2,1}\&A\_{2,2} \\ A\_{3,1}\&A\_{3,2} \end{bmatrix} \Rightarrow \mathbf{A^\top}=\begin{bmatrix} A\_{1,1}\&A\_{2,1}\&A\_{3,1}\\ A\_{1,2}\&A\_{2,2}\&A\_{3,2} \end{bmatrix}

这样是不是好理解多了?

矩阵和向量的运算#

矩阵相加#

如果矩阵的形状一样,我们就可以把两个矩阵相加,其法则非常简单 —— 对应位置的元素相加即可

C=A+B\mathbf {C}=\mathbf {A}+\mathbf {B} ,其中就有 C_i,j=A_i,j+B_i,jC\_{i,j}=A\_{i,j}+B\_{i,j}

标量与矩阵相乘#

当标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加

D=aB+c\mathbf {D} = a\cdot \mathbf {B} + c ,其中 D_i,j=aB_i,j+cD\_{i,j} = a\cdot B\_{i,j} + c

举例而言:

a=2,B=[1342],C=aB=[2684]a=2,\enspace \mathbf{B}=\begin{bmatrix} 1&3\\ 4&2 \end{bmatrix},\quad \mathbf{C}=a \cdot \mathbf{B} = \begin{bmatrix} 2&6\\ 8&4 \end{bmatrix}

矩阵与向量相加#

特别地,在深度学习中,我们会使用一些不那么常规的符号,比如我们允许矩阵与向量相加,产生另一个矩阵:

C=A+b\mathbf{C}=\mathbf{A} + \mathbf{b}

其中:

C_i,j=A_i,j+b_jC\_{i,j}=A\_{i,j} + b\_{j}

矩阵乘法#

接下来便是重头戏 —— 矩阵乘法,这是矩阵运算中最重要的操作之一,也是初学时比较难理解的一个操作

矩阵 A\mathbf {A}B\mathbf {B}矩阵乘积是第三个矩阵 C\mathbf {C}

其可以写作:

C=ABC=AB\mathbf {C} = \mathbf {A}\mathbf {B} \enspace 或 \enspace \mathbf {C} = \mathbf {A}\cdot\mathbf {B}

先决条件#

要进行乘法运算,两个矩阵需满足前提: 矩阵 A\mathbf {A} 的列数必须和矩阵 B\mathbf {B} 的行数相等。如果矩阵 A\mathbf {A} 的形状是 m×nm \times n ,矩阵 B\mathbf {B} 的形状是 n×pn \times p ,那么其乘积运算的结果矩阵 C\mathbf {C} 的形状就是 m×pm \times p ,举例而言:

A=[A_1,1A_1,2A_1,3A_2,1A_2,2A_2,3]\mathbf{A}= \begin{bmatrix} A\_{1,1} & A\_{1,2} & A\_{1,3} \\ A\_{2,1} & A\_{2,2} & A\_{2,3} \end{bmatrix} B=[B_1,1B_1,2B_2,1B_2,2B_3,1B_3,2]\mathbf{B}= \begin{bmatrix} B\_{1,1} & B\_{1,2} \\ B\_{2,1} & B\_{2,2} \\ B\_{3,1} & B\_{3,2} \end{bmatrix}

此时,矩阵 A\mathbf {A} 与矩阵 B\mathbf {B} 可以做乘法运算,其结果矩阵 C\mathbf {C} 的形状为:

C=[C_1,1C_1,2C_2,1C_2,2]\mathbf{C}= \begin{bmatrix} C\_{1,1} & C\_{1,2}\\ C\_{2,1} & C\_{2,2} \end{bmatrix}

运算法则#

从定义上来看,乘积运算是这样运作的:

Ci,j=k=1nA_i,kB_k,j=A_i,1B_1,j+A_i,2B_2,j++A_i,nB_n,j\mathbf{C} _{i,j} = \sum_{k=1}^n A\_{i,k}B\_{k,j} = A\_{i,1}B\_{1,j} + A\_{i,2}B\_{2,j} + \cdots + A\_{i,n}B\_{n,j}

如果你前面掌握的不错,并且有一定数学功底,那么你大概可以对着表达式,稍加思索后明白这一切是如何发生的,如果不理解也没关系,我们来继续深入 / 简化

让我们来看一个具体的数值计算例子:

[123456]×[789101112]=============[(1×7+2×9+3×11)(1×8+2×10+3×12)(4×7+5×9+6×11)(4×8+5×10+6×12)]=============[5864139154]\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \times \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} ============= \begin{bmatrix} (1\times7 + 2\times9 + 3\times11) & (1\times8 + 2\times10 + 3\times12) \\ (4\times7 + 5\times9 + 6\times11) & (4\times8 + 5\times10 + 6\times12) \end{bmatrix} ============= \begin{bmatrix} 58 & 64 \\ 139 & 154 \end{bmatrix}

Matrix_multiplication_diagram

这是一张矩阵乘积运算的示意图,让我们一起来看

假设矩阵 C\mathbf {C} 为运算结果,则对于 (1,2)(1,2)(2,3)(2,3) 这两个位置,是这样运算得来的:

C_1,2=_k=12A_1,kB_k,2=A_1,1B_1,2+A_1,2B_2,2C\_{1,2}=\sum\_{k=1}^2 A\_{1,k}B\_{k,2}=A\_{1,1}B\_{1,2}+A\_{1,2}B\_{2,2} C_3,3=_k=12A_3,kB_k,3=A_3,1B_1,3+A_3,2B_2,3C\_{3,3}=\sum\_{k=1}^2 A\_{3,k}B\_{k,3}=A\_{3,1}B\_{1,3}+A\_{3,2}B\_{2,3}

应该有些感觉了,当计算 C_1,2C\_{1,2}C_3,3C\_{3,3} 这两个值时,分别来自两个矩阵的元素都依箭头方向而两两配对,把每一对中的两个元素相乘,再把这些乘积加总起来,最后得到的值即为箭头相交位置的值。

我不知道该怎么描述这个过程,你可以仔细品读一下,可以在草稿纸上自己试一试,可以把每两个相乘的项连起来,颇有一种连连看的感觉,我相信你可以理解的

现在让我们再来试着写一下通式,还是以先决条件中的两个矩阵相乘为例,此时有:

C=[C_1,1C_1,2C_2,1C_2,2]=============[A_1,1B_1,1+A_1,2B_2,1+A_1,3B_3,1A_1,1B_1,2+A_1,2B_2,2+A_1,3B_3,2A_2,1B_1,1+A_2,2B_2,1+A_2,3B_3,1A_2,1B_1,2+A_2,2B_2,2+A_2,3B_3,2]\mathbf{C}= \begin{bmatrix} C\_{1,1} & C\_{1,2}\\ C\_{2,1} & C\_{2,2} \end{bmatrix} ============= \begin{bmatrix} A\_{1,1}B\_{1,1}+A\_{1,2}B\_{2,1}+A\_{1,3}B\_{3,1} & A\_{1,1}B\_{1,2}+A\_{1,2}B\_{2,2}+A\_{1,3}B\_{3,2}\\ A\_{2,1}B\_{1,1}+A\_{2,2}B\_{2,1}+A\_{2,3}B\_{3,1} & A\_{2,1}B\_{1,2}+A\_{2,2}B\_{2,2}+A\_{2,3}B\_{3,2} \end{bmatrix}

也为大家安利一下 3Blue1Brown 的《线性代数的本质》系列视频,看完以后你会有更深层次的理解:

让我们来看一个矩阵乘法的实际应用。假设一个商店销售三种商品,价格分别是:

  • 商品 A:10 元
  • 商品 B:15 元
  • 商品 C:20 元

两个顾客的购买情况如下:

  • 顾客 1:2 个 A,1 个 B,3 个 C
  • 顾客 2:1 个 A,3 个 B,2 个 C

我们可以用矩阵乘法来计算每个顾客需要支付的金额:

[213132]×[101520]=============[2×10+1×15+3×201×10+3×15+2×20]=============[9585]\begin{bmatrix} 2 & 1 & 3 \\ 1 & 3 & 2 \end{bmatrix} \times \begin{bmatrix} 10 \\ 15 \\ 20 \end{bmatrix} ============= \begin{bmatrix} 2\times10 + 1\times15 + 3\times20 \\ 1\times10 + 3\times15 + 2\times20 \end{bmatrix} ============= \begin{bmatrix} 95 \\ 85 \end{bmatrix}

这个结果表示顾客 1 需要支付 95 元,顾客 2 需要支付 85 元。


(To Be Continued…)

初探线性代数:向量、矩阵和张量
https://vriancao.top/posts/vector-matrix-tensor/vector-matrix-tensor/
作者
VrianCao
发布于
2024-11-15
许可协议
CC BY-NC-SA 4.0