Featured image of post 行列の計算について備忘録

行列の計算について備忘録

目次

概要

あるコードのコサイン類似度の計算について疑問に思ったので備忘録もかねてメモ

実際のコード

間違ったコード

1
2
3
4
5
6
7
8
import numpy as np

vectors = np.array([[1, 2, 3], [1, 2.5, 3]])
norms = np.linalg.norm(vectors, axis=1)
numer = np.dot(vectors, vectors.T) 
denom = np.linalg.norm(vectors, axis=1) ** 2
cosine_similarities = numer / denom
print(cosine_similarities)

結果

1
2
3
4
[
  [1, 0.92307692],
  [1.07142857, 1]
]

正しいコード

1
2
3
4
5
6
7
8
import numpy as np

vectors = np.array([[1, 2, 3], [1, 2.5, 3]])
norms = np.linalg.norm(vectors, axis=1)
numer = np.dot(vectors, vectors.T) 
denom = np.outer(norms, norms)
cosine_similarities = numer / denom
print(cosine_similarities)

結果

1
2
3
4
[
  [1, 0.98974332],
  [0.98974332, 1]
]

記法

ベクトルは縦(列)が基本。好みにもよるが、次の書き方をする。

  • 太字記法(Bold Notation)
    • $\mathbf{v} = \begin{bmatrix} v_1 \\\\ v_2 \\\\ \vdots \\\\ v_n \end{bmatrix}$
  • 矢印記法(Arrow Notation)
    • $\vec{v} = \begin{bmatrix} v_1 \\ v_2 \\ \dots \\ v_n \end{bmatrix}$

内積 (dot product)と外積(cross product)

内積と外積の戻り値

用語意味
内積2本のベクトルに対してスカラーを対応させる演算
外積2本のベクトルに対してベクトルを対応させる演算

幾何学的意味

用語意味
内積$\|\overrightarrow{a}\|\|\overrightarrow{b}\|\cos\theta$の大きさを持つスカラ値
外積長さが$\|\overrightarrow{a}\|\|\overrightarrow{b}\|\sin\theta$で、$\vec{a}$と$\vec{b}$に垂直なベクトルのこと
  • ただし、$\theta$はベクトルaとbのなす角
  • cosは横/斜めなので、$\|\overrightarrow{a}\|\|\cos\theta$ は$\|\overrightarrow{b}\|$方向の正射影のベクトルを意味する

代数的意味

用語意味
内積$\vec{\ a\ }\cdot\vec{\ b\ }=a_1b_1+a_2b_2$のスカラ値
外積$\vec{a} \times \vec{b} = (a_yb_z-a_zb_y,a_zb_x-a_xb_z,a_xb_y-a_yb_x)$ という成分で表されるベクトル

大きさの意味

用語意味
内積$\vec{a}$の正射影と$\vec{b}$の積の大きさ
外積$\vec{a}$と$\vec{b}$のなす平行四辺形の積の長さを持つベクトル

記号的な違い

用語記号1記号2記号3
内積$\langle \textbf{a}, \textbf{b} \rangle$$\vec{a} \cdot \vec{b}$$\textbf{a}^{T} \textbf{b}$
外積$[\textbf{a}, \textbf{b}]$$\vec{a} \times \vec{b}$$\textbf{a}\textbf{b} ^{T}$(※これは外積ではなく直積(outer product)なので注意)

行列の積

演算日本語英語
$AB$行列の積matrix product / Matrix multiplication
$\mathbf{a} \cdot \mathbf{b}$内積, スカラー積(ドット積)dot product, inner product
$\mathbf{a} \times \mathbf{b}$外積, ベクトル積(クロス積)cross product
$\mathbf{a} \otimes \mathbf{b}$直積, テンソル積outer product
$\mathbf{a} \wedge \mathbf{b}$楔積, ウェッジ積wedge product
$\mathbf{A} \otimes \mathbf{b}$クロネッカー積kronecker product
$\mathbf{a} \odot \mathbf{b}$要素ごとの積、アダマール積/シューア積Hadamard product/Schur product / element-wise product
$\mathbf{a} \cdot (\mathbf{b} \times \mathbf{c})$スカラー三重積scalar triple product
$\mathbf{A} : \mathbf{B}$フロベニウス積, フロベニウス内積Frobenius inner product

