ブログ

行列式と置換⑦:置換行列(permutation matrix)

線形代数の枠組みで$n$次正方行列の行列式(determinant)を取り扱うにあたっては置換(permutation)という概念を抑えておく必要があります。当記事では置換行列(permutation matrix)について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$4$章「行列式」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

置換行列

置換行列の定義

$K^{n}$の標準基底を$\{ \mathbf{e}_{1}, \mathbf{e}_{2}, \cdots , \mathbf{e}_{n} \}$のように定義する、このとき$1, \cdots , n$の$n$個の文字の置換$\sigma$について$n$次の置換行列$E(\sigma)$は下記のように定義される。
$$
\large
\begin{align}
E(\sigma) = \left[ \mathbf{e}_{\sigma(1)} \,\, \mathbf{e}_{\sigma(2)} \,\, \cdots \,\, \mathbf{e}_{\sigma(n)} \right]
\end{align}
$$

置換行列の性質

$n$次の置換行列$E(\sigma)$について下記が成立する。
$$
\large
\begin{align}
\det{(E(\sigma))} &= \mathrm{sgn}(\sigma) \quad (1) \\
E(\sigma \tau) &= E(\sigma) E(\tau) \quad (2) \\
\left[ E(\sigma) \right]^{-1} &= E \left( \sigma^{-1} \right) \quad (3) \\
AE(\sigma) &= \left[ \mathbf{v}_{\sigma(1)} \,\, \mathbf{v}_{\sigma(2)} \cdots \,\, \mathbf{v}_{\sigma(n)} \right] \quad (4)
\end{align}
$$

ただし上記の$\sigma, \tau$は$1, \cdots , n$の$n$個の置換、行列$A$は下記の$(5)$式の行列を表す。
$$
\large
\begin{align}
A &= \left[ \mathbf{v}_{1} \,\, \mathbf{v}_{2} \,\, \cdots \,\, \mathbf{v}_{n} \right] \quad (5)
\end{align}
$$

例題の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

重要例題$043$

ハウスホルダー行列(Householder Matrix)の定義と成立する定理の導出

ハウスホルダー行列(Householder Matrix)は固有値解析にあたって行列の三重対角化を行う際などに用いられます。当記事ではハウスホルダー行列(Householder Matrix)の定義と成立する定理の導出などについて取りまとめました。
「A Suggestion on Mathematical Materials for Freshman Education Vol.44 ~ Householder Matrix ~」の内容を参考に作成を行いました。

・数学まとめ
https://www.hello-statisticians.com/explain-terms

ハウスホルダー行列の定義と定理

ハウスホルダー行列の定義

長さの等しい$2$つの$n$次元ベクトル$x \in \mathbb{R}^{n}$と$y \in \mathbb{R}^{n}$が与えられるとき、ハウスホルダー行列(Householder Matrix)を$H$とおくと$H$は下記のような式で定義されます。
$$
\large
\begin{align}
H &= I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{v^{\mathrm{T}} v} = I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}} \\
v &= x \, – \, y \\
||x|| &= ||y||
\end{align}
$$

ハウスホルダー行列について成立する定理

前項「ハウスホルダー行列の定義」で定義したハウスホルダー行列については下記の定理がそれぞれ成立します。
・$(1) \,$ $Hx = y$
・$(2) \,$ $Hy = x$
・$(3) \,$ $H$は対称行列であり、$H^{\mathrm{T}} = H$が成立
・$(4) \,$ $H$は直交行列であり、$H^{\mathrm{T}} H = I_{n}$が成立
・$(5) \,$ $H$は固有値$1$を持つ
・$(6) \,$ $H$は固有値$-1$を持つ

定理の導出

$(1)$の導出

$v = x \, – \, y$、$||x|| = ||y||$より、$||v||^{2}$は下記のように表すことができます。
$$
\large
\begin{align}
||v||^{2} &= v^{\mathrm{T}} v \\
&= (x \, – \, y)^{\mathrm{T}} (x \, – \, y) \\
&= ||x||^{2} + ||y||^{2} – 2x \cdot y \\
&= ||x||^{2} + ||x||^{2} – 2x \cdot y \\
&= 2(||x||^{2} – x \cdot y)
\end{align}
$$

このとき$Hx$は下記のように式変形を行うことが可能です。
$$
\large
\begin{align}
Hx &= \left( I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}} \right) x \\
&= x \, – \, \frac{2 (v^{\mathrm{T}} x) v}{||v||^{2}} \\
&= x \, – \, \frac{2(x \, – \, y)^{\mathrm{T}} x (x \, – \, y)}{||v||^{2}} \\
&= x \, – \, \frac{2(||x||^{2} \, – \, x \cdot y) (x \, – \, y)}{||v||^{2}} \\
&= x \, – \, \frac{\cancel{||v||^{2}} (x \, – \, y)}{\cancel{||v||^{2}}} \\
&= \cancel{x} \, – \, (\cancel{x} \, – \, y) \\
&= y
\end{align}
$$

上記より、$Hx = y$が成立することが確認できます。

$(2)$の導出

前項「$(1)$の導出」の式変形における$x$と$y$を入れ替えることで$Hy = x$が成立することが確認できます。

$(3)$の導出

$$
\large
\begin{align}
H = I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}}
\end{align}
$$

上記を元に、$H^{\mathrm{T}}$は下記のように式変形を行うことができます。
$$
\large
\begin{align}
H^{\mathrm{T}} &= \left( I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}} \right)^{\mathrm{T}} \\
&= I_{n}^{\mathrm{T}} \, – \, \frac{2(v v^{\mathrm{T}})^{\mathrm{T}}}{||v||^{2}} \\
&= I_{n} \, – \, \frac{2 (v^{\mathrm{T}})^{\mathrm{T}} v^{\mathrm{T}}}{||v||^{2}} \\
&= I_{n} \, – \, \frac{2 v v^{\mathrm{T}}}{||v||^{2}} \\
&= H
\end{align}
$$

上記より$H^{\mathrm{T}} = H$が成立するので、ハウスホルダー行列$H$が対称行列であることが確認できます。

$(4)$の導出

$H^{\mathrm{T}} = H$より、$H^{\mathrm{T}} H = H^{2}$が成立することに基づいて$H^{\mathrm{T}} H$は下記のように式変形を行うことができます。
$$
\large
\begin{align}
H^{\mathrm{T}} H &= H^{2} \\
&= \left( I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}} \right)^{2} \\
&= I_{n} \, – \, \frac{4v v^{\mathrm{T}}}{||v||^{2}} + \frac{4(v v^{\mathrm{T}}) (v v^{\mathrm{T}})}{||v||^{4}} \\
&= I_{n} \, – \, \frac{4v v^{\mathrm{T}}}{||v||^{2}} + \frac{4v (v^{\mathrm{T}} v) v^{\mathrm{T}}}{||v||^{4}} \\
&= I_{n} \, – \, \frac{4v v^{\mathrm{T}}}{||v||^{2}} + \frac{4v ||v||^{2} v^{\mathrm{T}}}{||v||^{4}} \\
&= I_{n} \, – \, \frac{4v v^{\mathrm{T}}}{||v||^{2}} + \frac{4||v||^{2} v v^{\mathrm{T}}}{||v||^{4}} \\
&= I_{n} \, – \, \cancel{\frac{4v v^{\mathrm{T}}}{||v||^{2}}} + \cancel{\frac{4v v^{\mathrm{T}}}{||v||^{2}}} \\
&= I_{n}
\end{align}
$$

上記より$H^{\mathrm{T}} H = I_{n}$が成立するのでハウスホルダー行列$H$が直交行列であることが確認できます。

$(5)$の導出

$H(x+y)$は定理の$(1)$と$(2)$を用いて下記のように計算できます。
$$
\large
\begin{align}
H(x+y) &= Hx + Hy \\
&= y + x \\
&= (x+y)
\end{align}
$$

上記より$H$は固有値$1$を持つことが確認できます。

$(6)$の導出

$H(x \,- \, y)$は下記のように計算できます。
$$
\large
\begin{align}
H(x \, – \, y) &= \left( I_{n} \, – \, \frac{2v v^{\mathrm{T}}}{||v||^{2}} \right)v \\
&= v \, – \, \frac{2v (v^{\mathrm{T}}v)}{||v||^{2}} \\
&= v \, – \, \frac{2v \cancel{||v||^{2}}}{\cancel{||v||^{2}}} \\
&= v \, – \, 2v \\
&= – \, v \\
&= -(x \, – \, y)
\end{align}
$$

上記より$H$は固有値$-1$を持つことが確認できます。

二次形式(quadratic form)と対称行列(symmetric matrix)の対応

