単回帰分析からニューラルネットワークへの拡張|高校数学の演習を通して理解するニューラルネットワーク #5

f:id:lib-arts:20181228181633p:plain

当連載は、高校数学の演習を通して機械学習アルゴリズムの一つであるニューラルネットワークを理解しようというものです。連載の経緯につきましては#1にまとめましたので下記をご覧ください。

 簡単な6題の例題をもとにニューラルネットワークの仕組みに現れる基礎的な数学についてフォーカスします。
#1~#3では6題の例題に関して取り扱いました。

関数・微分の演習と解説|高校数学の演習を通して理解するニューラルネットワーク #1 - lib-arts’s diary

最小値問題と最適化|高校数学の演習を通して理解するニューラルネットワーク #2 - lib-arts’s diary

行列の計算とMLPの推論|高校数学の演習を通して理解するニューラルネットワーク #3 - lib-arts’s diary
#4、#5ではこれまで行った例題の解説の内容を踏まえて、回帰分析の学習の流れの理解からニューラルネットワークへの理解へと繋げていきます。#4では回帰分析の学習の流れについて抑えましたので、
https://lib-arts.hatenablog.com/entry/math_nn4
#5ではそれを踏まえて単回帰分析のモデルをニューラルネットワークのベーシックなモデルである多層パーセプトロン(MLP; Multi Layer Perceptron)へ拡張していければと思います。
以下、目次になります。

1. 回帰分析の学習の流れの復習
2. 数式の拡張
2.1 重回帰分析への拡張
2.2 ソフトマックス回帰への拡張
2.3 多層パーセプトロン(MLP; Multi Layer Perceptron)への拡張
3. まとめ


1. 回帰分析の学習の流れの復習

本題に入る前に軽く#4の復習を行います。#4ではデータからモデルを関数の形で近似して得て(学習)それを元に予測値を得る(推論)という全体像において、モデルの学習の仕組みについて解説を行いました。

モデルの学習にあたっては、(1)数式の定義、(2)誤差関数の定義、(3)最適化という三つのプロセスを踏み、それにあたってex.01〜ex.04までの例題を元に解説を行いました。(2)と(3)により、(1)で定義したy=ax+bのaとbの最適な値を決めることができました。

#4では上記で終わったのですが、ここで(2)と(3)については(1)の形によらず同様な論理展開で話が進められるのではというのがここでの出発点です。すなわち(1)において定義する数式を変えても後ろの議論が成り立つということに基づいて、#5では(1)の数式を拡張していきます。(1)の数式の拡張に関しては2節以降でまとめたいと思います。


2. 数式の拡張

1節の最後に言及した内容に基づいて2節では数式を拡張していきます。2.1では入力の変数を増やす重回帰分析、2.2では入力、出力ともに変数を増やしソフトマックス関数を介して確率的に取り扱えるようにしたソフトマックス回帰、そして2.3ではこれまでの出力を隠れ層と見なし計算を多層化したMLPについて取り扱います。


2.1 重回帰分析への拡張

2.1では数式を重回帰分析へと拡張します。重回帰分析の式は

 y = w_{1}x_{1} + w_{2}x_{2} + ... + w_{n}x_{n} + b = \sum_{k=1}^{n}(w_{k}x_{k}) + b

のように書くことができます。また、行列的な計算に基づいて、

 y = \left(\begin{array}{rr}w_{1} w_{2} ... w_{n}\\\end{array}\right)\left(\begin{array}{rr}x_{1}\\x_{2}\\...\\x_{n}\\\end{array}\right) +b = \boldsymbol{W}\boldsymbol{X} +b

のようにも表記することができます。2.2以降では和の形で表記するのが大変なので、全てこのような行列の積の形式で表記します。

これを解くにあたっては、#4の時と同様に(2)の誤差関数の定義で予測の\hat{y}と実際の値のyの差の誤差を表す関数を定義し、(3)の最適化でパラメータであるwとbの値を求めることでモデルを構築し、新しい入力データxに対しても予測値を出力できるようになります。


2.2 ソフトマックス回帰への拡張

2.2で取り扱うソフトマックス回帰は2.1の重回帰分析の出力を多層にして、最後にソフトマックス関数を用いて出力の和が1になるように調整したバージョンです。

 \boldsymbol{Y} = softmax(\left(\begin{array}{rr}y_{1}\\y_{2}\\...\\y_{m}\\\end{array}\right) = \left(\begin{array}{rr}w_{11} w_{12} ... w_{1n}\\....\\w_{m1} w_{m2} ... w_{mn}\\\end{array}\right)\left(\begin{array}{rr}x_{1}\\x_{2}\\...\\...\\x_{n}\\\end{array}\right) + \left(\begin{array}{rr}b_{1}\\b_{2}\\...\\b_{m}\\\end{array}\right)) = softmax(\boldsymbol{W}\boldsymbol{X} +\boldsymbol{b})

 上記のような数式で表すことができます。要素を記述する表現だと表記がややこしくなるので2.3では太字で表した字体で行列演算を表すものとします。


2.3 多層パーセプトロン(MLP; Multi Layer Perceptron)への拡張

2.3は2.2のような数式を入れ子にした形です。

\boldsymbol{Y} = softmax(\boldsymbol{W'}φ(\boldsymbol{W}\boldsymbol{X} + \boldsymbol{b}) + \boldsymbol{b'})

のように表すことができます。φは#3でも触れましたが活性化関数(activation)で隠れ層の出力に作用する値で非線形関数が用いられます。ここで線形(一次式)の変換を用いてしまうと隠れ層は数学的に意味をなさなくなってしまうので、非線形関数が必ず必要です。よく用いられる関数としてはシグモイド関数や最近のDeepLearningの文脈ではReLU(Rectified Linear Unit)の派生の関数が用いられます。

数式が難しくなったように見えますが、誤差関数を定義して誤差関数の値が最小になるように\boldsymbol{W'}\boldsymbol{W}\boldsymbol{b}\boldsymbol{b'}を求めること自体は変わらないので、同様にパラメータを求めることができます。


3. まとめ

これまでの#1〜#5までで、基本的な数学をベースにMLPのようなニューラルネットワークの中身について理解できたかと思います。

#6ではこの内容をベースに近年画像認識などを中心に猛威を振るっているアルゴリズムであるCNNについて解説を行いたいと思います。