NOTE:

  • クロネッカー積と直積のオペレーターは同じ
    • オペランド:
      • クロネッカー積の場合は左オペランドは行列
      • 直積の場合はベクトル
  • 外積≠outer productなので注意!
    • numpyでも次の関係
      • 外積: np.cross
      • 直積: np.outer
  • 行列の積
    • 行列の積は結果の対応する要素の内積
      • 左のオペランドの行と右のオペランドの列の要素の積の総和をとるもの
    • numpy.dotでも引数が行列だと行列の積になる

内積

$$ inner\ product:\ {\bf a}\cdot {\bf b} $$

$$ \hspace{50px}{\bf a}\cdot {\bf b}=\displaystyle \sum_{i=1}^{n}a_i b_i $$

外積

$$ cross\ product:\{\bf a}\times {\bf b}\\\\ $$$$ \mathbf{a} \times \mathbf{b} = \begin{pmatrix} a_1 \\\\ a_2 \\\\ a_3 \\\\ \end{pmatrix} \times \begin{pmatrix} b_1 \\\\ b_2 \\\\ b_3 \\\\ \end{pmatrix} = \begin{pmatrix} a_2 b_3 - a_3 b_2 \\\\ a_3 b_1 - a_1 b_3 \\\\ a_1 b_2 - a_2 b_1 \\\\ \end{pmatrix} $$

直積(テンソル積)

$$ {\left(\begin{matrix}a\\\\ b\\\\ c\end{matrix}\right)\otimes\left(\begin{matrix}d\\\\ e\\\\ f\end{matrix}\right) \\\\ =\left(\begin{matrix}a\otimes\left(\begin{matrix}d\\\\ e\\\\ f\end{matrix}\right)\\\\ b\otimes\left(\begin{matrix}d\\\\ e\\\\ f\end{matrix}\right)\\\\ c\otimes\left(\begin{matrix}d\\\\ e\\\\ f\end{matrix}\right)\end{matrix}\right) \\\\ =\left(\begin{matrix}ad&ae&af\\\\ bd&be&bf\\\\ cd&ce&cf\end{matrix}\right)} $$

テンソル積を使わない場合

$$ {\begin{align} \left(\begin{matrix}a\\\\ b\\\\ c\end{matrix}\right)\left(\begin{matrix}d&e&f\end{matrix}\right) =\left(\begin{matrix}a\left(\begin{matrix}d&e&f\end{matrix}\right)\\\\ b\left(\begin{matrix}d&e&f\end{matrix}\right)\\\\ c\left(\begin{matrix}d&e&f\end{matrix}\right)\end{matrix}\right) &=\left(\begin{matrix}ad&ae&af\\\\ bd&be&bf\\\\ cd&ce&cf\end{matrix}\right) \end{align} } $$

※右オペランドは横行列

ウェッジ積

$$ \vec{a}\wedge\vec{b}:=\vec{a}\otimes\vec{b}-\vec{b}\otimes\vec{a} $$

つまりは、オペランドを反転した2つのテンソル積の差

クロネッカー積

$A$は$m \times n$の行列で、$A$の$ij$成分を $Aij$とすると、

$$ A\otimes B=\begin{pmatrix} A_{11}B&A_{12}B&\cdots&A_{1n}B\\\\ A_{21}B&A_{22}B&\cdots&A_{2n}B\\\\ \vdots&\vdots&\ddots&\vdots\\\\ A_{m1}B&A_{m2}B&\cdots&A_{mn}B \end{pmatrix} $$

例)

$$ A=\begin{pmatrix}1&2\\\\ 3&4\end{pmatrix} $$

$$ B=\begin{pmatrix}5&6\end{pmatrix} \\\\ A\otimes B=\begin{pmatrix}5&6&10&12\\\\ 15&18&20&24\end{pmatrix} $$

アダマール積