$n$個の変数についての$2$次の単項式$x_i, x_j$の実数係数の$1$次結合の式を$2$次形式といいます。当記事では二次形式(quadratic form)と対称行列(symmetric matrix)の対応について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$8$章「固有値問題と行列の対角化」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

$2$次形式と対称行列の対応

対称行列

行列$A$と$A$の転置行列$A^{\mathrm{T}}$について$A^{\mathrm{T}} = A$が成立するとき、$A$を対称行列という。下記に対称行列の具体例を表した。
$$
\large
\begin{align}
\left( \begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right), \, \left( \begin{array}{cc} 2 & 1 & 2 \\ 1 & 2 & 1 \\ 2 & 1 & 2 \end{array} \right)
\end{align}
$$

$2$次形式の定義

$n$個の変数$x_1, \cdots , x_{n}$についての$2$次の単項式$x_i, x_j$の実数係数の$1$次結合の式を$2$次形式という。$2$次形式を$q(x_1, \cdots , x_n)$とおくと、$q(x_1, \cdots , x_n)$は係数$a_{ij}$を用いて下記のように定義できる。
$$
\large
\begin{align}
q(x_1, \cdots , x_n) = \sum_{i=1}^{n} \sum_{j=1}^{n} a_{ij} x_{i} x_{j}
\end{align}
$$

ここで上記に対し、係数$a_{ij}$を$(i,j)$成分に持つ行列$A=(a_{ij})$、変数を成分に持つ列ベクトルを$\displaystyle \mathbf{x} = \left( \begin{array}{c} x_1 \\ \vdots \\ x_n \end{array} \right)$とおくと、$q(x_1, \cdots , x_n)$は下記のように表せる。
$$
\large
\begin{align}
q(x_1, \cdots , x_n) &= \sum_{i=1}^{n} \sum_{j=1}^{n} a_{ij} x_{i} x_{j} \\
&= \left( \begin{array}{ccc} x_1 & \cdots & x_n \end{array} \right) \left( \begin{array}{ccc} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{n1} & \cdots & a_{nn} \end{array} \right) \left( \begin{array}{c} x_1 \\ \vdots \\ x_n \end{array} \right) \\
&= \mathbf{x}^{\mathrm{T}} A \mathbf{x} \quad (1)
\end{align}
$$

$2$次形式と対称行列の対応

行列$A$で決まる$2$次形式$q_{A}(x_1, \cdots , x_n)$の$x_{i}^{2}$の係数は$A$の対角成分$a_{ii}$に対応する。また、$x_{i}x_{j} = x_{j}x_{i}$に対応する係数は$a_{ij}+a_{ji}$であり、$a_{ij}, a_{ji}$は$\displaystyle \frac{a_{ij}+a_{ji}}{2}$で取り替えることもできる。よって、$2$次形式を前項の$(1)$のような表記に直すとき、$A$が対称行列であるという前提をおいても良い。

$2$次形式(quadratic form)と対称行列(symmetric matrix)の対応の例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$161$

・$[1]$
$$
\large
\begin{align}
A = \left( \begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right)
\end{align}
$$

変数$x_1, x_2$についての$2$次形式を$q(x_1, x_2)$とおくと、$2$次形式の定義より、$q(x_1, x_2)$は下記のように求めることができる。
$$
\large
\begin{align}
q(x_1, x_2) &= \left( \begin{array}{cc} x_1 & x_2 \end{array} \right) \left( \begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) \\
&= \left( \begin{array}{cc} x_1 & x_2 \end{array} \right) \left( \begin{array}{c} 2x_1 + x_2 \\ x_1 + 2x_2 \end{array} \right) \\
&= 2x_1^{2} + x_1 x_2 + x_1 x_2 + 2x_2^{2} = 2(x_1^{2} + x_1 x_2 + x_2^{2})
\end{align}
$$

・$[2]$
$$
\large
\begin{align}
A = \left( \begin{array}{ccc} 0 & 1 & 2 \\ 1 & 0 & 1 \\ 2 & 1 & 0 \end{array} \right)
\end{align}
$$

変数$x_1, x_2, x_3$についての$2$次形式を$q(x_1, x_2, x_3)$とおくと、$2$次形式の定義より$q(x_1, x_2, x_3)$は下記のように求めることができる。
$$
\large
\begin{align}
q(x_1, x_2, x_3) &= \left( \begin{array}{ccc} x_1 & x_2 & x_3 \end{array} \right) \left( \begin{array}{ccc} 0 & 1 & 2 \\ 1 & 0 & 1 \\ 2 & 1 & 0 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \\ x_3 \end{array} \right) \\
&= x_1 x_2 + 2 x_1 x_3 + x_2 x_1 + x_2 x_3 + 2 x_3 x_1 + x_3 x_2 \\
&= 2x_1x_2 + 4x_1 x_3 + 2 x_2 x_3
\end{align}
$$

$[1]$ではベクトル・行列の積に基づいて計算を行ったが、$[2]$では前節の$(1)$式に基づいて行列の係数のインデックスに基づいて各単項式の書き下しを行なった。

基本例題$162$

Rotation MatrixとReflection Matrixの定義と行列の具体例【$2$D】

回転行列(Rotation Matrix)やReflection Matrixはシンプルに定義できる行列である一方でベクトルの回転や指定したベクトルの反対側への移動など、図形に有用な変換が可能です。当記事では$2$Dにおける回転行列とReflection Matrixの定義と行列の具体例についてまとめました。
作成にあたってはWikipediaの「Rotations and reflections in two dimensions」の内容を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

回転行列とReflection Matrix

三角関数の加法定理

当項では回転行列とReflection Matrixの理解に用いる三角関数の加法定理について確認します。三角関数の加法定理は下記のような式で表されます。
$$
\large
\begin{align}
\sin{(\alpha + \beta)} &= \sin{\alpha} \cos{\beta} + \cos{\alpha} \sin{\beta} \quad (1) \\
\cos{(\alpha + \beta)} &= \cos{\alpha} \cos{\beta} \, – \, \sin{\alpha} \sin{\beta} \quad (2)
\end{align}
$$

上記の直感的な理解については下記で詳しく取り扱いました。

また、$\sin{(\alpha \, – \, \beta)}$や$\cos{(\alpha \, – \, \beta)}$については$(1)$式と$(2)$式に$\beta = -\beta$を代入することで下記のように得られます。
$$
\large
\begin{align}
\sin{(\alpha \, – \, \beta)} &= \sin{\alpha} \cos{(-\beta)} + \cos{\alpha} \sin{(-\beta)} = \sin{\alpha} \cos{\beta} \, – \, \cos{\alpha} \sin{\beta} \quad (1)’ \\
\cos{(\alpha \, – \, \beta)} &= \cos{\alpha} \cos{(-\beta)} \, – \, \sin{\alpha} \sin{(-\beta)} = \cos{\alpha} \cos{\beta} + \sin{\alpha} \sin{\beta} \quad (2)’
\end{align}
$$

回転行列の定義

$2$次元平面における回転行列を$\mathrm{Rot}(\theta)$とおくと、$\mathrm{Rot}(\theta)$は下記のように定義されます。
$$
\large
\begin{align}
\mathrm{Rot}(\theta) = \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right)
\end{align}
$$

以下、上記が回転行列であることを確認します。$\displaystyle \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right)$について$\mathrm{Rot}(\theta)$を作用させた場合は下記のような変形を行うことが可能です。
$$
\large
\begin{align}
\mathrm{Rot}(\theta)\left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right) &= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right) \\
&= \left( \begin{array}{c} \cos{\theta}\cos{\alpha} \, – \, \sin{\theta}\sin{\alpha} \\ \sin{\theta}\cos{\alpha} + \cos{\theta}\sin{\alpha} \end{array} \right) \\
&= \left( \begin{array}{c} \cos{(\alpha+\theta)} \\ \sin{(\alpha+\theta)} \end{array} \right)
\end{align}
$$

上記より回転行列$\mathrm{Rot}(\theta)$が$\displaystyle \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right)$を$\theta$だけ回転させる行列であることが確認できます。回転行列が直交行列であることについては下記で取り扱いました。

Reflection Matrixの定義

$2$次元平面におけるReflection Matrixを$\mathrm{Ref}(\theta)$とおくと、$\mathrm{Ref}(\theta)$は下記のように定義されます。
$$
\large
\begin{align}
\mathrm{Ref}(\theta) = \left( \begin{array}{cc} \cos{2\theta} & \sin{2\theta} \\ \sin{2\theta} & -\cos{2\theta} \end{array} \right)
\end{align}
$$

