深度学习阶段总结(2)--矩阵
文章目录
前言
在前面深度学习理论推导时,我们也经常看到矩阵表达式,它可以让事情变得更加清晰,下面我们用矩阵的思维来看待问题。
级数
给你一个级数表达式:
∑ i = 1 n a i b i \sum \limits_{i=1}^{n}{a_i b_i} i=1∑naibi
首先你会想到什么?
想到 头疼,头大,头爆炸?
不要害怕,遇到这种不熟悉的,先转成我们熟悉,能理解的,级数,不就是 连加 嘛:
∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + a 3 b 3 + ⋯ + a n b n \sum \limits_{i=1}^{n}{a_i b_i}=a_1b_1+a_2b_2+a_3b_3+\dots+a_nb_n i=1∑naibi=a1b1+a2b2+a3b3+⋯+anbn
是不是很清楚明白?
很多事情就是这样,万事开头难,但只要迈出一步,就能看到胜利的希望。
矩阵
但我想说的不是这个,当接触多了这些数学表达式,我首先想到的是 向量的点积,矩阵的乘法:
∑ i = 1 n a i b i = a ⃗ ⋅ b ⃗ = ( a 1 , a 2 , … , a n ) ⋅ ( b 1 , b 2 , … , b n ) \sum \limits_{i=1}^{n}{a_i b_i}=\vec{a}\cdot \vec{b}=(a_1,a_2,\dots,a_n)\cdot(b_1,b_2,\dots,b_n) i=1∑naibi=a⋅b=(a1,a2,…,an)⋅(b1,b2,…,bn)
在矩阵的世界中,向量通常用列向量表示:
A = [ a 1 a 2 … a n ] , B = [ b 1 b 2 … b n ] A=\begin{bmatrix} a_1\\ a_2\\ \dots\\ a_n \end{bmatrix}, B=\begin{bmatrix} b_1\\ b_2\\ \dots\\ b_n \end{bmatrix} A= a1a2…an ,B= b1b2…bn
那么
∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + ⋯ + a n b n = A ⊤ B = [ a 1 a 2 … a n ] [ b 1 b 2 … b n ] \sum \limits_{i=1}^{n}{a_i b_i}=a_1b_1+a_2b_2+\dots+a_nb_n\\[10pt] =A^\top B %% A^T =\begin{bmatrix} a_1&a_2&\dots&a_n \end{bmatrix} %% B \begin{bmatrix} b_1\\ b_2\\ \dots\\ b_n \end{bmatrix} i=1∑naibi=a1b1+a2b2+⋯+anbn=A⊤B=[a1a2…an] b1b2…bn
对于这种向量相乘,还有这样的特性:
A ⊤ B = B ⊤ A A^\top B=B^\top A\\[10pt] A⊤B=B⊤A
这也很好理解,不就是用到了小学学过的乘法交换律吗?即:
a 1 b 1 + a 2 b 2 + ⋯ + a n b n = b 1 a 1 + b 2 a 2 + ⋯ + b n a n a_1b_1+a_2b_2+\dots+a_nb_n=b_1a_1+b_2a_2+\dots+b_na_n a1b1+a2b2+⋯+anbn=b1a1+b2a2+⋯+bnan
但是这个变形大有用处, 之前我们曾在多元线性回归中用它提取过矩阵的公共项。
一起来回顾一下:
d i = ∂ E ∂ w j = ( X W − Y ) ⊤ [ x 1 j x 2 j . . . x m j ] d_i=\frac{\partial{E}}{\partial{w_j}}=(XW-Y)^\top\begin{bmatrix} x_{1j}\\[10pt] x_{2j}\\[10pt] ...\\[10pt] x_{mj}\\[10pt] \end{bmatrix}\\ di=∂wj∂E=(XW−Y)⊤ x1jx2j...xmj
其中 d i d_i di 是一个数值, 那么有:
∂ E ∂ W = [ d 1 d 2 . . . d n ] = [ d 1 d 2 . . . d n ] ⊤ = [ ( X W − Y ) ⊤ [ x 11 x 21 . . . x m 1 ] ( X W − Y ) ⊤ [ x 12 x 22 . . . x m 2 ] . . . ( X W − Y ) ⊤ [ x 1 n x 2 n . . . x m n ] ] ⊤ \frac{\partial{E}}{\partial{W}} =\begin{bmatrix} d_1\\[10pt] d_2\\[10pt] ...\\[10pt] d_n\\[10pt] \end{bmatrix} =\begin{bmatrix} d_1 & d_2 & ... & d_n \end{bmatrix}^\top \\[10pt] =\begin{bmatrix} (XW-Y)^\top\begin{bmatrix} x_{11}\\[10pt] x_{21}\\[10pt] ...\\[10pt] x_{m1}\\[10pt] \end{bmatrix}& (XW-Y)^\top\begin{bmatrix} x_{12}\\[10pt] x_{22}\\[10pt] ...\\[10pt] x_{m2}\\[10pt] \end{bmatrix}& ...& (XW-Y)^\top\begin{bmatrix} x_{1n}\\[10pt] x_{2n}\\[10pt] ...\\[10pt] x_{mn}\\[10pt] \end{bmatrix}\\[10pt] \end{bmatrix}^\top\\ ∂W∂E= d1d2...dn =[d1d2...dn]⊤= (XW−Y)⊤ x11x21...xm1 (XW−Y)⊤ x12x22...xm2 ...(XW−Y)⊤ x1nx2n...xmn ⊤
提取公共项
下面 A,B,C,W 全是矩阵表示
-
右乘提取公共项, A , B , C ∈ R a × b , W ∈ R b × c A,B,C \in R^{a\times b},W\in R^{b\times c} A,B,C∈Ra×b,W∈Rb×c:[ A ⋅ W B ⋅ W C ⋅ W ] = [ A B C ] W \begin{bmatrix} A\cdot W\\[10pt] B\cdot W\\[10pt] C\cdot W \end{bmatrix} =\begin{bmatrix} A\\[10pt] B\\[10pt] C \end{bmatrix}W A⋅WB⋅WC⋅W = ABC W
-
左乘提取公共项, W ∈ R c × b , A , B , C ∈ R a × b W\in R^{c\times b}, A,B,C \in R^{a\times b} W∈Rc×b,A,B,C∈Ra×b:[ W ⋅ A W ⋅ B W ⋅ C ] = W [ A B C ] \begin{bmatrix} W\cdot A& W\cdot B& W\cdot C \end{bmatrix} =W\begin{bmatrix} A& B& C& \end{bmatrix} [W⋅AW⋅BW⋅C]=W[ABC]
-
如果是其他形式,可以先适当变换,变成上面两种形式后再提取公共项,例如上面的例子
当然,还有些其他形式的,看上去很像,但不一定能直接提,例如:
[ W ⋅ A W ⋅ B W ⋅ C ] = [ W 0 0 0 W 0 0 0 W ] [ A B C ] = ( I 3 ⊗ W ) [ A B C ] \begin{bmatrix} W\cdot A\\[10pt] W\cdot B\\[10pt] W\cdot C \end{bmatrix} =\begin{bmatrix} W & 0 & 0 \\[10pt] 0 & W & 0 \\[10pt] 0 & 0 & W \end{bmatrix} \begin{bmatrix} A \\[10pt] B \\[10pt] C \end{bmatrix} =(I_3 \otimes W) \begin{bmatrix} A\\[10pt] B\\[10pt] C \end{bmatrix} W⋅AW⋅BW⋅C = W000W000W ABC =(I3⊗W) ABC
但是, 当 W ⋅ A ∈ R 1 × 1 W\cdot A \in R^{1\times 1} W⋅A∈R1×1 时,也就是一个数值, 我们就有可以操作变化的空间了,令:
a = W ⋅ A , b = W ⋅ B , c = W ⋅ C a=W\cdot A\text{ , } b=W\cdot B\text{ , } c=W\cdot C a=W⋅A , b=W⋅B , c=W⋅C
代入变换,并用
左乘提取公共项:U = [ W ⋅ A W ⋅ B W ⋅ C ] = [ a b c ] = [ a b c ] ⊤ = [ W ⋅ A W ⋅ B W ⋅ C ] ⊤ = W [ A B C ] U=\begin{bmatrix} W\cdot A\\[10pt] W\cdot B\\[10pt] W\cdot C \end{bmatrix} =\begin{bmatrix} a\\[10pt] b\\[10pt] c \end{bmatrix} =\begin{bmatrix} a& b& c \end{bmatrix}^\top\\[10pt] =\begin{bmatrix} W\cdot A& W\cdot B& W\cdot C \end{bmatrix}^\top =W\begin{bmatrix} A& B& C \end{bmatrix} U= W⋅AW⋅BW⋅C = abc =[abc]⊤=[W⋅AW⋅BW⋅C]⊤=W[ABC]
求平方和
用矩阵来求平方和形如:
A ⊤ A A^\top A A⊤A
拿向量来理解,还记得向量怎么相乘吗?假如 A 是一个 n 维列向量,那么:
A = [ a 1 a 2 … a n ] A ⊤ = [ a 1 a 2 … a n ] A=\begin{bmatrix} a_1\\ a_2\\ \dots\\ a_n \end{bmatrix}\\[10pt] A^\top = \begin{bmatrix} a_1&a_2&\dots&a_n \end{bmatrix} A= a1a2…an A⊤=[a1a2…an]
向量相乘:
A ⊤ A = ∑ i = 1 n a i 2 = a 1 2 + a 2 2 + ⋯ + a n 2 A^\top A = \sum \limits_{i=1}^{n}{a_i^2}=a_1^2+a_2^2+\dots+a_n^2 A⊤A=i=1∑nai2=a12+a22+⋯+an2
所以,当你看到 ∑ i = 1 n a i 2 \sum \limits_{i=1}^{n}{a_i^2} i=1∑nai2 时, 马上联想到 矩阵 A ⊤ A A^\top A A⊤A 。
我们在多元线性回归中其实见过:
E = 1 2 R S S = 1 2 ∑ i = 1 m ( x i T W − y i ) 2 = 1 2 ( X W − Y ) T ( X W − Y ) E=\frac{1}{2}RSS=\frac{1}{2}\sum\limits_{i=1}^{m}{({x_i}^T W-y_i)^2}\\[10pt] =\frac{1}{2}(XW-Y)^T(XW-Y)\\[10pt] E=21RSS=21i=1∑m(xiTW−yi)2=21(XW−Y)T(XW−Y)
其中
u i = x i T W − y i = x i 1 w 1 + x i 2 w 2 + . . . + x i n w n − y i E = 1 2 ∑ i = 1 m u i 2 = 1 2 ( u 1 2 + u 2 2 + . . . + u m 2 ) u_i={x_i}^T W-y_i=x_{i1}w_1+x_{i2}w_2+...+x_{in}w_n-y_i\\[10pt] E=\frac{1}{2}\sum\limits_{i=1}^{m}{u_i}^2=\frac{1}{2}(u_1^2+u_2^2+...+u_m^2) ui=xiTW−yi=xi1w1+xi2w2+...+xinwn−yiE=21i=1∑mui2=21(u12+u22+...+um2)
这再次揭示出矩阵与级数求和之间的联系是非常密切的, 当你看到级数求和时, 马上就应该联想到 矩阵。
矩阵的意义
线性方程组
我们刚开始学习矩阵时, 是从解线性方程组开始的:
1 x + 2 y + 3 z = 6 2 x + 3 y + 4 z = 9 3 x + 4 y + 5 z = 12 1x+2y+3z=6\\ 2x+3y+4z=9\\ 3x+4y+5z=12\\ 1x+2y+3z=62x+3y+4z=93x+4y+5z=12
那它用矩阵来表示为:
[ 1 2 3 2 3 4 3 4 5 ] [ x y z ] = [ 6 9 12 ] \begin{bmatrix} 1&2&3\\ 2&3&4\\ 3&4&5\\ \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix} =\begin{bmatrix} 6\\ 9\\ 12\\ \end{bmatrix} 123234345 xyz = 6912
那时候是说数学家偷懒, 不愿意写那么多的线性方程组, 所以才用矩阵来表示。
后来, 我们再从向量的角度上去看待矩阵, 发现矩阵是用来进行向量变换的(拉伸与旋转), 简直大学时期的恶梦!
向量变换
在上例中, 我们将向量 b ⃗ = ( x , y , z ) \vec{b}=(x,y,z) b=(x,y,z) 变换为 ( 6 , 9 , 12 ) (6,9,12) (6,9,12), 一切向量皆矩阵, 令:
A = [ 1 2 3 2 3 4 3 4 5 ] , X = [ x y z ] , Y = [ 6 9 12 ] A ⋅ X = Y A=\begin{bmatrix} 1&2&3\\ 2&3&4\\ 3&4&5\\ \end{bmatrix}, X=\begin{bmatrix} x\\ y\\ z\\ \end{bmatrix}, Y=\begin{bmatrix} 6\\ 9\\ 12\\ \end{bmatrix}\\[10pt] A\cdot X=Y A= 123234345 ,X= xyz ,Y= 6912 A⋅X=Y
如果我们再多来一些向量, 令:
A = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … … a m 1 a m 2 … a m n ] x 1 ⃗ = [ x 11 x 21 … x n 1 ] , x 2 ⃗ = [ x 12 x 22 … x n 2 ] , y 1 ⃗ = [ y 11 y 21 … y n 1 ] , y 2 ⃗ = [ y 12 y 22 … y n 2 ] A ⋅ x 1 ⃗ = y 1 ⃗ A ⋅ x 2 ⃗ = y 2 ⃗ % 矩阵 A=\begin{bmatrix} a_{11}&a_{12}&\dots&a_{1n}\\[10pt] a_{21}&a_{22}&\dots&a_{2n}\\[10pt] \dots&\dots&\dots&\dots\\[10pt] a_{m1}&a_{m2}&\dots&a_{mn}\\[10pt] \end{bmatrix}\\[10pt] % 向量 \vec{x_1}=\begin{bmatrix} x_{11}\\ x_{21}\\ \dots\\ x_{n1}\\ \end{bmatrix}, \vec{x_2}=\begin{bmatrix} x_{12}\\ x_{22}\\ \dots\\ x_{n2}\\ \end{bmatrix}, \vec{y_1}=\begin{bmatrix} y_{11}\\ y_{21}\\ \dots\\ y_{n1}\\ \end{bmatrix}, \vec{y_2}=\begin{bmatrix} y_{12}\\ y_{22}\\ \dots\\ y_{n2}\\ \end{bmatrix}\\[10pt] % 关系 A\cdot \vec{x_1}= \vec{y_1}\\[10pt] A\cdot \vec{x_2}= \vec{y_2}\\[10pt] A= a11a21…am1a12a22…am2…………a1na2n…amn x1= x11x21…xn1 ,x2= x12x22…xn2 ,y1= y11y21…yn1 ,y2= y12y22…yn2 A⋅x1=y1A⋅x2=y2
是不是可以看作:
[ A ⋅ x 1 ⃗ A ⋅ x 2 ⃗ ] = [ y 1 ⃗ y 2 ⃗ ] = [ y 11 y 12 y 21 y 22 … … y n 1 y n 2 ] \begin{bmatrix} A\cdot \vec{x_1}& A\cdot \vec{x_2} \end{bmatrix} =\begin{bmatrix} \vec{y_1}& \vec{y_2} \end{bmatrix} =\begin{bmatrix} y_{11}&y_{12}\\ y_{21}&y_{22}\\ \dots&\dots\\ y_{n1}&y_{n2}\\ \end{bmatrix} [A⋅x1A⋅x2]=[y1y2]= y11y21…yn1y12y22…yn2
如果我把 x 1 ⃗ \vec{x_1} x1 与 x 2 ⃗ \vec{x_2} x2 看作是一个矩阵的两列, 再次用矩阵来表示:
[ A ⋅ x 1 ⃗ A ⋅ x 2 ⃗ ] = [ A ⋅ [ x 11 x 21 … x n 1 ] A ⋅ [ x 12 x 22 … x n 2 ] ] = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … … a m 1 a m 2 … a m n ] [ x 11 x 12 x 12 x 22 … … x n 1 x n 2 ] = [ y 11 y 12 y 21 y 22 … … y n 1 y n 2 ] \begin{bmatrix} A\cdot \vec{x_1}& A\cdot \vec{x_2} \end{bmatrix} =\begin{bmatrix} A\cdot \begin{bmatrix} x_{11}\\ x_{21}\\ \dots\\ x_{n1}\\ \end{bmatrix}& A\cdot \begin{bmatrix} x_{12}\\ x_{22}\\ \dots\\ x_{n2}\\ \end{bmatrix} \end{bmatrix}\\[10pt] =\begin{bmatrix} a_{11}&a_{12}&\dots&a_{1n}\\[10pt] a_{21}&a_{22}&\dots&a_{2n}\\[10pt] \dots&\dots&\dots&\dots\\[10pt] a_{m1}&a_{m2}&\dots&a_{mn}\\[10pt] \end{bmatrix} \begin{bmatrix} x_{11}&x_{12}\\[10pt] x_{12}&x_{22}\\[10pt] \dots&\dots\\[10pt] x_{n1}&x_{n2}\\[10pt] \end{bmatrix} =\begin{bmatrix} y_{11}&y_{12}\\[10pt] y_{21}&y_{22}\\[10pt] \dots&\dots\\[10pt] y_{n1}&y_{n2}\\[10pt] \end{bmatrix} [A⋅x1A⋅x2]= A⋅ x11x21…xn1 A⋅ x12x22…xn2 = a11a21…am1a12a22…am2…………a1na2n…amn x11x12…xn1x12x22…xn2 = y11y21…yn1y12y22…yn2
是不是有点熟悉了? 在多元线性回归中其实见过:
X W = U [ x 11 x 12 … x 1 n x 21 x 22 … x 2 n … x m 1 x m 2 … x m n ] [ w 11 w 21 … w c 1 w 12 w 22 … w c 2 … w 1 n w 2 n … w c n ] = [ u 11 u 12 … u 1 c u 21 u 22 … u 2 c … u m 1 u m 2 … u m c ] XW=U \\[10pt] \begin{bmatrix} x_{11}&x_{12}&\dots&x_{1n}\\ x_{21}&x_{22}&\dots&x_{2n}\\ \dots\\ x_{m1}&x_{m2}&\dots&x_{mn}\\ \end{bmatrix} \begin{bmatrix} w_{11}&w_{21}&\dots&w_{c1}\\ w_{12}&w_{22}&\dots&w_{c2}\\ \dots\\ w_{1n}&w_{2n}&\dots&w_{cn}\\ \end{bmatrix} =\begin{bmatrix} u_{11}&u_{12}&\dots&u_{1c}\\ u_{21}&u_{22}&\dots&u_{2c}\\ \dots\\ u_{m1}&u_{m2}&\dots&u_{mc}\\ \end{bmatrix} XW=U x11x21…xm1x12x22xm2………x1nx2nxmn w11w12…w1nw21w22w2n………wc1wc2wcn = u11u21…um1u12u22um2………u1cu2cumc
也就是将 W,U 矩阵每一列作为一个向量, 由X矩阵进行向量的变换, 得到 U 矩阵每一列向量
分块矩阵
上面我们还看到了一个老朋友:
[ A ⋅ [ x 11 x 21 … x n 1 ] A ⋅ [ x 12 x 22 … x n 2 ] ] = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … … a m 1 a m 2 … a m n ] [ x 11 x 12 x 12 x 22 … … x n 1 x n 2 ] \begin{bmatrix} A\cdot \begin{bmatrix} x_{11}\\ x_{21}\\ \dots\\ x_{n1}\\ \end{bmatrix}& A\cdot \begin{bmatrix} x_{12}\\ x_{22}\\ \dots\\ x_{n2}\\ \end{bmatrix} \end{bmatrix}\\[10pt] =\begin{bmatrix} a_{11}&a_{12}&\dots&a_{1n}\\[10pt] a_{21}&a_{22}&\dots&a_{2n}\\[10pt] \dots&\dots&\dots&\dots\\[10pt] a_{m1}&a_{m2}&\dots&a_{mn}\\[10pt] \end{bmatrix} \begin{bmatrix} x_{11}&x_{12}\\[10pt] x_{12}&x_{22}\\[10pt] \dots&\dots\\[10pt] x_{n1}&x_{n2}\\[10pt] \end{bmatrix} A⋅ x11x21…xn1 A⋅ x12x22…xn2 = a11a21…am1a12a22…am2…………a1na2n…amn x11x12…xn1x12x22…xn2
这不就是左乘提取公共项的形式吗?
[ W ⋅ A W ⋅ B W ⋅ C ] = W [ A B C ] \begin{bmatrix} W\cdot A& W\cdot B& W\cdot C& \end{bmatrix} =W\begin{bmatrix} A& B& C& \end{bmatrix} [W⋅AW⋅BW⋅C]=W[ABC]
也就是我们也可以反其道而行之, 将大矩阵分块计算:
W [ A B C ] = [ W ⋅ A W ⋅ B W ⋅ C ] W\begin{bmatrix} A& B& C& \end{bmatrix} =\begin{bmatrix} W\cdot A& W\cdot B& W\cdot C& \end{bmatrix} W[ABC]=[W⋅AW⋅BW⋅C]
分块矩阵的加法
如果两个分块矩阵采用相同的分块方式,则加法就是对应子块相加:
[ A 11 A 12 A 21 A 22 ] + [ B 11 B 12 B 21 B 22 ] = [ A 11 + B 11 A 12 + B 12 A 21 + B 21 A 22 + B 22 ] \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix} + \begin{bmatrix} B_{11} & B_{12} \\ B_{21} & B_{22} \end{bmatrix} = \begin{bmatrix} A_{11}+B_{11} & A_{12}+B_{12} \\ A_{21}+B_{21} & A_{22}+B_{22} \end{bmatrix} [A11A21A12A22]+[B11B21B12B22]=[A11+B11A21+B21A12+B12A22+B22]
前提条件:对应子块的维度必须相同。
分块矩阵的乘法
分块矩阵乘法与普通矩阵乘法规则一致,但要求分块方式相容。
对于矩阵 A m × n A_{m \times n} Am×n和 B n × p B_{n \times p} Bn×p,将它们按如下方式分块:
A = [ A 11 A 12 A 21 A 22 ] , B = [ B 11 B 12 B 21 B 22 ] A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} & B_{12} \\ B_{21} & B_{22} \end{bmatrix} A=[A11A21A12A22],B=[B11B21B12B22]
其中:
- A 11 A_{11} A11 的列数 = B 11 B_{11} B11 的行数
- A 12 A_{12} A12 的列数 = B 21 B_{21} B21 的行数
- 等等
则乘积为:
A B = [ A 11 B 11 + A 12 B 21 A 11 B 12 + A 12 B 22 A 21 B 11 + A 22 B 21 A 21 B 12 + A 22 B 22 ] AB = \begin{bmatrix} A_{11}B_{11} + A_{12}B_{21} & A_{11}B_{12} + A_{12}B_{22} \\ A_{21}B_{11} + A_{22}B_{21} & A_{21}B_{12} + A_{22}B_{22} \end{bmatrix} AB=[A11B11+A12B21A21B11+A22B21A11B12+A12B22A21B12+A22B22]
注意:子块之间的乘法是矩阵乘法,不是数乘。
分块矩阵的转置
分块矩阵的转置需要先转置子块,再转置整体分块结构:
[ A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33 ] T = [ A 11 T A 21 T A 31 T A 12 T A 22 T A 32 T A 13 T A 23 T A 33 T ] \begin{bmatrix} A_{11} & A_{12} & A_{13} \\ A_{21} & A_{22} & A_{23} \\ A_{31} & A_{32} & A_{33} \end{bmatrix}^T =\begin{bmatrix} A_{11}^T & A_{21}^T & A_{31}^T \\ A_{12}^T & A_{22}^T & A_{32}^T \\ A_{13}^T & A_{23}^T & A_{33}^T \end{bmatrix} A11A21A31A12A22A32A13A23A33 T= A11TA12TA13TA21TA22TA23TA31TA32TA33T
简而言之:整体分块结构转置 + 每个子块分别转置。
分块对角矩阵的性质
分块对角矩阵形如:
A = [ A 11 0 ⋯ 0 0 A 22 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ A k k ] A = \begin{bmatrix} A_{11} & 0 & \cdots & 0 \\ 0 & A_{22} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & A_{kk} \end{bmatrix} A= A110⋮00A22⋮0⋯⋯⋱⋯00⋮Akk
性质:
- 行列式: det ( A ) = det ( A 11 ) ⋅ det ( A 22 ) ⋯ det ( A k k ) \det(A) = \det(A_{11}) \cdot \det(A_{22}) \cdots \det(A_{kk}) det(A)=det(A11)⋅det(A22)⋯det(Akk)
- 逆矩阵:若各子块可逆,则
A − 1 = [ A 11 − 1 0 ⋯ 0 0 A 22 − 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ A k k − 1 ] A^{-1} = \begin{bmatrix} A_{11}^{-1} & 0 & \cdots & 0 \\ 0 & A_{22}^{-1} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & A_{kk}^{-1} \end{bmatrix} A−1= A11−10⋮00A22−1⋮0⋯⋯⋱⋯00⋮Akk−1 - 特征值:所有子块特征值的并集
分块上/下三角矩阵的性质
分块上三角矩阵
U = [ A 11 A 12 0 A 22 ] U = \begin{bmatrix} A_{11} & A_{12} \\ 0 & A_{22} \end{bmatrix} U=[A110A12A22]
性质:
- 行列式: det ( U ) = det ( A 11 ) ⋅ det ( A 22 ) \det(U) = \det(A_{11}) \cdot \det(A_{22}) det(U)=det(A11)⋅det(A22)
- 特征值: A 11 A_{11} A11 和 A 22 A_{22} A22 的特征值的并集
分块下三角矩阵类似
分块矩阵的逆(Schur补公式)
对于可逆矩阵:
M = [ A B C D ] M = \begin{bmatrix} A & B \\ C & D \end{bmatrix} M=[ACBD]
若 A A A 可逆,则:
M − 1 = [ A − 1 + A − 1 B S − 1 C A − 1 − A − 1 B S − 1 − S − 1 C A − 1 S − 1 ] M^{-1} = \begin{bmatrix} A^{-1} + A^{-1}B S^{-1} C A^{-1} & -A^{-1} B S^{-1} \\ -S^{-1} C A^{-1} & S^{-1} \end{bmatrix} M−1=[A−1+A−1BS−1CA−1−S−1CA−1−A−1BS−1S−1]
其中 S = D − C A − 1 B S = D - C A^{-1} B S=D−CA−1B 称为 Schur补。
若 D D D 可逆,也有对称形式:
M − 1 = [ T − 1 − T − 1 B D − 1 − D − 1 C T − 1 D − 1 + D − 1 C T − 1 B D − 1 ] M^{-1} = \begin{bmatrix} T^{-1} & -T^{-1} B D^{-1} \\ -D^{-1} C T^{-1} & D^{-1} + D^{-1} C T^{-1} B D^{-1} \end{bmatrix} M−1=[T−1−D−1CT−1−T−1BD−1D−1+D−1CT−1BD−1]
其中 T = A − B D − 1 C T = A - B D^{-1} C T=A−BD−1C。
分块矩阵的秩
对于分块矩阵:
rank [ A B C D ] ≥ rank ( A ) + rank ( D − C A + B ) \operatorname{rank} \begin{bmatrix} A & B \\ C & D \end{bmatrix} \ge \operatorname{rank}(A) + \operatorname{rank}(D - C A^+ B) rank[ACBD]≥rank(A)+rank(D−CA+B)
其中 A + A^+ A+ 是广义逆。特别地,对于分块对角矩阵:
rank [ A 0 0 D ] = rank ( A ) + rank ( D ) \operatorname{rank} \begin{bmatrix} A & 0 \\ 0 & D \end{bmatrix} = \operatorname{rank}(A) + \operatorname{rank}(D) rank[A00D]=rank(A)+rank(D)
分块矩阵的求导
在矩阵微积分中,分块结构可用于处理复杂函数的梯度,在优化/机器学习中常用:
例如,若 x = [ x 1 x 2 ] x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} x=[x1x2],则:
∂ ∂ x f ( x ) = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ] \frac{\partial}{\partial x} f(x) = \begin{bmatrix} \frac{\partial f}{\partial x_1} \\[10pt] \frac{\partial f}{\partial x_2} \end{bmatrix} ∂x∂f(x)= ∂x1∂f∂x2∂f
分块矩阵的核心优势在于:
- 简化大型矩阵的计算(如用Schur补求逆)
- 揭示矩阵的内在结构(如分块对角表示)
- 便于理论推导(如线性系统、卡尔曼滤波、机器学习中的矩阵求导)
总结
本文我们一起探讨矩阵的性质意义,从级数求和,向量变换,分块矩阵等,在深度学习理论中至关重要。
更多推荐
所有评论(0)