$$ \left({\begin{array}{cc} \\\\ a_{11}&a_{12}\\\\ a_{21}&a_{22}\\\\ a_{31}&a_{32}\\\\ \end{array}}\right) \odot \left({\begin{array}{cc} b_{11}&b_{12}\\\\ b_{21}&b_{22}\\\\ b_{31}&b_{32} \\\\ \end{array}}\right) = \left({\begin{array}{cc} a_{11}\,b_{11}&a_{12}\,b_{12}\\\\ a _{21}\,b _{21}&a _{22}\,b _{22}\\\\ a _{31}\,b _{31}&a _{32}\,b _{32} \\\\ \end{array}}\right) $$

ノルム(norm)

長さの概念を一般化したもの

$n$次元ベクトル$\vec{x}=(x_1,x_2,⋯,x_n)$ および $1≤p<∞$ なる$p$に対して $\vec{x}$ の $L^p$ ノルムと言い,$\|\|\vec{x}\|\|_p$と書く。

$$ \sqrt[p]{|x_1|^p+|x_2|^p+\cdots +|x_n|^p} = (\|\vec{x}\|^{p})^{\frac{1}{p}} = \|\|\vec{x}\|\|_{p} $$

ノルムは2本パイプで囲うので注意

ノルム
ユークリッドノルム(絶対値)$\|x\|$
ノルム$\|\|x\|\|_{p}$

ノルムの呼び名

ノルム
L1(マンハッタン距離)$\|x_1\|+\|x_2\|+\cdots +\|x_n\|$
L2(ユークリッド距離距離)$\sqrt{x_1^2+x_2^2+\cdots +x_n^2}$

マンハッタン郷里では、図中の赤も青も緑も同じ値となる

ノルムの例

NOTE: 等高線なので値の大きさを表している。なので、色が重要

L1ノルム

$$ {\| {\bf x} \|_1 = |x_1| + |x_2| } $$

L1ノルム

L2ノルム

$$ {\| {\bf x} \|_2 = \sqrt{|x_1|^2 + |x_2|^2} } $$

L2ノルム

単位円

二次元ベクトルに対してノルムが1になる時の単位円を図示すると、

$$ \|\|\overrightarrow{x}\|\|_p=1 $$

単位円

軸に張り付いていない場合は、pが大きくなるほど、ノルムが小さくなる。

$$ \vec{x} = \\{2, 2\\} \\\\ \|\|\vec{x}\|\|_1 = 2 + 2 = 4 \\\\ \|\|\vec{x}\|\|_2 = \sqrt{2^2 + 2^2} = \sqrt{8} \sim 2.828 \\\\ \|\|\vec{x}\|\|_3 = {2^3 + 2^3}^{1/3} = {16}^{1/3} \sim 2.519 \\\\ $$

軸に張り付いている場合は、ノルムは値になる。

$$ \vec{x_2} = \\{3, 0\\} \\\\ \|\|\vec{x_2}\|\|_1 = 3 + 0 = 3 \\\\ \|\|\vec{x_2}\|\|_2 = \sqrt{3^2 + 0^2} = \sqrt{9} = 3 \\\\ \|\|\vec{x_3}\|\|_2 = (3^3 + 0^3)^{1/3} = 27^{1/3} = 3 \\\\ $$

ユークリッド距離

ユークリッド距離=原点を平均とする二乗和平方根の事。

$$ \|\|\vec{x}\|\|_2 = \\\\ \sqrt{(x_1 - 0)^2+(x_2 - 0)^2+\cdots +(x_n - 0)^2} $$

分散(二乗平均平方根)が平均偏差(絶対偏差)と比べて優れている点は、分散はベクトルの距離を示しているため。

トレース

ある正方行列Aに対して、対角成分の和をAのトレース(tr A)という

$$ A=\begin{pmatrix}2&4\\\\-1&3\end{pmatrix} \\\\ tr A = 5 $$

次元

線形空間$V$の基底を構成するベクトルの個数のことをいい、次のように表現する。

$$ dim V $$

例えば、xy平面は「x軸ベクトル&y軸ベクトル」の2つのベクトルで基底をなすので、次元は2となる。

コサイン類似度(Cosine similarity)

二つのベクトル $\vec{a}=(a_1,a_2,⋯,a_n)$ と $\vec{b}=(b_1,b_2,⋯,b_n)$ に対して、次をコサイン類似度という。