以下、上記の解釈にあたって、$\displaystyle \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right)$に$\mathrm{Ref}(\theta)$を作用させた結果について確認します。
$$
\large
\begin{align}
\mathrm{Ref}(\theta)\left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right) &= \left( \begin{array}{cc} \cos{2\theta} & \sin{2\theta} \\ \sin{2\theta} & -\cos{2\theta} \end{array} \right) \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right) \\
&= \left( \begin{array}{c} \cos{2\theta}\cos{\alpha} + \sin{2\theta}\sin{\alpha} \\ \sin{2\theta}\cos{\alpha} \, – \, \cos{2\theta}\sin{\alpha} \end{array} \right) \\
&= \left( \begin{array}{c} \cos{(2\theta \, – \, \alpha)} \\ \sin{(2\theta \, – \, \alpha)} \end{array} \right)
\end{align}
$$

上記より、Reflection Matrixの$\mathrm{Ref}(\theta)$を$\displaystyle \left( \begin{array}{c} \cos{\alpha} \\ \sin{\alpha} \end{array} \right)$に作用させると、原点を通る$\displaystyle \left( \begin{array}{c} \cos{\theta} \\ \sin{\theta} \end{array} \right)$に平行な直線に線対称な点の$\displaystyle \left( \begin{array}{c} \cos{(2\theta \, – \, \alpha)} \\ \sin{(2\theta \, – \, \alpha)} \end{array} \right)$が得られることが確認できます。

行列の具体例

Rotations and reflections in two dimensions(Wikipedia)より

行列の具体例は上記より確認することができます。以下、$\mathrm{Rot}(0^{\circ})$、$\mathrm{Rot}(180^{\circ})$、$\mathrm{Ref}(45^{\circ})$について上記が正しいことを具体的な計算によって確認します。

・$\mathrm{Rot}(0^{\circ})$
$$
\large
\begin{align}
\mathrm{Rot}(0^{\circ}) &= \left( \begin{array}{cc} \cos{0^{\circ}} & -\sin{0^{\circ}} \\ \sin{0^{\circ}} & \cos{0^{\circ}} \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right)
\end{align}
$$

・$\mathrm{Rot}(180^{\circ})$
$$
\large
\begin{align}
\mathrm{Rot}(180^{\circ}) &= \left( \begin{array}{cc} \cos{180^{\circ}} & -\sin{180^{\circ}} \\ \sin{180^{\circ}} & \cos{180^{\circ}} \end{array} \right) \\
&= \left( \begin{array}{cc} -1 & 0 \\ 0 & -1 \end{array} \right)
\end{align}
$$

・$\mathrm{Ref}(45^{\circ})$
$$
\large
\begin{align}
\mathrm{Ref}(45^{\circ}) &= \left( \begin{array}{cc} \cos{(2 \cdot 45^{\circ})} & \sin{(2 \cdot 45^{\circ})} \\ \sin{(2 \cdot 45^{\circ})} & -\cos{(2 \cdot 45^{\circ})} \end{array} \right) \\
&= \left( \begin{array}{cc} \cos{90^{\circ}} & \sin{90^{\circ}} \\ \sin{90^{\circ}} & -\cos{90^{\circ}} \end{array} \right) \\
&= \left( \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right)
\end{align}
$$

行列式と置換⑥:置換(permutation)と行列式(determinant)

線形代数の枠組みで$n$次正方行列の行列式(determinant)を取り扱うにあたっては置換(permutation)という概念を抑えておく必要があります。当記事では置換(permutation)と行列式(determinant)について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$4$章「行列式」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

置換と行列式

互換の符号

互換$\sigma=(i \quad j)$の符号は常に$\mathrm{sgn}(\sigma)=-1$であり、全ての互換は奇置換である。

置換を用いた行列式の定義

$n$次正方行列$A=(a_{ij})$の行列式$\det{(A)}$は$1, \cdots , n$の$n$個の文字の置換$\sigma$を用いて下記のように定義される。
$$
\large
\begin{align}
\det{(A)} = \sum_{\sigma} \mathrm{sgn}(\sigma) a_{1 \sigma(1)} a_{2 \sigma(2)} \cdots a_{n \sigma(n)}
\end{align}
$$

上記を元に、$2$次正方行列$\displaystyle A = \left( \begin{array}{cc} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array} \right)$の行列式$\det{(A)}$は、置換$\sigma$が$\displaystyle \sigma_{1} = \left[ \begin{array}{cc} 1 & 2 \\ 1 & 2 \end{array} \right]$と$\displaystyle \sigma_{2} = \left[ \begin{array}{cc} 1 & 2 \\ 2 & 1 \end{array} \right]$の$2$種類取り得ることから下記のような式で計算することができる。
$$
\large
\begin{align}
\det{(A)} &= \sum_{\sigma} \mathrm{sgn}(\sigma) a_{1 \sigma(1)} a_{2 \sigma(2)} \\
&= \mathrm{sgn}(\sigma_{1}) a_{1 \sigma_{1}(1)} a_{2 \sigma_{1}(2)} + \mathrm{sgn}(\sigma_{2}) a_{1 \sigma_{2}(1)} a_{2 \sigma_{2}(2)} \\
&= a_{11} a_{22} \, – \, a_{12} a_{21}
\end{align}
$$

上記の式変形の理解にあたっては$\sigma_{1}$は単位置換であるから$\mathrm{sgn}(\sigma_{1})=1$、$\sigma_{2}$は互換であるから$\mathrm{sgn}(\sigma_{2})=-1$であることを注意しておくと良い。

例題の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$058$

・$[1]$
$$
\large
\begin{align}
A = \left( \begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array} \right)
\end{align}
$$

$\det{(A)}$は下記のように計算できる。
$$
\large
\begin{align}
\det{(A)} &= \left| \begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array} \right| \\
&= 1 \cdot 4 \, – \, 2 \cdot 3 \\
&= 4 \, – \, 6 = -2
\end{align}
$$

・$[2]$
$$
\large
\begin{align}
A = \left( \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right)
\end{align}
$$

$\det{(A)}$は下記のように計算できる。
$$
\large
\begin{align}
\det{(A)} &= \left| \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right| \\
&= 0 \cdot 0 \, – \, 1 \cdot 1 \\
&= 0 \, – \, 1 = -1
\end{align}
$$

基本例題$062$

・$[1]$
$i$列目が$\mathbf{a}_{i}$である$n$次正方行列$A$は下記のように表される。
$$
\large
\begin{align} A &= \left( \begin{array}{ccc} \mathbf{a}_{1} & \cdots & \mathbf{a}_{n} \end{array} \right) \\
\mathbf{a}_{i} &= \left( \begin{array}{c} a_{1i} \\ \vdots \\ a_{ni} \end{array} \right) = \left( \begin{array}{c} 0 \\ \vdots \\ 0 \end{array} \right)
\end{align}
$$

また、行列$A$の行列式は行列式の定義より下記のように表される。
$$
\large
\begin{align}
\det{(A)} = \sum_{\sigma} \mathrm{sgn}(\sigma) a_{1 \sigma(1)} a_{2 \sigma(2)} \cdots a_{n \sigma(n)}
\end{align}
$$

ここで任意の$\sigma$について$\sigma(k)=i$となる$k$が存在するが、$\mathbf{a}_{i}=\mathbf{0}$であるので$\sigma(k)=i$に対応する任意の$j$について$a_{j \sigma(k)} = a_{ji} = 0$である。よって行列式$\det{(A)}$は$\det{(A)}=0$となる。

行列のpノルム(p-norm)の定義・計算方法・計算例の確認

ベクトル(vector)や行列(matrix)のノルム(norm)は類似度の計算など、様々な場面で応用される重要トピックです。当記事ではシンプルかつよく用いられるフロベニウスノルムに加えて行列のpノルム(p-norm)の定義や成立する式と、具体的な計算例の確認などを行いました。
作成にあたっては「Matrix Computations」のSection$\, 2.3$「Matrix Norms」の内容を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

行列のノルムの定義

フロベニウスノルム

行列$A \in \mathbb{R}^{m \times n}$のフロベニウスノルム(Frobe­nius norm)を$||A||_{F}$とおくと、$||A||_{F}$は下記のような式で定義されます。
$$
\large
\begin{align}
||A||_{F} = \left( \sum_{i=1}^{m} \sum_{j=1}^{n} |a_{ij}|^{2} \right)^{\frac{1}
2}
\end{align}
$$

上記はベクトルの$2$-normのシンプルな拡張と見なすこともできます。一方で行列の$2$-normを含む$p$-normは上記とは異なる式で定義されるので注意が必要です。行列の$p$-normの定義については次項で問い扱います。

p-norm

