コラム：平均は機械学習！？

([目次はこちら](http://qiita.com/kumonkumon/items/6fd05963df92e9eec8c0))

# はじめに
ニューラルネットワークやディープラーニングについて書いてきたが、機械学習について、ちょっとどうでもいい話を。

# 機械学習とは？

[wikipedia](https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92)
> 機械学習（きかいがくしゅう、英: machine learning）とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。

よくわからない。。。

過去の経験にもとづいて、コンピュータがなんらかの意思決定（判別、予測など）をするってことと理解しています。

# どこからが機械学習？
ニューラルネットワークとか、サポートベクターマシンとか、その他いろいろは、誰もが認める機械学習でしょう。

## 何をやったら「機械学習始めました」って言える？
「**平均**」って答えてますw

> 過去の経験にもとづいて、コンピュータがなんらかの意思決定（判別、予測など）をするってこと

という理解なので、平均値を判別や予測に使ったら機械学習って言ってもいいんじゃないかと。
まぁ、平均値は統計量って鼻で笑われるし、たまに相手にされないけど。。。

## 根拠（平均が機械学習にみえてくるといいな）

$D$ 次元の0/1の数値列が、$N$ 個あるとする。例えば、[以前書いた記事](http://qiita.com/kumonkumon/items/53e3121e7031b9402205)でも使っているMNISTを0/1にしたものなんかを想像してもらえればいいかと。
MNISTは、28 x 28ピクセルなので、784次元の数値列になる。

```math
0000000000000000000000000000\\
0000000000000000000000000000\\
0000000000000000000000000000\\
0000000000000000000000000000\\
0000000000000000000000000000\\
0000000000000000000011100000\\
0000110000000000000011100000\\
0000110000000000000111100000\\
0000110000000000000111000000\\
0000110000000000000111000000\\
0001110000000000000111000000\\
0001110000000000001111000000\\
0001110000000000001111000000\\
0001110000000001111110000000\\
0001110001111111111110000000\\
0001111111111111111100000000\\
0000111111110000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000011100000000\\
0000000000000000111000000000\\
0000000000000000000000000000\\
0000000000000000000000000000\\
0000000000000000000000000000\\
```
みたいな。
こういうのが、$N$ 個あって、これらを使って手元にはないデータ（画像）を生成するなんてことは、機械学習って認めてもらえそう。

## 数式で表現
(数式アレルギーの人ごめんなさい。)

$i$ 番目の数値が1になる確率を、$\mu_i$とすると
$n$ 番目のデータの $i$ 番目の数値 $x_{ni}$ が得られる確率 $p(x_{ni})$ は、

```math
\begin{align}
p(x_{ni}=1) &= \mu_i\\
p(x_{ni}=0) &= 1 - \mu_i
\end{align}
```

と表現でき、これらは以下のようにまとめられて、

```math
p(x_{ni}) = \mu_i^{x_{ni}}(1-\mu_i)^{(1-x_{ni})}
```
となる。ベルヌーイ分布ってやつ。
（よくわからなければ、$x_{ni}$ に0/1を代入すれば、上の2つの表現になることが確認できる。）

で、*n* 番目のデータと同じものが得られる確率は、

```math
P_n = \prod_i^D p(x_{ni})
```

したがって、$N$ 個のデータ集合と同じものが得られる確率は、$\prod_n^N P_n$ となる。
で、$\mu_i$ って与えられるものじゃないので、求めないといけないんだけど、
データ集合をよく表現した $\mu_i$ を求めることで、もっているデータによく似たデータを無限に生成できるようになる。機械学習っぽい響き。

> データ集合をよく表現した $\mu_i$ 

は、

> $N$ 個のデータ集合と同じものが得られる確率は、$\prod_n^N P_n$

を最大化するようにして算出すればいいので。

```math
\prod_n^N P_n = \prod_n^N \prod_i^D p(x_{ni}) = \prod_n^N \prod_i^D \mu_i^{x_{ni}}(1-\mu_i)^{(1-x_{ni})}
```

の最大化となって、このままでは計算しにくいので、対数とって、

```math
\sum_n^N{\sum_i^D\bigl(x_{ni}\log{\mu_i} + (1-x_{ni})\log(1-\mu_i)\bigr)}
```

となって、これを $\mu_i$ で偏微分したときにゼロになればよいので、

```math
\begin{align}
\sum_n^N{\bigl(\frac{x_{ni}}{\mu_i} - \frac{1-x_{ni}}{1-\mu_i}\bigr)} &= 0\\
\sum_n^N{\bigl(\frac{x_{ni} - \mu_i}{\mu_i(1-\mu_i)}\bigr)} &= 0 \\
\sum_n^N{x_{ni}} - \sum_n^N{\mu_i} &= 0 \\
\mu_i &= \frac{1}{N} \sum_n^N{x_{ni}}
\end{align}
```

となる。
で、結果的に出てきた

```math
\mu_i = \frac{1}{N} \sum_n^N{x_{ni}}
```

って、$i$ 番目の数値の平均にほかならない。
要するに全データの平均が、各次元の1になる確率として得られている。

# まとめ
どこからが機械学習かについて書いてみました、
平均値が機械学習にみえてきましたか？