【JDLA E資格】基底展開法に基づく非線形回帰

#はじめに
JDLA E資格試験で出題される基底展開法に基づく非線形回帰について解説した記事です。
E資格試験の機械学習パートでは、__基底関数や活性化関数などが出題されます__。
また、線形回帰は機械学習全般における基礎ですので、本稿の内容を理解しておくのは必須です。


なお、他パートの具体的な解説については、下記をご覧ください。
[E資格試験に関する私の投稿記事リスト][link-1]
[link-1]:https://qiita.com/fridericusgauss/items/5a97f2645cdcefe15ce0

###目次
1. [機械学習の分類](#機械学習の分類)
2. [基底展開法に基づく非線形回帰](#基底変換法に基づく非線形回帰)
3. [活性化関数](#活性化関数)
4. [おわりに](#おわりに)

#機械学習の分類
E資格試験で登場する機械学習モデル・アルゴリズムは下記表のように分類されます。

| モデル | 学習タイプ | タスク |
|:-----:|:------:|:------:|
| 線形回帰 | 教師あり  | 回帰  |
| ロジスティック回帰 | 教師あり  | 分類  |
| SVM | 教師あり  | 分類  |
| k-近傍法 | 教師あり  | 分類  |
| k-means | 教師なし  | クラスタリング  |
| k-means++ | 教師なし  | クラスタリング  |
| 主成分分析 | 教師なし  | 次元削減  |
| 動的計画法 | 強化学習  | ー  |
| モンテカルロ法 | 強化学習  | ー  |
| Q-Learning | 強化学習  | ー  |
| SARSA | 強化学習  | ー  |



#基底展開法に基づく非線形回帰
###概要
非線形回帰は、教師あり学習で回帰タスクのための(説明変数を用いて実数値の目的変数を表現する)非線形の数理モデルです。
線形回帰モデルを基底展開法に適用することで、非線型回帰が可能です。
__E資格試験では、基底展開法に基づく非線形回帰について出題されませんが、カーネル法や活性化関数の理解には必須です__。

線形回帰に関する記事は下記をご覧ください。
[線形回帰][link-2]
[link-2]:https://qiita.com/fridericusgauss/items/42b5cd0bf8ea4b79b86a


###線形重回帰のモデルと学習
目的変数$y \in \mathbb{R}$、説明変数$\boldsymbol{x}=(x_1,\cdots,x_M)^{\mathrm{T}} \in \mathbb{R}^{M}$としたとき、線形重回帰モデルは式(1)で表されます。

```math
y=\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+w_{0}
\tag{1}
```

$\boldsymbol{w}=(w_1,\cdots,w_M)^{\mathrm{T}} \in \mathbb{R}^{M},w_{0} \in \mathbb{R}$はモデルパラメータ（偏回帰係数、バイアス）です。

ダミー変数を導入することで、式(1)は式(2)で変形できます。

```math
y=\boldsymbol{w}^{\prime\mathrm{T}}\boldsymbol{x}^{\prime}
\tag{2}
```

```math
\begin{align}
\boldsymbol{w}^{\prime}=&(w_1 ,\cdots,w_M ,w_0 )^{\mathrm{T}} \in \mathbb{R}^{M+1}\\
\boldsymbol{x}^{\prime}=&(x_1 ,\cdots,x_M ,1 )^{\mathrm{T}} \in \mathbb{R}^{M+1}
\end{align}
```

線形回帰モデル（式(1)あるいは、式(2)）による目的変数の出力を$\hat{y}$、学習データを$D=\\{({\boldsymbol{x}}\_{1},y_{1}),\cdots,({\boldsymbol{x}}\_{N},y_{N})\\}$と表します。

線形重回帰における二乗和誤差関数は、式(3)で表されます。

```math
\begin{align}
L(\boldsymbol{w}^{\prime};D)
&=\frac{1}{2}\sum_{n=1}^N(y_n-\boldsymbol{w}^{\prime\mathrm{T}}\boldsymbol{x}_n^{\prime})^2\\
&=\frac{1}{2}(\boldsymbol{y}-\boldsymbol{X}\boldsymbol{w}^{\prime})^{\mathrm{T}}(\boldsymbol{y}-\boldsymbol{X}\boldsymbol{w}^{\prime})\\
\end{align}
\tag{3}
```

```math
\begin{align}
\boldsymbol{y}=&(y_1,\cdots,y_N)^{\mathrm{T}} \in \mathbb{R}^{N}\\
\boldsymbol{X}=&[\boldsymbol{x}_1 ^{\prime},\cdots,\boldsymbol{x}_N ^{\prime}]^{\mathrm{T}} \in \mathbb{R}^{N\times (M+1)}
\end{align}
```


$L(\boldsymbol{w}^{\prime};D)$が最小となるような、モデルパラメータは式(4)で表されます。

```math
\boldsymbol{w}^{\prime}=(\boldsymbol{X}^{\mathrm{T}}\boldsymbol{X})^{-1}\boldsymbol{X}^{\mathrm{T}}\boldsymbol{y}
\tag{4}
```


###基底展開法に基づく非線形回帰のモデル
線形回帰モデルは、説明変数に対して目的変数が線形なので、データの非線形性に対応できません。
そこで、非線型性に対応する方法が__基底展開法__で、__基底関数によって説明変数を非線形変換してから、線形回帰モデルで学習する方法__です。
このように、非線形モデルによって回帰タスクを解くことを、__非線形回帰__と呼びます。

基底展開法に基づく非線形回帰モデルは式(5)で表されます。

```math
\begin{align}
y&=\boldsymbol{w}^{\mathrm{T}}\boldsymbol{\phi}(\boldsymbol{x})+w_{0}
\tag{5}\\
\boldsymbol{w}&=(w_1,\cdots,w_H)^{\mathrm{T}}\in \mathbb{R}^{H}\\
\boldsymbol{\phi}(\boldsymbol{x})&=(\phi_1(\boldsymbol{x}),\cdots,\phi_H(\boldsymbol{x}))^{\mathrm{T}}\in \mathbb{R}^{H}
\end{align}
```

$\phi_j(\boldsymbol{x}):\mathbb{R}^{M} \rightarrow \mathbb{R}$を基底関数といいます。
$H$個の基底関数は事前に種類を決定しておき、説明変数を非線形変換することが可能です。
つまり、非線型性がある空間上でデータに適合するように線型モデルを学習するのではなく、__データを基底関数によって別の空間に写像した後、その空間上でデータに適合するように線型モデルを学習します__。

ダミー変数を導入して、式(5)は式(6)で表せます。

```math
\begin{align}
y&=\boldsymbol{w}^{\prime\mathrm{T}}\boldsymbol{\phi}^{\prime}(\boldsymbol{x})
\tag{6}\\
\boldsymbol{w}^{\prime}&=(w_1,\cdots,w_H, w_0)^{\mathrm{T}}\in \mathbb{R}^{H+1}\\
\boldsymbol{\phi}^{\prime}(\boldsymbol{x})&=(\phi_1(\boldsymbol{x}),\cdots,\phi_H(\boldsymbol{x}), 1)^{\mathrm{T}}\in \mathbb{R}^{H+1}
\end{align}
```


基底関数として、式(7)の（簡潔な）多項式基底関数、式(8)の多項定理を利用した多項式基底関数、式(9)の放射基底関数（RBF）、式(10)のフーリエ基底関数（例えば$\sin$関数）などが挙げられます。

```math
\begin{align}
\phi_{j}(\boldsymbol{x})=&x_j^{j}
\tag{7}\\
\phi_{j}(\boldsymbol{x})=&\frac{s!}{\prod_{i=1}^{M}k_{i}!}\prod_{i=1}^{M} x_i^{k_i}, k_i \in \left\{1,2,\cdots,s\right\}
\tag{8}\\
\phi_{j}(\boldsymbol{x})=&\exp{\left(\frac{(x_j-\mu_j)^2}{2\sigma^2}\right)}
\tag{9}\\
\phi_{j}(\boldsymbol{x})=&\sin(jx_j\pi)
\tag{10}
\end{align}
```

ただし、式(7)、式(9)、式(10)は$H=M$となります。
式(8)の$s$と、式(9)の$\sigma^2,\mu_j$はパラメータで、事前に与える必要があります。
式(8)の基底関数は$(\sum_{i=1}^{M}x_{i})^s$を展開したときの$j$番目の項を表しており、説明変数同士の積も含まれます。
また、この各要素は、$\sum_{i=1}^{M} k_{i}=s$を満たす各組$\\{k_{1},k_{2},\cdots,k_{M}\\}$（$k_i\in \\{1,2,\cdots,s\\}$）に対応して表れるため、その全通りが$H$となります。


###基底関数法に基づく非線形回帰の学習
基底関数法に基づく非線形回帰の場合、二乗和誤差関数は式(11)で表されます。

```math
\begin{align}
L(\boldsymbol{w}^{\prime};D)
&=\frac{1}{2}\sum_{n=1}^N(y_n-\boldsymbol{w}^{\prime\mathrm{T}}\boldsymbol{\phi}^{\prime}(\boldsymbol{x}_n))^2\\
&=\frac{1}{2}(\boldsymbol{y}-\boldsymbol{\Phi}\boldsymbol{w}^{\prime})^{\mathrm{T}}(\boldsymbol{y}-\boldsymbol{\Phi}\boldsymbol{w}^{\prime})
\end{align}
\tag{11}
```

```math
\boldsymbol{\Phi}=[\boldsymbol{\phi} ^{\prime}(\boldsymbol{x}_1),\cdots,\boldsymbol{\phi}^{\prime}(\boldsymbol{x}_N) ]^{\mathrm{T}}\in \mathbb{R}^{N\times (H+1)}（\Phi_{nj}=\phi_j(\boldsymbol{x}_n)）
```

$L(\boldsymbol{w}^{\prime};D)$が最小となるような、モデルパラメータは式(12)で表されます。__なお、式(12)はE資格試験では出題されません。__

```math
\boldsymbol{w}^{\prime}=(\boldsymbol{\Phi}^{\mathrm{T}}\boldsymbol{\Phi})^{-1}\boldsymbol{\Phi}^{\mathrm{T}}\boldsymbol{y}
\tag{12}
```

ただし、式(14)中の文字をダミー変数として置換し直しています。


###カーネル回帰への拡張
式(8)のモデルは、$H$個（有限個）の基底関数を組合せて、データの非線型性を表現します。
しかしながら、基底関数の個数は有限なので、モデルの表現能力に限界があります。
そこで、基底関数を増やしてより高い表現能力を得たいところですが、そうすると基底関数の準備が大変になります。
例えば、RBFでは基底関数毎に中心ベクトル（パラメータ）を設定する必要があるため、基底関数の個数を増やすことに伴い、手動で決定するパラメータも増えます。

そこで、カーネル関数を用いて非線型性に対応する方法が__カーネル回帰__です。
カーネル関数は基底関数と同様に、モデルの表現能力を高める役割ですが、上記のような限界がないため、上記のような問題が発生しません。
カーネル回帰に限らず、モデルにカーネル関数を導入して、表現力を高める方法を__カーネル法__と呼びます。
カーネル法は、非常に表現力の高いモデルが作れる方法として知られています。
カーネル法は、線形回帰（カーネル回帰）以外に、SVM（カーネルSVM）やベイズ線形回帰（ガウス過程）に導入されるケースが有名です。

カーネル回帰については、下記記事を参考にしてください。
[カーネル回帰][link-3]
[link-3]:https://qiita.com/fridericusgauss/items/62f79879d8b95ff12d51


#活性化関数
非線型性やバイナリ出力（分類タスク）に対応するための、線形回帰の発展形として、活性化関数を用いるものがあります。
このとき、モデルは線形回帰とは呼ばなくなるので、ご注意ください。

関数$\sigma(\cdot)$によって、出力に非線形変換を与えることを__活性化__と呼びます。
活性化関数に基づく線形重回帰モデルは式(13)で表されます。

```math
y=\sigma(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+w_{0})
\tag{13}
```

なお、活性化関数として、シグモイド関数とした場合がロジスティック回帰です。
ロジスティック回帰の詳細は下記記事で解説しています。
[ロジスティック回帰][link-4]
[link-4]:https://qiita.com/fridericusgauss/items/35fd7b274c5e131502e3

また、式(14)のように、複数の線形重回帰モデルをつくり、各出力$z_{i}$を活性化した値をさらに線形結合したモデルが、ニューラルネットワークです。

```math
\begin{align}
y=&\boldsymbol{w}^{\mathrm{T}}\boldsymbol{\sigma}+w_{0}\\
\boldsymbol{\sigma}=&(\sigma(z_1) ,\cdots,\sigma(z_{K}))^{\mathrm{T}}\\
z_i=&(\boldsymbol{w}^{(i)})^{\mathrm{T}}\boldsymbol{x}+w_{0}^{(i)}
\end{align}
\tag{14}
```

活性化関数が基底関数のように働いていることがわかります。
__深層学習__は、式(14)を発展させて、活性化（非線形変換）と線形結合の繰り返したモデルで、非常に表現力の高いモデルが作れる方法として知られています。
まさに第3次AIブームを牽引しており、2000年代後半以降、深層学習の研究が盛んとなった結果、中間層の設計、活性化関数の種類、学習方法など、テクニックが非常に多岐に渡って存在します。
ニューラルネットワーク（深層学習）はE資格試験の半分を占める程、重要なトピックですので、それぞれ分割しながら別の記事で説明していきます。


#おわりに
E資格向けの基底展開法に基づく非線形回帰について解説しました。
なお、上記は、2021年2月時点における内容であることにご注意ください。

[E資格試験に関する私の投稿記事リスト][link-1]