行列$A \in \mathbb{R}^{m \times n}$の$p$-normを$||A||_{p}$とおくと、$||A||_{p}$は下記のような式で定義されます。
$$
\large
\begin{align}
||A||_{p} = \sup_{x \neq 0} \frac{||Ax||_{p}}{||x||_{p}} = \sup_{x \neq 0} \left| \middle| A \left( \frac{x}{||x||_{p}} \right) \middle| \right|_{p} = \max_{||x||_{p}=1} ||Ax||_{p} \quad (1)
\end{align}
$$

次節では$\displaystyle ||A||_{p} = \max_{||x||_{p}=1} ||Ax||_{p}$を元に$||A||_{p}$について成立する式を詳しく確認します。

行列のp-normについて成立する式

$1$-norm

行列$A \in \mathbb{R}^{m \times n}$の$1$-normである$||A||_{p}$は下記のように計算することができます。
$$
\large
\begin{align}
||A||_{1} = \max_{1 \leq j \leq n} \sum_{i=1}^{m} |a_{ij}| \quad (2)
\end{align}
$$

上記は「行列$A$の$1$-norm」は「$j$列の要素の絶対値の和が最大となる際に、$j$列の絶対値の和を計算することで得られる」と解釈できます。以下、$(2)$式を$(1)$式から導出します。まず、$(1)$式に$p=1$を代入することで下記のような式を得ることができます。
$$
\large
\begin{align}
||A||_{1} &= \max_{||x||_{1}=1} ||Ax||_{1} \quad (1)’ \\
&= \max_{||x||_{1}=1} \sum_{i=1}^{m} |a_{i1}x_{1} + \cdots a_{in}x_{n}| \\
& \leq \max_{||x||_{1}=1} \sum_{i=1}^{m} \sum_{j=1}^{n} |a_{ij}| |x_{j}|
\end{align}
$$

上記の式では$||x||_{1}=1$より$|x_1| + \cdots |x_n| = 1$であるので、$\displaystyle \sum_{i=1}^{m} |a_{ij}|$が最大となる$j$について$|x_j|=1$とすることで$||A||_{1}$は最大値を取ります。よって$(2)$式が成立することが確認できます。

$$
\large
\begin{align}
A = \left( \begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array} \right)
\end{align}
$$

たとえば上記のように$A$が定義されるとき、$|x_3| = 1$のとき$||A||_{1} = 9$が得られます。

$\infty$-norm

行列$A \in \mathbb{R}^{m \times n}$の$1$-normである$||A||_{\infty}$は下記のように計算することができます。
$$
\large
\begin{align}
||A||_{\infty} = \max_{1 \leq i \leq m} \sum_{j=1}^{n} |a_{ij}| \quad (3)
\end{align}
$$

以下、$(3)$式の導出を行います。$(1)$式と$\displaystyle ||x||_{\infty} = \max_{1 \leq i \leq m} |x_{i}|$に基づいて$||A||_{\infty}$は下記のような式で表すことができます。
$$
\large
\begin{align}
||A||_{\infty} &= \max_{||x||_{\infty}=1} ||Ax||_{\infty} \quad (1)^{”} \\
&= \max_{1 \leq i \leq m} | a_{i1}x_{1} + \cdots a_{in}x_{n} | \\
&= \max_{1 \leq i \leq m} \sum_{j=1}^{n} |a_{ij}| |x_{j}|
\end{align}
$$

ここで$||x||_{\infty}=1$より、$\displaystyle \sum_{j=1}^{n} |a_{ij}| |x_{j}|$は$x_1 = \cdots = x_{n} = 1$のとき最大値$\displaystyle \sum_{j=1}^{n} |a_{ij}|$を取ります。よって$(3)$式が成立することが確認できます。

$$
\large
\begin{align}
A = \left( \begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array} \right)
\end{align}
$$

たとえば上記のように$A$が定義されるとき、$|x_1| = |x_2| = |x_3| = 1$のとき$||A||_{\infty} = 15$が得られます。

$2$-normの計算式

行列$A \in \mathbb{R}^{m \times n}$について$A^{\mathrm{T}} A$の固有多項式を$p(\lambda)=\det{(A^{\mathrm{T}} A \, – \, \lambda I_{n})}$とおくとき$2$-normである$||A||_{2}$は下記のような式で計算することができます。
$$
\large
\begin{align}
||A||_{2} = \sqrt{\lambda_{\max} (A^{\mathrm{T}} A)} \quad (4)
\end{align}
$$

上記の$\lambda_{\max} (A^{\mathrm{T}} A)$は$A^{\mathrm{T}} A$の最大固有値に対応します。

$2$-normの計算式の導出

$A \in \mathbb{R}^{m \times n}$と$x \in \mathbb{R}^{n}$についてスカラー関数$g(x)$を下記のように定義します。
$$
\large
\begin{align}
g(x) = \frac{1}{2} \cdot \frac{||Ax||_{2}^{2}}{||x||_{2}^{2}} = \frac{1}{2} \cdot \frac{x^{\mathrm{T}} A^{\mathrm{T}} A x}{x^{\mathrm{T}} x}
\end{align}
$$

このとき、$g(x)$のベクトル微分$\displaystyle \nabla g(x) = \frac{\partial}{\partial x} g(x)$は下記のように計算できます。
$$
\large
\begin{align}
\nabla g(x) &= \frac{(x^{\mathrm{T}} x) A^{\mathrm{T}} A x \, – \, (x^{\mathrm{T}} A^{\mathrm{T}} A x)x}{(x^{\mathrm{T}} x)^{2}}
\end{align}
$$

ここで$||Az||_{2}=||A||_{2}$が成立するように$A \in \mathbb{R}^{m \times n}$について$z \in \mathbb{R}^{n}, \, ||z||_{2}=z^{\mathrm{T}} z=1$を仮定するとき、$\nabla g(z) = 0$が成立し、下記のような式を得ることができます。
$$
\large
\begin{align}
\nabla g(z) &= 0 \\
\frac{(z^{\mathrm{T}} z) A^{\mathrm{T}} A z \, – \, (x^{\mathrm{T}} A^{\mathrm{T}} Az)z}{(z^{\mathrm{T}} z)^{2}} &= 0 \\
1 \cdot A^{\mathrm{T}} A z \, – \, (z^{\mathrm{T}} A^{\mathrm{T}} A z)z &= 0 \\
A^{\mathrm{T}} A z &= (z^{\mathrm{T}} A^{\mathrm{T}} A z)z \\
A^{\mathrm{T}} A z &= \mu^{2} z
\end{align}
$$

上記の変形にあたって、$\mu^{2} = z^{\mathrm{T}} A^{\mathrm{T}} A z = ||Az||_{2}^{2}$のように$\mu$を定義しました。このとき$||Az||_{2}=||A||_{2}$を仮定したことより、$\mu^{2} = ||Az||_{2}^{2} = ||A||_{2}^{2}$が成立します。よって、$||A||_{2}$を得るにあたっては、$A^{\mathrm{T}} A z = \mu^{2} z$が成立する最大の$\mu$を求めれば良いことが確認できます。したがって固有方程式$\det{(A^{\mathrm{T}} A \, – \, \lambda I_{n})}$の最大固有値$\lambda(A^{\mathrm{T}} A)$を用いて$||A||_{2}$は下記のように表すことができます。
$$
\large
\begin{align} ||A||_{2} = \sqrt{\lambda_{\max} (A^{\mathrm{T}} A)}
\end{align}
$$

上記は前項の$(4)$式に一致します。

・ベクトル微分の式の導出について

直交行列とフロベニウスノルム

$Q \in \mathbb{R}^{m \times m}, \, Z \in \mathbb{R}^{n \times n}$が直交行列であるとき、$A \in \mathbb{R}^{m \times n}$のノルムについて下記の式が成立します。
$$
\large
\begin{align}
||QAZ||_{F} &= ||A||_{F} \quad (5) \\
||QAZ||_{2} &= ||A||_{2} \quad (6)
\end{align}
$$

$(5)$式の導出

まず、$A$の$j$列を$A(:,j)$とおくとき、$||QA||_{F}^{2}$は下記のように表すことができます。
$$
\large
\begin{align}
||QA||_{F}^{2} = \sum_{j=1}^{n} ||QA(:,j)||_{2}^{2}
\end{align}
$$

