LoginSignup
7
4

More than 5 years have passed since last update.

多層パーセプトロン (Multilayer perceptron, MLP)をExcelで理解する

Last updated at Posted at 2018-11-30

多層パーセプトロン(Multilayer perceptron、MLP)は、順伝播型ニューラルネットワークの一種であり、少なくとも3つのノードの層からなります。入力ノード以外の個々のノードは非線形活性化関数を使用するニューロンであり、誤差逆伝播法(バックプロパゲーション)と呼ばれる教師あり学習手法を利用することで、線形分離可能ではないデータを識別できます。非線形活性化関数として使われる関数のひとつに、シグモイド関数があります。

今回は、入力層Xに4つのノード、隠れ層Hには3つのノード、出力層Oに3つのノードを配置したMLPをExcelで実装しようと思います。

network01.png

あやめのデータ(3品種)を例に説明します。

あやめのデータをダウンロードしてください。

あやめのデータは機械学習の勉強でよく使われるデータで、3品種150サンプルの花片や萼の長さ・太さから品種を当てる(予測する)という問題がよく解かれます。

01データ.png

B-E列が説明変数X、F列が目的変数Yと思ってください。このYを予測するMLPモデルを構築したいと思います。

隠れ層と出力層を乱数で初期化

2行目〜3行目のH0〜H2が隠れ層のニューロンを表します。各ニューロンは入力層X1〜X4からの入力を受け付けて、行列「B2:E4」で表される重み行列Wとの線形結合とベクトル「F2:F4」で表されるバイアス項θとの和を計算し、それをシグモイド関数で変換した値を出力します。

7〜9行目のO0〜O2が出力層のニューロンを表します。各ニューロンはH0〜H2からの入力を受け付けて、行列「B7:D9」で表される重み行列Wとの線型結合とベクトル「E7:E9」で表されるバイアス項θとの和を計算し、それをシグモイド関数で変換した値を出力します。このO0, O1, O2からの出力がそれぞれ、品種0、品種1、品種2である確率を出力します。

説明変数Xから目的変数Yを精度よく出力するための重み行列Wとバイアス項θを求める、というのが今回の計算の目的になります。まずは、これらの重み行列Wとバイアス項θを乱数で初期化します。

02隠れ層と出力層.png

入力データを標準化

それぞれの説明変数Xについて、最大値が1、最小値が0になるような標準化を行います。

03入力データの標準化.png

隠れ層の出力

隠れ層の各ニューロンは、入力層X1〜X4からの入力を受け付けて、行列「B2:E4」で表される重み行列Wとの線形結合とベクトル「F2:F4」で表されるバイアス項θとの和を計算し、それをシグモイド関数で変換した値を出力します。

今はWとθがデタラメな乱数なので、出力もデタラメです。

04隠れ層の出力.png

出力層の出力

出力層の各ニューロンはH0〜H2からの入力を受け付けて、行列「B7:D9」で表される重み行列Wとの線型結合とベクトル「E7:E9」で表されるバイアス項θとの和を計算し、それをシグモイド関数で変換した値を出力します。このO0, O1, O2からの出力がそれぞれ、品種0、品種1、品種2である確率を出力します。

今はWとθがデタラメな乱数なので、出力もデタラメです。

05出力層の出力.png

予測結果の表示

出力層O0〜O2からの出力を比較して、最も大きな出力をしたニューロンが最終的な予測結果(分類された品種)を表すことにします。

06予測結果の表示.png

教師データの表示と答え合わせ

教師データと照合して答え合せをします。

07教師データの表示.png

正解していれば1点、不正解なら0点というスコアが算出されるようにします。

08答え合わせ.png

誤差の算出

スコアとは別に、誤差を算出します。誤差は、出力層O0〜O1からの出力と正解(教師データ)との差分の2乗和とします。

09誤差の算出.png

この誤差の総和Qtを最小化するWとθを求めるわけです。

10誤差の総和.png

精度の算出

誤差の総和を最小化するWとθを求める前に、精度指標も計算できるようにしておきましょう。ここでの精度とは、教師セットと同じ予測を出力した割合です。

11精度.png

ソルバー

ソルバーが解決します。目的セル、目標値、変数セルを間違いなく入力して「解決」してください。

12ソルバー.png

収束例

収束結果はひとつとは限りません。私が計算した例をいくつか挙げます。エクセル表の次に描いたネットワーク図では、数値が大きいほど辺が太くなるように描いてあります。

収束例1

13収束例0927.png
Network0927.png

収束例2

13収録例0953.png
Network0953.png

収束例3

13収束例0960b.png
Network0960b.png

収束例4

13収束例0960c.png
Network0960c.png

収束例5

13収束例0960.png
Network0960.png

課題

  • MLPとロジスティック回帰との関係について説明してください。
  • 収束例1〜5について、結果を解釈してください。また、ベストなモデルはどれか挙げてください。
  • 自分で計算して、その結果を解釈してください。
  • 「制約のない整数を非負数にする」のチェックを外してソルバーを実行するとどのような結果になるか試してください。またその結果について説明してください。
  • 隠れ層のニューロンの数を減らすとどうなるか実験してください。
  • 隠れ層のニューロンの数を増やすとどうなるか実験してください。
  • 最後に、演習用データから「ピマ・インディアンの糖尿病診断」を取得し、糖尿病の人と糖尿病ではない人を区別するためのMLPモデルを作成してください。
7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4