目次
概要
あるコードのコサイン類似度の計算について疑問に思ったので備忘録もかねてメモ
実際のコード
間違ったコード
|
|
結果
|
|
正しいコード
|
|
結果
|
|
記法
ベクトルは縦(列)が基本。好みにもよるが、次の書き方をする。
- 太字記法(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でも次の関係
- 行列の積
- 行列の積は結果の対応する要素の内積
- 左のオペランドの行と右のオペランドの列の要素の積の総和をとるもの
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| } $$
L2ノルム
$$ {| {\bf x} |_2 = \sqrt{|x_1|^2 + |x_2|^2} } $$
単位円
二次元ベクトルに対してノルムが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)は任意の行列に対して定義された量
いくつかの意味を持つ
- Aの正則(行列式が0でない)な小行列でサイズが最大なもののサイズ
- つまり、ある行列Aの小行列で、最もサイズが大きいもののサイズ
- Aの一次独立な行ベクトルの最大本数
- Aの一次独立な列ベクトルの最大本数
- 階段行列にしたときに 0でない成分が残る行の数
- ランク標準形にしたときに 1 が並ぶ数
- Aの像の次元
- 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 $$
行列の種類
本当はもっと色々あるが、分かりやすいのは以下。
REFERENCES
- https://www.math.nagoya-u.ac.jp/~larsh/teaching/F2011_LA/lecture7.pdf
- 線型代数で像Imと核Kerの意味・イメージをわかりやすく説明。単射かどうか調べる道具で,固有値問題やランク落ちの記述に多用 - 勉強メモ (大学の講義動画や,資格試験の対策)
- 線形写像とは何か?ImやKer(像と核)についてもイラストで徹底解説!
- 次元定理の意味,具体例,証明 | 高校数学の美しい物語
- 行列のランク(rank)の8通りの同値な定義・性質 | 高校数学の美しい物語
- コサイン類似度 | 高校数学の美しい物語
- 【線形空間編】基底と次元と成分 | 大学1年生もバッチリ分かる線形代数入門
- 行列のトレースのいろいろな性質とその証明 | 高校数学の美しい物語
- ノルム - Wikipedia
- 平均偏差(絶対偏差)の意味と求め方
- 【機械学習】LPノルムってなんだっけ? #Python - Qiita
- 深層学習の非常に簡単な説明 | PPT
- ベクトルの内積、外積 - 高精度計算サイト
- 行列のクロネッカー積の定義といろいろな性質の証明 - 具体例で学ぶ数学
- アダマール演算子 (Hadamard operation) - 知識のサラダボウル
- 三重積 (ベクトル解析) - Wikipedia
- ベクトルの内積と外積の意味と嬉しさ | 高校数学の美しい物語