内積

ベクトル $\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\]