内積とは
内積(dot product)とは、2つのベクトルの掛け算に相当する演算です。内積はスカラーを返します。
成分による内積の定義(2次元)
\(\mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \end{pmatrix}\)、\(\mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \end{pmatrix}\) の内積は、次のように定義されます。
\[
\mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2
\]
例えば \(\mathbf{a} = \begin{pmatrix} 2 \\ 3 \end{pmatrix}\)、\(\mathbf{b} = \begin{pmatrix} 3 \\ 1 \end{pmatrix}\) の内積は、次のように計算されます。
\[
\mathbf{a} \cdot \mathbf{b} = 2 \times 3 + 3 \times 1 = 6 + 3 = 9
\]
成分による内積の定義(n次元)
\(\mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}\)、\(\mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{pmatrix}\) の内積は、次のように定義されます。
\[
\mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + \cdots + a_nb_n = \sum_{i=1}^{n} a_i b_i
\]
角度による内積の定義
ベクトル \(\mathbf{a}\)、\(\mathbf{b}\) のなす角を \(\theta\) とすると、内積を次のように定義することも可能です。
\[
\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos \theta
\]
内積と角度 \(\theta\) との間には、次のような関係があります。
内積 | 角度 \(\theta\) | ベクトルの関係 |
---|---|---|
\(\mathbf{a} \cdot \mathbf{b} > 0\) | 鋭角(0° 〜 90°) | 類似方向 |
\(\mathbf{a} \cdot \mathbf{b} < 0\) | 鈍角(90° 〜 180°) | 反対方向 |
\(\mathbf{a} \cdot \mathbf{b} = 0\) | 直角(90°) | 無関係 |
また単位ベクトル(正規化されたベクトル)同士の内積は、次のように計算できます。
\[
\hat{\mathbf{a}} \cdot \hat{\mathbf{b}} = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} = \frac{\|\mathbf{a}\| \|\mathbf{b}\| \cos \theta}{\|\mathbf{a}\| \|\mathbf{b}\|} = \cos \theta
\]
このようにして求められた \(\cos \theta\) を、コサイン類似度(cosine similarity)と呼びます。ベクトルの類似度を表す指標として、ベクトルの向きだけを考慮する場合に用いられます。
行ベクトルと列ベクトルによる内積の表現
内積は、行ベクトルと列ベクトルの積として表現することも可能です[1]行列積の定義に従い、\(1 \times n\) 行列と \(n \times 1\) 行列の積が、行ベクトルと列ベクトルの積に対応します。。例えば、列ベクトル \(\mathbf{a}\) と列ベクトル \(\mathbf{b}\) の内積は、行ベクトル \(\mathbf{a}^T\) と列ベクトル \(\mathbf{b}\) の積として、次のように表現できます。
- 2次元 $$
\mathbf{a}^T \mathbf{b} = \begin{pmatrix} a_1 & a_2 \end{pmatrix} \begin{pmatrix} b_1 \\ b_2 \end{pmatrix} = a_1 b_1 + a_2 b_2
$$ - n次元 $$
\mathbf{a}^T \mathbf{b} = \begin{pmatrix} a_1 & a_2 & \cdots & a_n \end{pmatrix} \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{pmatrix} = a_1b_1 + a_2b_2 + \cdots + a_nb_n = \sum_{i=1}^{n} a_i b_i
$$
アダマール積
アダマール積(Hadamard product)は、ベクトルの対応する成分同士を掛け合わせる演算です[2]アダマール積という名前から、難しい演算をイメージしがちですが、対応する成分同士を掛け合わせるという、いたって単純な演算です。。ベクトルのアダマール積は、ベクトルを返します[3]行列についても同じように、アダマール積を定義することが可能です。行列のアダマール積は、行列を返します。。
アダマール積の定義(2次元)
\(\mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \end{pmatrix}\)、\(\mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \end{pmatrix}\) のアダマール積は、次のように定義されます[4]アダマール積の表記方法として、\(\mathbf{a} \odot \mathbf{b}\) もよく用いられます。。
\[
\mathbf{a} \circ \mathbf{b} = \begin{pmatrix} a_1 b_1 \\ a_2 b_2 \end{pmatrix}
\]
例えば \(\mathbf{a} = \begin{pmatrix} 2 \\ 3 \end{pmatrix}\)、 \(\mathbf{b} = \begin{pmatrix} 3 \\ 1 \end{pmatrix}\) のアダマール積は、次のように計算されます。
\[
\mathbf{a} \circ \mathbf{b} = \begin{pmatrix} 2 \times 3 \\ 3 \times 1 \end{pmatrix} = \begin{pmatrix} 6 \\ 3 \end{pmatrix}
\]
アダマール積の定義(n次元)
\(\mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}\)、\(\mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{pmatrix}\) のアダマール積は、次のように定義されます。
\[
\mathbf{a} \circ \mathbf{b} = \begin{pmatrix} a_1 b_1 \\ a_2 b_2 \\ \vdots \\ a_n b_n \end{pmatrix}
\]
画像処理、音声処理、自然言語処理におけるマスキング(フィルタリング)などで、アダマール積がよく用いられます。