上記の式の$||QA(:,j)||_{2}^{2}$は行列ではなくベクトルの$2$-normであることに注意が必要です。また、ここで$Q$が直交行列であることより下記が成立します。
$$
\large
\begin{align}
||QA||_{F}^{2} &= \sum_{j=1}^{n} ||QA(:,j)||_{2}^{2} \\
&= \sum_{j=1}^{n} (QA(:,j))^{\mathrm{T}}(QA(:,j)) \\
&= \sum_{j=1}^{n} A(:,j)^{\mathrm{T}} Q^{\mathrm{T}} QA(:,j) \\
&= \sum_{j=1}^{n} A(:,j)^{\mathrm{T}} A(:,j) \\
&= \sum_{j=1}^{n} ||A(:,j)||_{2}^{2} \\
&= ||A||_{F}^{2}
\end{align}
$$

上記に基づいて、$||QAZ||_{F}^{2}$は下記のように式変形することができます。
$$
\large
\begin{align}
||QAZ||_{F}^{2} &= ||Q(AZ)||_{F}^{2} \\
&= ||AZ||_{F}^{2} \\
&= ||(AZ)^{\mathrm{T}}||_{F}^{2} \\
&= ||Z^{\mathrm{T}} A^{\mathrm{T}}||_{F}^{2} \\
&= ||A^{\mathrm{T}}||_{F}^{2} \\
&= ||A||_{F}^{2} \quad (5)’
\end{align}
$$

上記の導出にあたっては直交行列$Z$の転置である$Z^{\mathrm{T}}$も直交行列であることを用いました。直交行列の転置が直交行列であることは下記のように示すことができます。
$$
\large
\begin{align}
Z Z^{\mathrm{T}} &= I_{n} \\
(Z Z^{\mathrm{T}})^{\mathrm{T}} &= I_{n}^{\mathrm{T}} \\
(Z^{\mathrm{T}})^{\mathrm{T}} Z^{\mathrm{T}} &= I_{n}
\end{align}
$$

$(6)$式の導出

$||QA||_{2}$は$(1)$式に基づいて下記のように表すことができます。
$$
\large
\begin{align}
||QA||_{2} = \max_{||x||_{p}=1} ||QAx||_{2}
\end{align}
$$

ここで$Q$が直交行列、$QAx$がベクトルであることに基づいて$||QAx||_{2}^{2}$について下記のような変形を行うことができます。
$$
\large
\begin{align}
||QAx||_{2}^{2} &= (QAx)^{\mathrm{T}} (QAx) \\
&= x^{\mathrm{T}} A^{\mathrm{T}} Q^{\mathrm{T}} Q A x \\
&= x^{\mathrm{T}} A^{\mathrm{T}} A x \\
&= (Ax)^{\mathrm{T}} (Ax) \\
&= ||Ax||_{2}^{2}
\end{align}
$$

よって、$||QA||_{2}$は下記のように表すことができます。
$$
\large
\begin{align}
||QA||_{2} &= \max_{||x||_{p}=1} ||QAx||_{2} \\
&= \max_{||x||_{p}=1} ||Ax||_{2} \\
&= ||A||_{2}
\end{align}
$$

上記に基づいて、$||QAZ||_{2}^{2}$は$(5)$式の導出と同様に下記のように式変形することができます。
$$
\large
\begin{align}
||QAZ||_{2}^{2} &= ||Q(AZ)||_{2}^{2} \\
&= ||AZ||_{2}^{2} \\
&= ||(AZ)^{\mathrm{T}}||_{2}^{2} \\
&= ||Z^{\mathrm{T}} A^{\mathrm{T}}||_{2}^{2} \\
&= ||A^{\mathrm{T}}||_{2}^{2} \\
&= ||A||_{2}^{2} \quad (6)’
\end{align}
$$

ベクトルのpノルム(p-norm)の定義と具体的な計算例の確認

ベクトル(vector)や行列(matrix)のノルム(norm)は類似度の計算など、様々な場面で応用される重要トピックです。当記事ではベクトルのpノルム(p-norm)の定義と成立する等式(equality)や不等式(inequality)、具体的な計算例の確認などを行いました。
作成にあたっては「Matrix Computations」のSection$\, 2.2$「Vector Norms」の内容を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

p-normの定義

p-normの式定義

$n$次元ベクトル$x \in \mathbb{R}^{n}$のp-normを$||x||_{p}$とおくとき、$||x||_{p}$は下記のように定義されます。
$$
\large
\begin{align}
||x||_{p} &= (|x_1|^{p} + |x_2|^{p} + \cdots + |x_n|^{p})^{\frac{1}{p}} \quad (1) \\
&= \left( \sum_{i=1}^{n} |x_i|^{p} \right)^{\frac{1}{p}}
\end{align}
$$

上記に基づいて$1$-norm、$2$-norm、$\infty$-normはそれぞれ下記のように表すことができます。
$$
\large
\begin{align}
||x||_{1} &= |x_1| + |x_2| + \cdots + |x_n| = \sum_{i=1}^{n} |x_i| \\
||x||_{2} &= (|x_1|^{2} + |x_2|^{2} + \cdots + |x_n|^{2})^{\frac{1}{2}} = (x^{\mathrm{T}} x)^{\frac{1}{2}} \\
||x||_{\infty} &= \max_{1 \leq i \leq n} |x_{i}|
\end{align}
$$

$1$-norm、$2$-normについては$p$に$p=1, p=2$を代入することで式が成立することが確認できるので、以下$\infty$-normについて具体例を元に詳しく確認します。
$$
\large
\begin{align}
x = \left( \begin{array}{c} 1 \\ 2 \\ 0 \end{array} \right)
\end{align}
$$

たとえば上記のように$x \in \mathbb{R}^{3}$が表される場合、$||x||_{10}$は$(1)$式に$p=10$を代入することで下記のように計算できます。
$$
\large
\begin{align}
||x||_{10} &= (|1|^{10} + |2|^{10} + 0^{10})^{\frac{1}{10}} \quad (1)’ \\
&= ( 1 + 2^{10} )^{\frac{1}{10}} \\
& \simeq ( 2^{10} )^{\frac{1}{10}} = 2
\end{align}
$$

上記は$p=20, p=100$の場合も同様です。よって、$p \to \infty$のとき$\displaystyle ||x||_{p} \to \max_{1 \leq i \leq n} |x_{i}|$が成立するであろうことが推察できます。

Absolute and Relative Errors

統計や機械学習の分野では誤差を定義することが多いので、当項ではノルムを用いたAbsolute ErrorやRelative Errorの定義について確認を行います。ベクトル$x \in \mathbb{R}^{n}$をベクトル$\hat{x} \in \mathbb{R}^{n}$で近似するときのAbsolute Errorを$\epsilon_{\mathrm{abs}}$、Relative Errorを$\epsilon_{\mathrm{rel}}$とおくとき、$\epsilon_{\mathrm{abs}}$と$\epsilon_{\mathrm{rel}}$はそれぞれ下記のように定義されます。
$$
\large
\begin{align}
\epsilon_{\mathrm{abs}} &= ||\hat{x} \, – \, x||_{p} \\
\epsilon_{\mathrm{rel}} &= \frac{||\hat{x} \, – \, x||_{p}}{||x||_{p}}
\end{align}
$$

上記の計算にあたっては$p=2$が用いられることが一般的です。

p-normについて成立する式

Holder不等式

ベクトル$x \in \mathbb{R}^{n}, y \in \mathbb{R}^{n}$について下記のHolder不等式が成立します。
$$
\large
\begin{align}
|x^{\mathrm{T}} y| \leq ||x||_{p} ||y||_{p}
\end{align}
$$

上記は下記のように定義されるコーシー・シュワルツの不等式(Cauchy-Schwarz inequality)の一般形です。
$$
\large
\begin{align}
|x^{\mathrm{T}} y| \leq ||x||_{2} ||y||_{2}
\end{align}
$$

以下、具体例に基づいてーシー・シュワルツの不等式が成立することを確認します。
$$
\large
\begin{align}
x = \left( \begin{array}{c} 1 \\ 2 \\ 0 \end{array} \right), \quad x = \left( \begin{array}{c} 2 \\ 1 \\ 0 \end{array} \right)
\end{align}
$$

上記に対し、$x^{\mathrm{T}} y, \, ||x||_{2}, \, ||y||_{2}$はそれぞれ下記のように計算できます。
$$
\large
\begin{align}
x^{\mathrm{T}} y &= 1 \cdot 2 + 2 \cdot 1 + 0 \cdot 0 = 4 \\
||x||_{2} &= \sqrt{1^{2} + 2^{2} + 0^{2}} = \sqrt{5} \\
||y||_{2} &= \sqrt{2^{2} + 1^{2} + 0^{2}} = \sqrt{5}
\end{align}
$$

$4 \leq \sqrt{5} \cdot \sqrt{5}$であるので、$|x^{\mathrm{T}} y| \leq ||x||_{2} ||y||_{2}$が成立していることが確認できます。

直交行列について成立する式

