数学・統計学

内積

内積とは

内積(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}
\]

画像処理、音声処理、自然言語処理におけるマスキング(フィルタリング)などで、アダマール積がよく用いられます。

脚注

脚注
1 行列積の定義に従い、\(1 \times n\) 行列と \(n \times 1\) 行列の積が、行ベクトルと列ベクトルの積に対応します。
2 アダマール積という名前から、難しい演算をイメージしがちですが、対応する成分同士を掛け合わせるという、いたって単純な演算です。
3 行列についても同じように、アダマール積を定義することが可能です。行列のアダマール積は、行列を返します。
4 アダマール積の表記方法として、\(\mathbf{a} \odot \mathbf{b}\) もよく用いられます。
タイトルとURLをコピーしました