ベイズ深層学習-2.1線形回帰モデル


[ベイズ深層学習-個人ログ](https://qiita.com/tsukasa-forever/items/62fb48a9af1ef872367d)の最初の記事です。

この線形回帰は、機械学習や統計的なモデル中で最も簡単なモデルと言っていいと思います。
この簡単なモデルを使って、**誤差関数**や**過剰適合**などと言った、機械学習や統計学の基本的な課題や概念を学習してきます。

## 2.1.1 最小二乗法による学習

機械学習の場面では、同じデータに対して、複数回学習を行い、モデルを更新していきます。しかし今回は最小二乗法で一発でモデルを作成することができる解析的なアプローチで回帰モデルを作成しています。そこを把握して読み進めると少し楽かと思います。

入力値$x$に対して、ラベル$y$の関係を次のように数式で表します。


```math
y = {\bf w} ^T {\bf \phi} (x) + \epsilon
```

この時、$\phi (x)$を**特徴量関数**と言って、以下のように表し、特徴量関数の中の関数それぞれを**基底関数**と言います。($\phi_1$とか$\phi_2$とかのことですね)。

```math
\phi (x) = (\phi_1(x),\phi_2(x),\phi_3(x),\cdots,\phi_M(x))~T
```

特徴量関数、具体的に例を出すと、以下のようなのが例に挙げられます。

```math
\phi (x) = (x^2,x, 1)^T,　\phi (x) = (\sin(x),\cos(x), x)^T 
```


この特徴量関数は、モデルを求める際に、事前に定義するものです。特徴量関数っていうように、実数値である$x$から例えば$x^2$とか$\sin(x)$とかのような関数を使っていろんな特徴量を抽出しようとしています。

その特徴量に対して、線形的に重みつけして、出力をしていくわけですが、この重みが、${\bf w}^T$にあたります。


次に、入力 $X=\\{x_1,x_2,\cdots,x_N\\}$,ラベル $Y=\\{y_1,y_2,\cdots,y_N \\}$ が与えられた時に、${\bf w}^T$を学習していきます。例えば、1次間数で最も当てはまりの良い関数を求めるとした場合、$\phi(x) = (x,1)^T$, ${\bf w} = (w_1,w_0)^T$として求めます。
予測値とラベルの二乗誤差の合計をモデルとデータセットの距離を表す数値とすると、以下のように表せます。

```math
E(w) = \frac{1}{2}\Sigma\{y_n - {\bf w}\phi(x_n)\}^2
```

一般的にこのようなラベルとモデルの誤差を表すような関数を**誤差関数**と言って、$\bf w$を調整して、誤差関数を最小化することがモデルのフィッティングを意味します。　
これは今回の線形回帰のみならず、今後のニューラルネットワークなどの場面に関しても、誤差関数を小さくしていこうっていう風になっていきます。

今回は、2次関数の最小値を求める問題になっていくため、冒頭で言ったように解析的に求められます。
ここでは具体的な解析方法はここでは説明しません。(面倒なので)


## 2.1.2 基底関数の選択

2.1.1では、特徴量関数を1次関数を例にとして、考えていました。
例えば、ここで特徴量関数に3次関数をあつかったとします。
図2.1で1次関数を当てはめた時と3次関数を当てはめた時の結果が表されていますが、3時関数の方が表現力が上がっているのがわかります

```math
\phi (x) = (x^3,x^2,x,1)^T
```
## 2.1.3 過剰適合と正則化

2.1.2 で言ったように次数が上がればより複雑な関数を使えるので、モデルの表現力をあげることができます。
10次関数を特徴量関数に用いたのが、図2.2(a)です。図2.2(a)の下段では、$\bf w$の各値が表されていますが、$w_1,w_8,w_9,w_{10}$がかなり小さくて、使ってない基底関数があるのがわかります。
十分ではない学習データに対して、過剰に適合することを、過剰適合(overfitting)と言います。
過剰適合というのは、学習データに対して過剰に適応してしまっていることをテストデータとの乖離や感覚的に捉えることが多いと思いますが、
ここでは、「特徴を捉えていないパラメータが多くあること」が線形回帰での過剰適合を**定量的**に合わすことができていることが面白いところだなと思います。
僕はまだ見つけられていないですが、今後ニューラルネットワークなどで同じようなことが起こっていないか注目して見ていきたいですね。

### 2.1.3.1 正則化項
過剰適合の問題を防ぐのに最も使われているのが、L2正則化と呼ばれる手法で、式(2.4)に次のようなペナルティを与える項（正則化項）を以下のようにします。

```math
\Omega_{L2}({\bf w}) = \frac{1}{2}{\bf w}^T{\bf w} = \frac{1}{2}\{w_1^2,w_2^2,w_3^2, \cdots, w_n^2 \}
```

これを誤差関数に追加して、コスト関数を定義してこれを最小化していきます。$\lambda$は、正則化項の重み付けをして、ペナルティの強さを調整しています

```math
J({\bf w}) = E({\bf w}) + \lambda \Omega_{L2}({\bf w})
```

正則化項見ればわかるように、特定のパラメータが大きな値を持っていると、2乗でコスト関数に響いてくるので、特定のパラメータが大きな値を取ることが抑制することができます。図2.2(a)の下段でいうと、m=4,5のパラメータは、大きな値をとっています。これを他の項に分散していきたいです。図2.2を見るとわかりますが、(a)→(b)→(c)と$\lambda$の値が大きくなるとパラメータがどれも使えています。これは特徴量関数で抽出した特徴量をまんべんなく使えていると同値です。

### 2.1.3.2 正則化による学習の問題点

#### 特徴量関数を事前に固定する必要がある

例として10次関数は、表現力が高いですが、画像などのデータに対しては、多項式ではまだ表現力が足りていないことがあります。
ニューラルネットワークでは、基底関数が単なる多項式ではなく、さらに複雑な関数をデータから学習して動的に求めます。
7章のガウス過程では、、、、(勉強してから書きます)


#### 特徴量関数の選択の評価がしにくい

今回1次元の入力から1次元の出力を得る簡単なモデルだったから、視覚的に特徴量関数の評価ができましたが、
複雑なモデルに対しては厳しいこともあります。
（この先も勉強して書き直します）

#### 正則化項の選定に根拠がない
これもちょっと勉強してから書きます

#### 予測の不確実性を表現できない
これもあんまりピンときていないので、あとで書きます


## その他
僕も素人なので
どんどんコメントで指摘してください

あとこの記事は著者の須山さんに公開許可いただいております

[ベイズ深層学習-個人ログ](https://qiita.com/tsukasa-forever/items/62fb48a9af1ef872367d)