$$ \dfrac{a_1b_1+\cdots +a_nb_n}{\sqrt{a_1^2+\cdots +a_n^2}\sqrt{b_1^2+\cdots +b_n^2}} $$
  • コサイン類似度=2つのベクトルのなす角のコサイン
  • 値域は[0,1]
  • 直角の場合は0

分子は内積、分母はベクトルの絶対値の積なので、2つのベクトルの$cos \theta$を求めることに等しい

$$ \dfrac{a_1b_1+\cdots +a_nb_n}{\sqrt{a_1^2+\cdots +a_n^2}\sqrt{b_1^2+\cdots +b_n^2}} = \frac{\langle \vec{a}, \vec{b} \rangle}{|\vec{a}||\vec{b}|} = \frac{|\vec{a}||\vec{b}| cos \theta }{|\vec{a}||\vec{b}|} = cos \theta $$

行列式

ある行列Aについて

$$ A=\left( \begin{array}{cc} a_{11} & a_{12} \\\\ a_{21} & a_{22} \\\\ \end{array} \right) $$

行列式Aは

$$ det A = |A|=a_{11}a_{22}-a_{12}a_{21} $$

単位行列は

$$ det I = \|I\| = 1 $$

行列式のやりかた

方法制約
サラスの方法(Sarrus’ rule)3次元までOK
余因子展開(cofactor expansion)4次元以上もOK

ランク

ランク(階数,rank)は任意の行列に対して定義された量
いくつかの意味を持つ

  1. Aの正則(行列式が0でない)な小行列でサイズが最大なもののサイズ
    • つまり、ある行列Aの小行列で、最もサイズが大きいもののサイズ
  2. Aの一次独立な行ベクトルの最大本数
  3. Aの一次独立な列ベクトルの最大本数
  4. 階段行列にしたときに 0でない成分が残る行の数
  5. ランク標準形にしたときに 1 が並ぶ数
  6. Aの像の次元
  7. Aの0でない特異値の数($AA^{⊤}$ の0でない固有値の数)

フルランク

ある$m \times n$の行列で、次の条件が当てはまるとき、フルランクと呼ぶ。

$$ rank(A) = min(m, n) $$

核(Kernel)と像(Image)

ある線形写像$F: U \rightarrow V$に置いて、次のように定義された部分集合

  • $ker(F) = \\{u ∈ U | F(u) = 0\\} ⊂ U$
  • $im(F) = \\{F(u) | u ∈ U\\} ⊂ V$

※ ⊂は部分集合、 ∈は要素記号

カーネル

  • カーネルはゼロベクトルにつぶれてしまう、写る前の集合(U)の部分集合のこと。
    • つまり、ゼロベクトルに潰れてしまう元を寄せ集めたもの
    • 「0以外のものも0に写る」場合,それは「この写像は単射ではない」ということになる。
      • なぜなら、0を出力するための入力値が複数あるので,入力と出力が1対1対応ではなくなるため。
  • カーネルが 0 以外の要素を含めば
    • 「単射ではない」「ランク落ちしている」「行列式は 0 」などの有用な結論を引き出せる。
  • カーネルは「単射からのずれ具合」

固有値問題について

  • 固有値問題は「カーネルを求める作業」。
  • 行列式を0とおく理由は,カーネルに0以外の要素が含まれるから
  • 行列Aに関する固有値問題は,$(A-λE)=0$と書くことができ,
  • この式は「ある写像の結果,入力xがゼロに写る」という関係を表す。

イメージ

  • Im は「出力の取りうる幅」のこと。写した後の集合(V)の部分集合。
  • rankの実体
  • それに対し,Im は「出力の取りうる幅」のこと。
  • 入力ではなく,出力に注目した情報である。
  • $y = A x$ で,出力 y が取りうる領域のこと。
$$ \mathrm{rank\:A}=\dim (\mathrm{Im} \:A) $$

次元定理

m x n の行列Aに置いて、つぎの式が成り立つこと

$$ \mathrm{rank}\:A+\dim (\mathrm{Ker}\:A)=n $$

行列の種類

本当はもっと色々あるが、分かりやすいのは以下。

Type of Matrix

REFERENCES

Built with Hugo
テーマ StackJimmy によって設計されています。