$Q \in \mathbb{R}$を直交行列とするとき、$Q$とベクトル$x \in \mathbb{R}^{n}$について下記が成立します。
$$
\large
\begin{align}
||Qx||_{2}^{2} &= (Qx)^{\mathrm{T}} (Qx) \\
&= x^{\mathrm{T}} Q^{\mathrm{T}} Q x \\
&= x^{\mathrm{T}} x = ||x||_{2}^{2}
\end{align}
$$

上記の導出にあたっては直交行列の定義である$Q^{T} Q = Q^{-1} Q = I_{n}$を用いました。

Principal Anglesに基づくLoRAで用いる行列の最適なランク$r$の計算

LoRA(Low-Rank Adaptation)の論文ではPrincipal Angleに基づいてTransformerにおけるLoRAで用いる行列のランク$r$について実験が行われます。当記事ではPrincipal Angleの基本的な内容からLoRA論文の内容まで取りまとめを行いました。
LoRAの論文である「LoRA: Low-Rank Aaptation of Large Language Models」や「Matrix Computations」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

Principal Anglesの計算

行列のrangeとnullspace

$\mathbb{R}^{n} \longrightarrow \mathbb{R}^{m}$の線形写像に対応する行列$A \in \mathbb{R}^{m \times n}$について、$\mathbb{R}^{m}$の部分空間$\mathrm{ran}(A)$を下記のように定義する。
$$
\large
\begin{align}
\mathrm{ran}(A) = \{ y \in \mathbb{R}^{m} : \, y = Ax \quad \mathrm{for} \,\, \mathrm{some} \,\, x \in \mathbb{R}^{n} \}
\end{align}
$$

上記の部分空間を行列$A$のrangeといい、$\mathrm{ran}(A)$のように表す。

同様に$\mathbb{R}^{n}$の部分空間$\mathrm{null}(A)$を下記のように定義する。
$$
\large
\begin{align}
\mathrm{null}(A) = \{ x \in \mathbb{R}^{n} : \, Ax = 0 \}
\end{align}
$$

上記の部分空間を行列$A$のnullspaceといい、$\mathrm{null}(A)$のように表す1

また、下記が成立することも合わせて抑えておくと良い。
$$
\large
\begin{align}
\mathrm{dim}(\mathrm{ran}(A)) = n \, – \, \mathrm{dim}(\mathrm{null}(A))
\end{align}
$$

線形写像と部分空間

行列$A \in \mathbb{R}^{n \times p}$と行列$B \in \mathbb{R}^{n \times q}$を元に、部分空間$F$と$G$を下記のように定義する。
$$
\large
\begin{align}
F &= \mathrm{ran}(A) \\
G &= \mathrm{ran}(B)
\end{align}
$$

$p, q$については下記が成立すると仮定する。
$$
\large
\begin{align}
1 \leq q = \mathrm{dim}(F) \leq \mathrm{dim}(G) = p
\end{align}
$$

次項以降では、部分空間$F$と部分空間$G$の類似度を計算するにあたって、Principal AngleやPrincipal Vectorの定義を行う。

Principal Anglesの定義

部分空間$F$と部分空間$G$についてPrincipal Angles$\{ \theta_{i} \}_{i=1}^{q}$とPrincipal Vectors$\{ f_{i}, g_{i} \}_{i=1}^{q}$を下記の式が成立するように定義する。
$$
\large
\begin{align}
\cos{\theta_{k}} &= f_{k}^{\mathrm{T}} g_{k} = \max_{f \in F} \max_{g \in G} f^{\mathrm{T}} g \\
||f||_{2} &= 1, \quad ||g||_{2} = 1 \\
f^{\mathrm{T}}[f_1, \cdots , f_{k-1}] &= 0, \quad g^{\mathrm{T}}[g_1, \cdots , g_{k-1}] = 0
\end{align}
$$

上記の式に基づいて$i=1$から$i=q$まで、$\theta_{i}, \, f_{i}, \, g_{i}$をそれぞれ取得する。

また、$\cos{\theta}$は$\displaystyle 0 \leq \theta \leq \frac{\pi}{2}$で$\theta$について単調減少関数であることからPrincipal Angles$\{ \theta_{i} \}_{i=1}^{q}$について下記が成立する。
$$
\large
\begin{align}
0 \leq \theta_{1} \leq \cdots \leq \theta_{q} \leq \frac{\pi}{2} \quad (1)
\end{align}
$$

QR分解

行列$A \in \mathbb{R}^{n \times p}$、$B \in \mathbb{R}^{n \times q}$について下記のようなQR分解を仮定する。
$$
\large
\begin{align}
A &= Q_{A} R_{A}, \, Q_{A} \in \mathbb{R}^{n \times p}, \, R_{A} \in \mathbb{R}^{p \times p} \\
B &= Q_{B} R_{B}, \, Q_{B} \in \mathbb{R}^{n \times q}, \, R_{A} \in \mathbb{R}^{q \times q}
\end{align}
$$

QR分解については下記でも詳しく取り扱った。

SVD

$Q_{A}^{\mathrm{T}} Q_{B} \in \mathbb{R}^{p \times q}$について下記のようなSVDを行う。
$$
\large
\begin{align}
Q_{A}^{\mathrm{T}} Q_{B} &= Y \Sigma Z^{\mathrm{T}} \quad (2) \\
Y \in \mathbb{R}^{p \times p}, \, & \Sigma \in \mathbb{R}^{p \times q}, \, Z \in \mathbb{R}^{p \times q}
\end{align}
$$

上記の行列$Y$と$Z$の$i$列目をそれぞれ$y_i \in \mathbb{R}^{p \times 1}, z_i \in \mathbb{R}^{q \times 1}$、$\Sigma$の$(i,i)$成分を$\sigma_{i}$とおくとき、$(2)$式は下記のように表すことができる。
$$
\large
\begin{align}
Q_{A}^{\mathrm{T}} Q_{B} &= Y \Sigma Z^{\mathrm{T}} = \sum_{i=1}^{q} \sigma_{i} y_{i} z_{i}^{\mathrm{T}} \quad (2)’ \\
y_i \in \mathbb{R}^{p \times 1}, \, & z_{i}^{\mathrm{T}} \in \mathbb{R}^{1 \times q}, \, y_{i} z_{i}^{\mathrm{T}} \in \mathbb{R}^{p \times q}
\end{align}
$$

ここで$||Q_{A}^{\mathrm{T}} Q_{B}||_{2} \leq 1$より、$0 \leq \sigma_{i} \leq 1$が成立するので、$\sigma_{i} = \cos{\theta_{i}}$とおく。ここで$Q_{A}Y, Q_{B}Z$を下記のように定義する。
$$
\large
\begin{align}
Q_{A}Y &= [f_1| \cdots | f_p] \in \mathbb{R}^{n \times p} \\
Q_{B}Z &= [g_1| \cdots | g_q] \in \mathbb{R}^{n \times q}
\end{align}
$$

このとき、$f = Q_{A} u, \, u \in \mathbb{R}^{p}$、$g = Q_{B} v, \, v \in \mathbb{R}^{q}$とおくと、$f^{\mathrm{T}} g$は下記のように式変形することができる。
$$
\large
\begin{align}
f^{\mathrm{T}} g &= (Q_{A} u)^{\mathrm{T}} (Q_{B} v) \\
&= u^{\mathrm{T}} Q_{A}^{\mathrm{T}} Q_{B} v \\
&= u^{\mathrm{T}} (Q_{A}^{\mathrm{T}} Q_{B}) v \\
&= u^{\mathrm{T}} (Y \Sigma Z^{\mathrm{T}}) v \\
&= ((u^{\mathrm{T}} Y)^{\mathrm{T}})^{\mathrm{T}} \Sigma (Z^{\mathrm{T}} v) \\
&= (Y^{\mathrm{T}} u)^{\mathrm{T}} \Sigma (Z^{\mathrm{T}} v) \\
&= \sum_{i=1}^{q} \sigma_{i} (y_{i}^{\mathrm{T}} u) (z_{i}^{\mathrm{T}} v)
\end{align}
$$

ここで$(1)$より$\sigma_{1} \geq \cdots \geq \sigma_{q}$であるので、$u=y_{1}, \, v=z_{1}$のとき$f^{\mathrm{T}} g$は最大値$\sigma_{1}=\cos{\theta_{1}}$を取る。このとき$f_1=Q_{A}y_{1}, g_1=Q_{B} z_{1}$によってPrincipal Vectorも計算できる。このような手順に基づいてPrincipal Angles$\{ \theta_{i} \}_{i=1}^{q}$とPrincipal Vectors$\{ f_{i}, g_{i} \}_{i=1}^{q}$を$i=1$から$i=q$にかけて得ることができる。

