内積空間

ベクトルから1つの実数を作り出す内積は、直交や類似度によく出てくる演算です。
計算自体は簡単だけど、何を表しているのかが分からないという方も多いのではないでしょうか？

# 内積空間

内積はベクトル空間に「長さ」の概念を入れるための準備になる概念です。
簡単にするため、実数体 $\mathbb{R}$ 上のベクトル空間に対する話で進めますが、他の体上のベクトル空間でも同じように定義します。
次の内積が定義されているベクトル空間を、内積空間と言います。
└正確には、「内積（という関数）とベクトル空間（という集合）の組」を内積空間と言います。

## 内積の定義

実数体 $\mathbb{R}$ 上のベクトル空間 $V$ に対して、その元 $\boldsymbol{u}, \boldsymbol{v}$ に対して、実数 $\mathbb{R}$ を対応させる2変数関数 $\langle \boldsymbol{u}, \boldsymbol{v} \rangle$ が以下の4つの条件を満たすとき、その関数をベクトル空間 $V$ の内積と言います。
（表の中では $\boldsymbol{u},\boldsymbol{v},\boldsymbol{u'}^\forall \in V,a^\forall \in \mathbb{R}$ （u,v,wはVの元、aは実数）とします）
|番号|数式|説明|
|:-:|:--|:--|
|1|$\langle \boldsymbol{u} + \boldsymbol{u'}, \boldsymbol{v} \rangle = \langle \boldsymbol{u}, \boldsymbol{v} \rangle + \langle \boldsymbol{u'}, \boldsymbol{v} \rangle$|左側の要素は纏められる|
|2|$\langle a \boldsymbol{u}, \boldsymbol{v} \rangle = a \langle \boldsymbol{u}, \boldsymbol{v} \rangle$|左側の要素の実数倍は外に出すことが出来る|
|3|$\langle \boldsymbol{u}, \boldsymbol{v} \rangle = \langle \boldsymbol{v}, \boldsymbol{u} \rangle$|左右を入れ替えても値は変わらない|
|4|$\boldsymbol{u} \neq \boldsymbol{0} \Rightarrow \langle \boldsymbol{u}, \boldsymbol{u} \rangle > 0$|零ベクトル以外は、自分自身との計算結果は正の実数になる|

2変数関数なら $f(\boldsymbol{u}, \boldsymbol{v})$ のように関数名を書かないのか？と思うかもしれません。
もちろんそう書いてもOKです。数学では「こう書きます」と定義をしておけばどのように表記をしても良いというルールがあります。
その場その場でいろんな関数を作りたい場合は番号や名前を付けやすいように「関数名(引数)」とした方が都合が良いのですが、暗黙の了解で同じ処理をすることが共有できているような決まりきった演算であれば、特別な記号や表記方法で定義していることが多く、内積もその1つだと思っておけば良いと思います。
身近なところだと、足し算に使う + という演算も2変数関数ですが、 $add(x,y)$ と書かずに $x+y$ と書いているのと同じようなものです。

また、内積の表記方法ですが、 $(\boldsymbol{u}, \boldsymbol{v}), \boldsymbol{u} \cdot \boldsymbol{v}$ など表記をする方法が違う本や記事がありますが、このページでは $\langle \boldsymbol{u}, \boldsymbol{v} \rangle$ で表すことにします。
これも先ほどと同じように「こう書きます」と定義しておけばOKというのと同じ理由なので、気になる方はよしなに読み替えてください。

他の記事で見た定義と違ったり、教科書同士でも定義が違うことがあるのはなぜなのかだったり、「左の」という制約があるのはなぜかの話をしていきます。

### なぜ1,2の条件が「左側の要素」なのか

実数体上の話であれば、3の条件の「左右を入れ替えても同じ」というものがあるので、例えば2の条件なら左右を入れ替えて左に移動した実数倍を取り出してからもう一回入れ替える、という方法で右の要素も取り出せるように思います。
```math
\begin{eqnarray}
&&\langle \boldsymbol{u}, c\boldsymbol{v} \rangle\\
&=&\langle c\boldsymbol{v}, \boldsymbol{u} \rangle \quad\cdots\cdots 条件3\\
&=&c\langle \boldsymbol{v}, \boldsymbol{u} \rangle \quad\cdots\cdots 条件2\\
&=&c\langle \boldsymbol{u}, \boldsymbol{v} \rangle \quad\cdots\cdots 条件3
\end{eqnarray}
```
上のように正しいので、実数体上のベクトル空間の内積であれば定理として右側の要素も外に出せるという性質を使っても構いません。

ただ、複素数体上のベクトル空間の内積であれば、2変数関数の結果が複素数体になるので、3の条件が下のように変わります。
|番号|数式|説明|
|:-:|:--|:--|
|3|$\langle \boldsymbol{u}, \boldsymbol{v} \rangle = \overline{\langle \boldsymbol{v}, \boldsymbol{u} \rangle}$|左右を入れ替えると複素共役の値になる|

正確には実数体への定義でも複素共役になっているのですが、実数ならば複素共役の値が元々の値と同じになるため、分かりやすさのため実数体上の定義としては「変わらない」と記載しました。

この場合、先ほどの計算と同じことをすると以下のような結果になります。
```math
\begin{eqnarray}
&&\langle \boldsymbol{u}, c\boldsymbol{v} \rangle&\\
&=&\overline{\langle c\boldsymbol{v}, \boldsymbol{u} \rangle} \quad&\cdots\cdots 条件3\\
&=&\overline{c\langle \boldsymbol{v}, \boldsymbol{u} \rangle} \quad&\cdots\cdots 条件2\\
&=&\overline{c} \overline{\langle \boldsymbol{v}, \boldsymbol{u} \rangle} \quad&\cdots\cdots 複素数の計算の性質\\
&=&\bar{c} \overline{\overline{\langle \boldsymbol{u}, \boldsymbol{v} \rangle}} \quad&\cdots\cdots 条件3\\
&=&\bar{c} \langle \boldsymbol{u}, \boldsymbol{v} \rangle \quad&\cdots\cdots 複素数の計算の性質
\end{eqnarray}
```
右側にあった複素数倍は複素共役の値として出てきてしまったので「右側の要素の複素数倍は外に出すことが出来る」は間違いで「右側の要素の複素数倍は複素共役の値に変換して外に出すことが出来る」が正しいことになります。
ただ、これだとややこしい言い回しと式になってしまうので、分かりやすい「左側」のみを挙げています。

### 定義が違うときがあるのはなぜなのか

別の記事などでは以下の条件が定義に含まれて、この記事で書いている条件が外れていることがあります。
（表の中では $\boldsymbol{u},\boldsymbol{v},\boldsymbol{u'}^\forall \in V,a,b^\forall \in \mathbb{R}$ （u,v,wはVの元、a,bは実数）とします）
|番号|数式|説明|
|:-:|:--|:--|
|5|$\langle a \boldsymbol{u} + b \boldsymbol{u'}, \boldsymbol{v} \rangle = a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + b \langle \boldsymbol{u'}, \boldsymbol{v} \rangle$|左側の要素には線形性がある|
|6|$\langle \boldsymbol{u}, \boldsymbol{u} \rangle \geq 0$|自分自身との内積は実数になって非負になる|
|7|$\langle \boldsymbol{u}, \boldsymbol{u} \rangle = 0 \Leftrightarrow \boldsymbol{u} = \boldsymbol{0}$|自分自身との内積が0になるのは零ベクトルの場合だけ|

実は、5の条件は1,2の条件を1つの式にまとめたものになっています。
なので1,2が定義にあれば、5は証明できてしまうので定理として使うことが出来ます。

---

```math
\begin{eqnarray}
&&\langle a \boldsymbol{u} + b \boldsymbol{u'}, \boldsymbol{v} \rangle&\\
&=&\langle a \boldsymbol{u}, \boldsymbol{v} \rangle + \langle b \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 条件1\\
&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + \langle b \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 条件2\\
&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + b \langle \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 条件2
\end{eqnarray}
```

---

逆に5が定義にあれば、1,2は証明できてしまうので定理として使うことが出来ます。

---



条件1：$a=1,b=1$を条件5に代入すると
```math
\begin{eqnarray}
左辺&=&\langle 1 \boldsymbol{u} + 1 \boldsymbol{u'}, \boldsymbol{v} \rangle&\\
&=&\langle \boldsymbol{u} + 1 \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 1倍をしても値は変わらない\\
&=&\langle \boldsymbol{u} + \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 1倍をしても値は変わらない\\
右辺&=&1 \langle \boldsymbol{u}, \boldsymbol{v} \rangle + 1 \langle \boldsymbol{u'}, \boldsymbol{v} \rangle&\\
&=&\langle \boldsymbol{u}, \boldsymbol{v} \rangle + 1 \langle \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 1を実数にかけても値は変わらない\\
&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + \langle \boldsymbol{u'}, \boldsymbol{v} \rangle \quad&\cdots\cdots 1を実数にかけても値は変わらない
\end{eqnarray}
```
条件2：$b=0$を条件5に代入すると
```math
\begin{eqnarray}
左辺&=&\langle a \boldsymbol{u} + 0 \boldsymbol{u'}, \boldsymbol{v} \rangle&\\
&=&\langle a \boldsymbol{u} + \boldsymbol{0}, \boldsymbol{v} \rangle \quad&\cdots\cdots 0倍をすると零ベクトルになる\\
&=&\langle a \boldsymbol{u}, \boldsymbol{v} \rangle \quad&\cdots\cdots 零ベクトルを足しても値は変わらない\\
右辺&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + 0 \langle \boldsymbol{u'}, \boldsymbol{v} \rangle&\\
&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle + 0 \quad&\cdots\cdots 0を実数にかけたら0になる\\
&=&a \langle \boldsymbol{u}, \boldsymbol{v} \rangle \quad&\cdots\cdots 0を足しても値は変わらない
\end{eqnarray}
```

---

また、6,7の条件は1,4の条件があれば証明できます。

---

条件7の $\Leftarrow$ 側： $\boldsymbol{u} = \boldsymbol{0}$ として計算すると
```math
\begin{eqnarray}
&&\langle \boldsymbol{u}, \boldsymbol{u} \rangle&\\
&=& \langle \boldsymbol{0}, \boldsymbol{0} \rangle \quad&\cdots\cdots 代入\\
&=& \langle \boldsymbol{0}, \boldsymbol{0} \rangle + \langle \boldsymbol{0}, \boldsymbol{0} \rangle - \langle \boldsymbol{0}, \boldsymbol{0} \rangle \quad&\cdots\cdots 同じ実数同士の差は0\\
&=&\langle \boldsymbol{0} + \boldsymbol{0}, \boldsymbol{0} \rangle - \langle \boldsymbol{0}, \boldsymbol{0} \rangle \quad&\cdots\cdots 条件1\\
&=&\langle \boldsymbol{0}, \boldsymbol{0} \rangle - \langle \boldsymbol{0}, \boldsymbol{0} \rangle \quad&\cdots\cdots 零ベクトルは足しても値は変わらない\\
&=&0 \quad&\cdots\cdots 同じ実数同士の差は0
\end{eqnarray}
```
条件7の $\Rightarrow$ 側：条件4より $\boldsymbol{u} \neq \boldsymbol{0}$ の時は $\langle \boldsymbol{u}, \boldsymbol{u} \rangle \neq 0$ なので $\boldsymbol{u} = \boldsymbol{0}$ しかありえない。

条件6：条件7の $\Leftarrow$ 側と条件4を組み合わせる

---

逆に条件6,7があれば条件4が証明できます。

---

条件7の待遇をとって、$\boldsymbol{u} \neq \boldsymbol{0} \Leftrightarrow \langle \boldsymbol{u}, \boldsymbol{u} \rangle \neq 0$
$\boldsymbol{u} \neq \boldsymbol{0}$ ならば条件6の等号は成立しないので、 $\langle \boldsymbol{u}, \boldsymbol{u} \rangle > 0$ となる

---

そのため、3,4,5の3つの条件を定義とした場合や、1,2,3,6,7の条件を定義とした場合、3,5,6,7の条件を定義とした場合のどれをとっても結果的には同じ条件を持つものを定義することが出来ます。
後々の定理などには影響がないため流派がいくつかあるのですが、定義とした条件以外を定理としてみなして使えば十分なので、「この記事ではこの条件の組み合わせを使う派閥なんだな」ぐらいに思ってよいと思います。

## 内積のイメージ

積と書いてある通り、掛け算を一般化した概念になります。
実際に条件を掛け算の記号 $\times$ で書いてみると、自然と思える式になると思います。

（表の中では $p,p',q,a^\forall \in \mathbb{R}$ （p,p',q,aは実数）とします）
|番号|数式|
|:-:|:--|
|1|$(p+p') \times q=p \times q+p' \times q$|
|2|$(a \times p) \times q= a \times (p \times q)$|
|3|$p \times q=q \times p$|
|4|$p \neq 0 \Rightarrow p \times p > 0$|

掛け算とは、「単位量あたりの基準になる量 * その塊がいくつ分あるか = 合計数」ということを行っています。
「お皿1つあたり3個のりんごが乗っている * お皿は4つある = りんごは合計で12個ある」
「1分あたり80m進む速さで歩いている * 20分間のウォーキングをした = 合計で1600m歩いた」

基準が1つのみである場合は単純に掛け合わせるだけで良いのですが、基準が複数ある場合は単純に掛け合わせるという方法がうまく取れません。
その場合、重み付き和、という方法を掛け算のことだとみなすことで、「基準ごとに掛け算をした」「向きや形を揃えてから掛け算をした」ということを表しています。
※基準1つの時も $3 \times 4 =3+3+3+3=12$ と和の形式で最初は定義していたのと同じで、和が元になっています。
※「向き」「形」というのは各ベクトル空間で自然に受け取れる言葉に置き換えると良くて、例えば矢印で表される幾何学的ベクトルでは「基準ごとに」というよりも「同じ向きに進んだ長さを使って」というほうがしっくりきます。

重み付き和のイメージですが、例えばビュッフェ形式や八百屋での売り方のように、果物ごとにセットの数が違う場合で果物の数を数えたいときを考える例が単純だと思います。
「りんごはお皿1つあたり2個、みかんはお皿1つあたり3個、いちごはお皿1つあたり5個ずつ乗っている」
「りんごのお皿3個、みかんのお皿は4個、いちごのお皿は2個ある」
→「りんごは6個、みかんは12個、いちごは10個あるので、合計で果物は28個ある」
![果物.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3389082/449cb750-e974-2a2c-4d77-021c1c52c266.png)

果物の種類ごとにかけています。基準ごとにかけ合わせることで掛け算を定義したものと考えると良いのではないかと思います。

## 具体例

### 3次元数ベクトル

数ベクトルでは、同じ場所で定義した要素同士をかけ合わせてそれを足すという計算を内積とする方法が標準内積と呼ばれ、よく使われます。

```math
\left\langle \left(
\begin{array}{c}
a_1\\a_2\\a_3
\end{array}
\right) , \left(
\begin{array}{c}
b_1\\b_2\\b_3
\end{array}
\right) \right\rangle = a_1b_1+a_2b_2+a_3b_3
```
具体的な計算は以下のようになります。
```math
\left\langle \left(
\begin{array}{c}
1\\2\\3
\end{array}
\right) , \left(
\begin{array}{c}
4\\5\\6
\end{array}
\right) \right\rangle = 1*4+2*5+3*6=4+10+18=32
```

### 関数

$0 \leq x \leq 1$ の範囲で定義がされている連続関数を集めた集合 $F\[x\]$ でも同じ $x$ の時の結果同士の積の和を使いますが、和の部分は積分を用いて表します。

```math
\langle f(x),g(x) \rangle = \int _0^1 f(x)g(x) dx
```
具体的な計算は以下のようになります。
```math
f(x)=1+x, g(x)=2x\\
\langle 1+x,2x \rangle = \int _0^1 (1+x)*2x dx = \int _0^1(2x^2+2x)dx=\left[ \frac{2}{3}x^3+x^2 \right] _0^1=(\frac{2}{3}+1)-(0+0)=\frac{5}{3}
```
気になる方は内積の条件1~4を確かめてみてください。

### 数列

数列の場合は、2つの数列の一般項の積が0に収束しないと発散してしまいますが、以下のように定義されます。

```math
\langle \{ a_n \} , \{ b_n \} \rangle = \sum_{i=1}^\infty (a_ib_i)
```
具体的な計算は以下のようになります。
```math
a_n=2^n, b_n=3^{1-n}\\
\{ a_n \} : 2,4,8,16, \cdots\cdots\\
\{ b_n \} : 1,\frac{1}{3},\frac{1}{9},\frac{1}{27} \cdots\cdots\\
\langle \{ a_n \},\{ b_n \} \rangle = 2*1+4*\frac{1}{3}+8*\frac{1}{9}+16*\frac{1}{27}+\cdots\cdots\\
= \Sigma _{i=1}^\infty (2^n * 3^{1-n})\\
= \Sigma _{i=1}^\infty \left( 3* \left(\frac{2}{3} \right) ^n \right)\\
=3*\frac{1}{1-\frac{2}{3}}\\
=9
```
気になる方は内積の条件1~4を確かめてみてください。

## 最後に

内積はイメージのところで書いた通り、基準を揃えながら掛け算をしているという内容でした。

具体的にアルゴリズムとして出てくるような場所では、例えばコサイン類似度の仕組みの裏などもう少し先ですが、いたるところに実は内積だったというものがいます。
└基準となるベクトルの大きさを揃えておくことで、重み付き和ではなく加重平均とみなすことが出来て、比較したいベクトルを加重平均の結果で比較する

この辺りはノルムや距離につなげて、「大きさ」や「長さ」に紐づけていくことで世界が広がっていきます。
ベクトル空間よりも内積空間は制限がきついのでベクトル空間と比べて条件が増えてしまいましたが、ノルム空間や距離空間は内積空間よりも制限が緩いので既に内積が持っている性質の説明になっていきます。

### 参考文献

[【内積空間】 内積の定義・具体例と中線定理](https://mathlandscape.com/inner-product/)