行列
内積
ベクトル $\boldsymbol{x} = \begin{pmatrix}x_{1} & x_{2}\end{pmatrix}$ とベクトル $\boldsymbol{y} = \begin{pmatrix}y_{1} & y_{2}\end{pmatrix}$ の内積 $\langle{\boldsymbol{x}}, {\boldsymbol{y}}\rangle$ についてまとめます。
2つのベクトルの内積は、線形空間でのベクトルの近さ(類似度)を計算する場合にも使われます。
ベクトルの内積には「代数的な定義(要素によるドット積)」と「幾何学的な定義」があります。
要素による定義(ドット積)
\[\langle{\boldsymbol{x}}, {\boldsymbol{y}}\rangle = x_{1}y_{1} + x_{2}y_{2}\]幾何学的な定義
\[\langle{\boldsymbol{x}}, {\boldsymbol{y}}\rangle = \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{y} \rVert \cos\theta \quad ※\ \lVert \boldsymbol{x} \rVert \text{はベクトルの大きさ(L2ノルム)}\]コサイン類似度
幾何学的な定義を変形することで、2 つのベクトルの余弦($\cos\theta$)を求めることができます。この 2 つのベクトルの余弦を コサイン類似度 と呼び、ベクトルの向きが近い(類似している)ほど値が大きくなります(最大値は $1$)。
2 点間のコサイン類似度は以下の式で求めます。
\[\cos\theta = \frac{x_1 y_1 + x_2 y_2}{\sqrt{x_1^2 + x_2^2} \sqrt{y_1^2 + y_2^2}}\]コサイン類似度を使った行列積の解釈
行列の積はベクトルの内積を使って定義されます。
内積はベクトルの要素を使って定義する方法が一般的ですが、コサイン類似度を用いた幾何学的な解釈も可能です。
LLM(大規模言語モデル)の文脈では、単語(正確にはトークン)の Embedding 行列における2つのベクトルの近さを内積で計測するため、コサイン類似度を使った解釈も重要になります。
\[\begin{aligned} \begin{pmatrix} x_1 & x_2 \end{pmatrix} \cdot \begin{pmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \end{pmatrix} &= \begin{pmatrix} x_1 w_{11} + x_2 w_{21} & x_1 w_{12} + x_2 w_{22} & x_1 w_{13} + x_2 w_{23} \end{pmatrix} \\ &= \begin{pmatrix} \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{w}_1 \rVert \cos\theta_1 & \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{w}_2 \rVert \cos\theta_2 & \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{w}_3 \rVert \cos\theta_3 \end{pmatrix} \end{aligned}\]ここで $\boldsymbol{w}_1, \boldsymbol{w}_2, \boldsymbol{w}_3$ はそれぞれ重み行列 $W$ の 1列目・2列目・3列目の列ベクトルを表します。
2 つのベクトルの内積
定義より、2つのベクトル間の内積は各ベクトルの大きさ(L2ノルム)が大きく、かつ同じ方向を向いている($\cos\theta$ が $1$ に近い)ほど大きな値になります。
行列の積
行列の積(ドット積)は、行ベクトルと列ベクトルの内積を使って計算します。
[!NOTE] Python(NumPy や PyTorch 等)では、行列の積を
@演算子で計算できます。
要素を使った計算
\[\begin{pmatrix} x_{1} & x_{2} \end{pmatrix} \cdot \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} = \begin{pmatrix} x_1 a_{11} + x_2 a_{21} & x_1 a_{12} + x_2 a_{22} \end{pmatrix}\]コサイン類似度を使った計算
\[\begin{pmatrix} x_{1} & x_{2} \end{pmatrix} \cdot \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} = \begin{pmatrix} \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{a}_1 \rVert \cos\theta_1 & \lVert \boldsymbol{x} \rVert \lVert \boldsymbol{a}_2 \rVert \cos\theta_2 \end{pmatrix}\]$\text{(※ } \boldsymbol{a}_1 \text{ は行列 } A \text{ の 1列目のベクトル、} \boldsymbol{a}_2 \text{ は 2列目のベクトル)}$
転置行列
\[\begin{aligned} A = \begin{bmatrix} \\ a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{bmatrix} \hspace{20px} A^T = \begin{bmatrix} a_{11} & a_{21} \\ a_{12} & a_{22} \\ a_{13} & a_{23} \end{bmatrix} \end{aligned}\]逆行列
$A$ を正方行列、$I$ を単位行列とします。 以下を満たす行列を $A$ の逆行列行列とよび $A^{-1}$ と表記します。
\[A A^{-1} = A^{-1} A = I\]