Principal Angles and Vectorsを得るアルゴリズム

前項までの内容をアルゴリズムに直すと下記が得られる。

$[1]$ 行列$A \in \mathbb{R}^{n \times p}$と行列$B \in \mathbb{R}^{n \times q}$のQR分解を行う。
$$
\large
\begin{align}
A &= Q_{A} R_{A}, \, Q_{A} \in \mathbb{R}^{n \times p}, \, R_{A} \in \mathbb{R}^{p \times p} \\
B &= Q_{B} R_{B}, \, Q_{B} \in \mathbb{R}^{n \times q}, \, R_{B} \in \mathbb{R}^{q \times q}
\end{align}
$$

$[2]$ $C = Q_{A}^{\mathrm{T}} Q_{B}$とおき、$C$の特異値分解(SVD)を行う。
$$
\large
\begin{align}
C &= Y \Sigma Z^{\mathrm{T}} \\
Y^{\mathrm{T}} C Z &= \Sigma = \mathrm{diag}(\sigma_{k}) = \mathrm{diag}(\cos{\theta_{k}})
\end{align}
$$

上記より、Principal Anglesの$\{ \theta_{k} \}_{k=1}^{\min(p,q)}$が得られる。

$[3]$ $Q_{A} Y, Q_{B} Z$に基づいて$\{ f_{k}, g_{k} \}_{k=1}^{\min(p,q)}$を得る。

TransformerにおけるLoRAで用いる行列の最適ランクの計算

全体方針

LoRAの論文ではFine-Tuning時にMLP(Multi Layer Perceptron)処理におけるパラメータ行列$W$の学習を、低ランクの行列の積を元に行う。

LoRA論文のSection$\, 7.2$では行列のランク$r$を決めるにあたって、実験に基づく考察が行われている。この際に前節で取り扱った「線形写像に対応する行列が生成する部分空間」のPrincipal Anglesを用いて類似度の計算が行われる。

以下、$r=8$と$r=64$の場合における写像$A_{r=8} \in \mathbb{R}^{8 \times D}, A_{r=64} \in \mathbb{R}^{64 \times D}$に基づく類似度の計算について確認を行う。

LoRA論文における写像の類似度の定義

$A_{r=8}^{\mathrm{T}} \in \mathbb{R}^{D \times 8}, A_{r=64}^{\mathrm{T}} \in \mathbb{R}^{D \times 64}$のQR分解を下記のように定義する2
$$
\large
\begin{align}
A_{r=8}^{\mathrm{T}} &= Q_{r=8} R_{r=8} = U_{A_{r=8}}^{\mathrm{T}} R_{r=8} \\
A_{r=64}^{\mathrm{T}} &= Q_{r=64} R_{r=64} = U_{A_{r=64}}^{\mathrm{T}} R_{r=64} \\
U_{A_{r=8}} & \in \mathbb{R}^{D \times 8}, \, U_{A_{r=64}} \in \mathbb{R}^{D \times 64}
\end{align}
$$

このとき、LoRA論文では「$U_{A_{r=8}}$の$i$列目までの行列$U^{i}_{A_{r=8}} \in \mathbb{R}^{D \times i}$による部分空間と$U_{A_{r=64}}$の$j$列目までの行列$U^{j}_{A_{r=64}} \in \mathbb{R}^{D \times j}$による部分空間の類似度」を$\phi(A_{r=8}, A_{r=64}, i, j)$のようにおき、下記のような式で定義する。
$$
\large
\begin{align}
\phi(A_{r=8}, A_{r=64}, i, j) = \frac{|| (U^{i}_{A_{r=8}})^{\mathrm{T}} U^{j}_{A_{r=64}} ||_{F}^{2}}{\min{(i,j)}} \in [0, 1]
\end{align}
$$

写像の類似度のPrincipal Anglesに基づく理解

$(U^{i}_{A_{r=8}})^{\mathrm{T}} U^{j}_{A_{r=64}} \in \mathbb{R}^{i \times j}$に下記のようにSVDを行う。
$$
\large
\begin{align}
(U^{i}_{A_{r=8}})^{\mathrm{T}} U^{j}_{A_{r=64}} &= Y \Sigma Z^{\mathrm{T}} \\
Y \in \mathrm{R}^{i \times i}, \, & \Sigma \in \mathbb{R}^{i \times j}, \, Z \in \mathbb{R}^{j \times j}
\end{align}
$$

このとき、$\Sigma$の対角成分の$\sigma_{1}, \cdots , \sigma_{\min(i,j)}$を$\sigma_{k} = \cos{\theta_{k}}$のように対応させたのが前節で取り扱ったPrincipal Anglesである。

「Grassmann discriminant analysis: a unifying view on subspace-based learning.」ではこの$\theta_{k}$を元に下記のようにProjection metricの$d_{P}(U^{i}_{A_{r=8}}, U^{j}_{A_{r=64}})$が定義される。
$$
\large
\begin{align}
d_{P}(U^{i}_{A_{r=8}}, U^{j}_{A_{r=64}}) &= \left( \sum_{k=1}^{m} \sin^{2}{\theta_{k}} \right)^{\frac{1}{2}} = \left( m \, – \, \sum_{k=1}^{m} \cos^{2}{\theta_{k}} \right)^{\frac{1}{2}} \\
m &= \min{(i,j)}
\end{align}
$$

ここでLoRA論文における$\phi(A_{r=8}, A_{r=64}, i, j)$は下記のように式変形を行うことができる3
$$
\large
\begin{align}
\phi(A_{r=8}, A_{r=64}, i, j) &= \frac{|| (U^{i}_{A_{r=8}})^{\mathrm{T}} U^{j}_{A_{r=64}} ||_{F}^{2}}{m} \\
&= \frac{\sum_{k=1}^{m} \sigma_{k}^{2}}{m} \\
&= \frac{\sum_{k=1}^{m} \cos^{2}{\theta_{k}}}{m} \\
&= \frac{\sum_{k=1}^{m} (1 – \sin^{2}{\theta_{k}})}{m} \\
&= \frac{m \, – \, \sum_{k=1}^{m} \sin^{2}{\theta_{k}}}{m} \\
&= 1 \, – \, \frac{d_{P}(U^{i}_{A_{r=8}}, U^{j}_{A_{r=64}})}{m} \\
m &= \min{(i,j)}
\end{align}
$$

LoRA論文の実験結果の解釈

LoRA論文 Figure$\, 3$

上図の結果より、$i$や$j$が小さいときベクトル空間が類似していることが確認できる。

参考

・LoRA論文

  1. nullspaceの定義は線形代数における核(kernel)と同義だが、ここでは「Matrix Computations」の表記に基づいてnullspaceを用いた。 ↩︎
  2. LoRA論文のSection$\, 7.2$では「SVDの右側のユニタリ行列を得る(we perform singular value decomposition and obtain the right-singular unitary matrices)」のように記載があるが、前節の内容に合わせてQR分解で統一させた。また、「右側を得る」という点については、$A^{\mathrm{T}} = QR$に対し、$A = ((A^{\mathrm{T}}))^{\mathrm{T}} = (QR)^{\mathrm{T}} = R^{\mathrm{T}} Q^{\mathrm{T}} = R^{\mathrm{T}}U$であるので、本文中のように$A^{\mathrm{T}}$のQR分解を行ったのちに$U = Q^{\mathrm{T}} \longrightarrow Q=U^{\mathrm{T}}$で表すのがわかりやすいと思われた。 ↩︎
  3. LoRA論文では$\displaystyle \frac{1}{m}(1 \, – \, d_{P}(U^{i}_{A_{r=8}}, U^{j}_{A_{r=64}}))$のように結果が表されていたが、計算が合わなかったので結果のみ改変した。 ↩︎

【LoRA】Low-Rank Adaptationの概要とTransformerへの導入

Fine-Tuningを行うにあたって、低ランクの行列分解に基づく手法であるLoRA(Low-Rank Adaptation)は実用上の観点から大変有力な手法です。当記事ではLoRAの概要とLoRAのTransformerへの適用について取りまとめました。
LoRAの論文である「LoRA: Low-Rank Aaptation of Large Language Models」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

LoRAの概要

パラメータ行列の分解

LoRA(Low-Rank Adaptation)ではFine-Tuningの際に全結合層(MLP)の計算に用いるパラメータ行列の分解を行います。たとえばパラメータ行列$W \in \mathbb{R}^{D \times D}$を用いる場合、$W$は下記のように分解することができます。
$$
\large
\begin{align}
W & \longrightarrow XY \\
X & \in \mathbb{R}^{D \times r}, \, Y \in \mathbb{R}^{r \times D}
\end{align}
$$

