機械学習関係の論文を読み書きするための数式・記号まとめ

# 機械学習でよく使われる数式・記号
　機械学習・ディープラーニングの分野の論文で使われる数式・記号の自分用メモです。誰かの役にたつかもしれないのでまとめておきます。理系の大学の学部生や、数学全然使わなくなった社会人くらいを想定して書いています（自分は数学全然使わなくなった社会人です）。

　数式のTeX表記も記載しています。Qiitaで数式書くときや、論文を書くときに使えます（私は論文書く予定ないですが…）。Qiitaで数式を書く方法に関しては、以下の記事を参考にして下さい（この記事では解説しません）。

- [Qiitaの数式チートシート](https://qiita.com/PlanetMeron/items/63ac58898541cbe81ada)
- [Qiitaで数式を書きましょう](https://qiita.com/nanbuwks/items/2db2bab1d376e688ef0c)

　TeX表記は、Qiitaに登録していれば、編集リクエストで見ること可能なのですが、Qiitaに登録していない人に向けて書いてあります。Qiitaに登録すれば編集リクエスト機能により、Qiita記事の数式のTeXソース見放題なので登録しておくのがオススメです。

　当方専門家ではありません。間違い、勘違いなど多々あると思います。間違いの指摘や、修正リクエスト等歓迎いたします。

```math
\newcommand{\argmax}{\mathop{\rm arg~max}\limits}
\newcommand{\argmin}{\mathop{\rm arg~min}\limits}
```

```math
```

## 内積
### 意味・使用例
　ベクトルの内積の公式は以下です。

```math
\boldsymbol{a} \cdot \boldsymbol{b} = \|{\boldsymbol{a}}\|\|{\boldsymbol{b}}\|\ \cos\theta
```

　内積は、機械学習のみならず、自然言語処理・画像処理など様々な分野に出てくる非常に重要な概念です。

　詳細は、深すぎるのでこの記事では解説しません。イメージ的には以下記事が分かりやすいです。

[【数学】「内積」の意味をグラフィカルに理解すると色々見えてくる その１](https://qiita.com/kenmatsu4/items/a144047c1b49aa8c7eb0)

　書籍だと[プログラミングのための線形代数](https://amzn.to/2OTYCjy)が良かった記憶があります。

### コード例
　内積は以下のように`a @ b`といったように'@'で計算できます。`np.dot(a, b)`でも同じ計算ができますが、`@`の方がスマートですね。古いNumpyで`@`が使えないときは`np.dot`を使いましょう（可能ならNumpyをバージョンアップしましょう）。

```python
a = np.array([1, 2])
b = np.array([3, 4])
a @ b
```

　結果は以下です。

```
11
```

### TeX表記

```
\boldsymbol{A} \cdot \boldsymbol{B} = \|{\boldsymbol{A}}\|\|{\boldsymbol{B}}\|\ \cos\theta
```

### 参考リンク

- [Qiitaでの数式記述のベクトル表記](https://qiita.com/mu-777/items/13e0481f149e9cbba3ce)


## arg max, arg min
### 意味・使用例
　以下ページが分かりやすいです。
[argmax,argminの意味と例](https://mathtrain.jp/argmax)

　機械学習では、例えば単回帰分析で、最小二乗法で解を求める式に使われます。以下は単回帰の解を最小二乗法で求める場合の式です。

```math
\hat{w_0}, \hat{w_1} = \argmin_{w_0, w_1} \sum_{i=1}^{n} (y_i - w_0 - w_1 x_i)^2
```

　解のハット記号に関しては、このページのハットの項目を参照下さい。単回帰分析に関しては、以下記事参照下さい。

[Pythonで基礎から機械学習 「単回帰分析」](https://qiita.com/karaage0703/items/701367b6c926552fe505)

### コード例
　Numpyの`argmax`関数で、リストのうち一番大きい数が何番目にあるかを求めることができます。

```python
import numpy as np
array = [10, 20, 100, 50, 30]
np.argmax(array)
```

 結果は、以下の通りです。3番目の100が大きいので2が返ってきます（0から数えるので、3番目は2になります）。最大値が2つあった場合は、リストの先頭のものが選択されます。

```
2
```

 `argmin`関数で$\argmin$も求められます。以下を実行すると、`array`の0番目の10が一番小さい値なので`0`が得られます。

```python
np.argmax(array)
```

### TeX表記
　自分で定義する必要があるそうです。Qiitaの場合は、記事の最初に以下のように定義しておくと、以降は` $\argmax$`と書くと$\argmax$と表示されます。

```
\newcommand{\argmax}{\mathop{\rm arg~max}\limits}
\newcommand{\argmin}{\mathop{\rm arg~min}\limits}
```

### 参考リンク
- [Pythonでargmax関数を使う方法【初心者向け】](https://techacademy.jp/magazine/18774)
- [統計的方法における最適化問題](http://www.orsj.or.jp/archive2/or60-12/or60_12_714.pdf)


## 平均値 バー・ミュー
### 意味・使用例
　平均を表します。特に統計の分野では$\bar{x}$（エックスバー）は標本の平均値、$\mu$（ミュー）は母集団の平均値を意味するようです。


### コード例
　以下のコードで計算できます。

```python
import numpy as np
array = [1, 2, 3, 4, 5]
np.mean(array)
```

　結果は以下です。

```
3.0
```


### TeX表記

```math
\bar{x}, \mu
```

```
\bar{x}, \mu
```

### 参考リンク

- [平均を表す記号μとxバーの使い分け](https://toukeigaku-jouhou.info/2018/04/15/mean-symbol/)

## 推定値 ハット
### 意味・使用例
　統計では、真の値と区別するため推定値という言葉を使い、以下のようにハットをつけて区別します。

```math
\hat{w_0}, \hat{w_1}
```

　上のarg max, arg minのところで出てきた、単回帰の解を最小二乗法で求めるときの解にハットが付いているのは推定値であることを示しています。

　これは、単回帰の解は母集団でなく、母集団から取り出した標本（サンプル）から求めているため、母集団から求めた真の値と区別するためにハットをつけてあります。

　その他、統計では推定量、不偏推定量という概念もあるのですが、まだ説明できるほど理解できていないです。参考リンクに、参考になりそうな記事を貼りましたので参照下さい。
　

### TEX表記

```
\hat{w_0}, \hat{w_1}
```


### 参考リンク
- [最小二乗法②統計学的性質](http://www2.toyo.ac.jp/~mihira/keizaitoukei2014/ols2.pdf)
- [不偏推定量](https://physnotes.jp/stat/unb_est/)
- [【初心者向け】推定値と推定量、真の値の区別は統計を勉強する上で重要です](https://www.bananarian.net/entry/2018/08/29/131243)
- [点推定](http://www.math.s.chiba-u.ac.jp/~yasuda/statB/toukei6.pdf)
- [基礎からイメージで学ぶ統計学~平均二乗誤差編~](https://www.bananarian.net/entry/2018/10/09/183000)

## 総乗記号 パイ


### 参考リンク

- [総乗記号Πの使い方](http://indoctus2.blogspot.com/2015/03/blog-post_48.html)

## セットマイナス

$\setminus$

### TeX表記

```
\setminus
```

## 転置記号
### 意味・使用例
　転置行列に使われる記号です。転置行列とは、m行n列の行列に対して(i, j) 要素と (j, i) 要素を入れ替えたn行m列の行列です。

　また、ベクトルの内積は、転置記号を使って以下のようにも書けます。

```math
\boldsymbol{a}^\top\boldsymbol{b}
```

### TeX表記
```
\boldsymbol{a}^\top\boldsymbol{b}
```


### 参考リンク
[転置行列 ～ 公式と性質 ～](https://risalc.info/src/transpose-matrix-properties.html)

## Lpノルム
### 意味・使用例
　ベクトル$\boldsymbol{x}$をn次元 $x = (x_1,\cdots,x_n)$としたとき、その時$L^p$ノルムは次のように定義されます。

```math
\|\boldsymbol{x}\|_p = \sqrt[p]{|x_1|^p+|x_2|^p+\cdots+|x_n|^p}
```

　$L^p$ノルムは、大きさを一般化したもので、$L^1$ノルムは、マンハッタン距離で、$L^2$ノルムは、ユークリッド距離を表します。詳細は、参考リンクを参照下さい。


### Tex表記
```
\|\boldsymbol{x}\|_p = \sqrt[p]{|x_1|^p+|x_2|^p+\cdots+|x_n|^p}
```

### 参考リンク

- [【機械学習】LPノルムってなんだっけ？](https://qiita.com/kenmatsu4/items/cecb466437da33df2870)
- [RでL1 / L2正則化を実践する](https://tjo.hatenablog.com/entry/2015/03/03/190000)
- [【機械学習】ノルムの定義について理解しようと努める。](https://qiita.com/sakabe/items/59ca145b3a5017eadf11)
- [関数の内積とノルムの定義を総ざらい！意外に重要な単元！](https://univ-study.net/inner-product-norm/)

## ターンエー

## dom


# まとめ
　まだ作成途中のメモ書きですが、自分のために公開します。随時追記中です。「こんなのあるよ」とか教えていただけましたら調べて追記いたします。

　機械学習勉強中で、学んだことを以下ページにまとめています。初学者の方は、何かの参考にしていただけましたら幸いです。誤り・不足事項などありましたら、編集リクエストやコメントいただけましたら幸いです。

https://karaage.hatenadiary.jp/machine-learning-study

# 参考リンク
- [明日役に立たないLaTeXの数式](https://qiita.com/izmktr/items/35d5f2a502f0a37ed120)
- http://web.sfc.keio.ac.jp/~mukai/modular/notation.pdf
- [【Python】専門書や論文を読みたいけど数学が苦手・わからない人向けのコードを読んで学ぶ数学教本](https://qiita.com/PHVTuber/items/94577f506e78852180ca)

# 関連記事
[Qiita記事投稿のドキュメンテーションテクニック](https://qiita.com/karaage0703/items/888bfded98a4c1860949)

# 変更履歴
- 2020/08/09 関連記事追記