上記のように分解を行う場合、$D=10{,}000, r=10$であれば「$W$のパラメータ数」と「$X$と$Y$のパラメータ数の合計」はそれぞれ下記のように計算できます。
・$W$のパラメータ数
$$
\large
\begin{align}
10{,}000 \times 10{,}000 = 10^{8}
\end{align}
$$

・$X$と$Y$のパラメータ数の合計
$$
\large
\begin{align}
10,000 \times 10 + 10 \times 10{,}000 = 2 \times 10^{4}
\end{align}
$$

上記のようにLoRAではパラメータ$W$を$XY$のように分解してFine-Tuningの際に$X$と$Y$とそれぞれ学習を行います。このような処理を行うことでFine-Tuningの際の学習パラメータを減らすことが可能になります。

LoRA論文 Figure$\, 1$

LoRAの処理の概要は上図からも確認できます。パラメータの初期値は$r \times D$の行列の値を正規分布$\mathcal{N}(0, \sigma^{2})$に基づいてサンプリングし、$D \times r$の行列を零行列で用意します1

図では$W \in \mathbb{R}^{D \times D}$が前提である一方で、論文の本文では$d \times k$で表記されている箇所があることは合わせて注意しておくと良いと思います。

一部のパラメータのみのFine-Tuning

Fine-Tuning時にLoRAを用いるにあたっては、基本的に全てのパラメータを用いずに一部のパラメータのみのFine-Tuningを行います。どのパラメータをFine-TuningするかはPre-trained modelやdownstream taskの特性に合わせて検討されます。

推論時の処理

LoRAではFine-Tuning時にパラメータ$W$をUpdateするのではなく、初期値が$0$の$\Delta W$に蓄積させるような処理が行われます。逆に推論時にはFine-Tuning時に学習した結果の$\Delta W$に対応する$W$に対して$W + \Delta W$を計算することで推論を行うことができます。

このような枠組みでFine-Tuningや推論を行うことで、推論時の処理を大きく変えないことが可能です。また、大元のパラメータの値を変えないことから、LoRAの入れ替えをスムーズに行うことが可能であり、アプリケーションへの反映がしやすくなります。

TransformerへのLoRAの導入

TransformerにおけるMLP

TransformerではMultiHead Attention時のlinear projectionと$2$層FFN(FeedForward Network)の$2$つの処理をMLPと見なすことができ、LoRA(Low-Rank Adaptation)を適用することが可能です2

LoRAの論文ではMultiHead Attention時の$W_q, W_k, W_v, W_o$を用いるlinear projectionのみ実験されておりFFNはfuture workの課題とされているので、以下$W_q, W_k, W_v, W_o$についてのみ確認を行います。

MultiHead AttentionのどのパラメータにLoRAを用いるか

LoRA論文のSection$\, 7.1$ではTransformerにおけるMultiHead AttentionのどのパラメータにLoRAを用いるかについて実験を元に考察が行われています。LoRA論文では$1{,}750$億のパラメータ数で構成されるGPT-$3$に対し、LoRAで用いるパラメータ数を$1{,}800$万とする条件下で実験が行われており、「$r=8$で$W_q, W_k, W_v, W_o$をどれか$1$つだけ用いるパターン」と「$r=4$かつ$2$つのパラメータを用いるパターン」、「$r=2$かつ$4$つ全てのパラメータを学習させるパターン」についてそれぞれパフォーマンスが計測されます。$1{,}800$万は$96 \times 12288 \times 8 \times 2 = 18{,}874{,}368$に基づきます。

LoRA論文 Table$\, 5$

上記の表より、$r$を大きくするよりFine-Tuning対象のパラメータを増やすのが有力であるということが確認できます。この結果から、それほど複雑でないFine-Tuningタスクでは行列のランクが小さくても十分であると見なすことができます3

また、$W_q, W_k, W_v$の学習にあたっては、一般的なMultiHead Attentionの処理はヘッド毎にパラメータ行列を計算するように立式される一方で、$D \times D$のパラメータ行列で計算した後に分割する演算で表すこともできます。このような点に基づいてMultiHead AttentionにおけるLoRAでは$D \times D$を$D \times r$と$r \times D$で分割し、学習を行うことが可能です。

  1. LoRAではFine-Tuning時にパラメータ$W$をUpdateするのではなく初期値が$0$の$\Delta W$に蓄積させるような処理が行われるので、学習前の$\Delta W$が零行列となるように初期値を設定する必要があります。 ↩︎
  2. MLPと見なせるかではなく、処理にパラメータ行列の積の演算が含まれるかで判断するのがシンプルで良いと思います。 ↩︎
  3. LoRA論文では$r=2$でも十分であったのはタスクが簡単であったからと推察されており、たとえば多言語が前提となる場合は$r=2$では十分でない可能性があると記載されています。 ↩︎

GELU(Gaussian Error Linear Unit)の数式とグラフの描画

近年様々なタスクに用いられるTransformer処理では活性化関数にGELU(Gaussian Error Linear Unit)が用いられることが多いです。当記事ではGELUの数式の確認と、Pythonを用いたグラフの描画を行いました。
当記事の作成にあたっては、GELU論文や「深層学習 第$2$版」の第$2$章「ネットワークの基本構造」の内容などを参考にしました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

GELUの数式

標準正規分布の累積分布関数

GELU(Gaussian Error Linear Unit)の数式には標準正規分布$\mathcal{N}(0,1)$の累積分布関数が用いられます。標準正規分布の確率密度関数を$\phi(x)$、累積分布関数を$\Phi(x)$とおくとき、$\phi(x), \Phi(x)$はそれぞれ下記のように表されます。
$$
\large
\begin{align}
\phi(x) &= \frac{1}{\sqrt{2 \pi}} \exp{ \left( \frac{x^{2}}{2} \right) } \\
\Phi(x) &= \int_{-\infty}^{x} \phi(t) dt
\end{align}
$$

GELUの数式

前項で確認を行った標準正規分布の累積分布関数$\Phi(x)$を元にGELUの数式$\mathrm{GELU}(x)$は下記のように定義されます。
$$
\large
\begin{align}
\mathrm{GELU}(x) = x \Phi(x)
\end{align}
$$

GELUの微分

$\mathrm{GELU}(x) = x \Phi(x)$は下記のように計算することができます。
$$
\large
\begin{align}
\frac{d}{dx} \mathrm{GELU}(x) &= \frac{d}{dx} (x \Phi(x)) \\
&= \Phi(x) + x \cdot \frac{d}{dx} \Phi(x) \\
&= \Phi(x) + x \phi(x) \quad (1)
\end{align}
$$

GELUのグラフの描画

ReLUとGELUのグラフは下記を実行することで行うことができます。

import numpy as np
from scipy import stats

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme()

x = np.arange(-2.5, 2.51, 0.01)

y_relu = np.maximum(0, x)
y_gelu = x * stats.norm.cdf(x)

plt.plot(x, y_relu, label="ReLU")
plt.plot(x, y_gelu, label="GELU")

plt.legend()
plt.show()

・実行結果

上記のGELUの理解にあたっては、下記を実行するとわかりやすいと思います。

x = np.arange(-1., 2., 0.01)

y = x
y_gelu = x * stats.norm.cdf(x)

plt.plot(x, y, label="ReLU")
plt.plot(x, y_gelu, label="GELU")

plt.plot(x, np.zeros(x.shape[0]), "k--")

print("Phi(-1): {:.2f}".format(stats.norm.cdf(-1)))
print("Phi(1): {:.2f}".format(stats.norm.cdf(1)))
print("Phi(2): {:.2f}".format(stats.norm.cdf(2)))

plt.legend()
plt.show()

・実行結果

$\Phi(-1)=0.16, \, \Phi(1)=0.84, \, \Phi(2)=0.98$のような値が得られた一方で、$x=-1$ではオレンジが青のおおよそ$0.16$倍、$x=1$ではオレンジが青のおおよそ$0.84$倍、$x=2$ではオレンジが青のおおよそ$0.98$倍であることがそれぞれ確認できます。

また、$x=0$で微分を行うことのできないReLUに対し、GELUでは微分を行うことが可能です。前節の$(1)$式に基づいてGELUの$x=0$における接線は下記のように描画することができます。

x = np.arange(-1., 2., 0.01)

y_gelu = x * stats.norm.cdf(x)
y_tangent = stats.norm.cdf(0) * x

plt.plot(x, y_gelu, label="GELU")
plt.plot(x, y_tangent, label="tangent_line")

plt.plot([0], [0], "go")

plt.legend()
plt.show()

・実行結果

参考

・GELU論文