テクノロジー

3分で理解!機械学習での「多層パーセプトロン」を実装まで解説

3分で理解!機械学習での「多層パーセプトロン」を実装まで解説

今やITについてそれほど詳しくない人でもディープラーニングという言葉は聞き覚えがあるというほど、機械学習は身近なものになっていますよね。

しかし、実はここ数年勢いのあるディープラーニングの原型である多層パーセプトロンは数十年前から研究されていました。多層パーセプトロンの層の数を増やし、そのために様々な技術を詰め込んだのがディープラーニングです。

多層パーセプトロンについて学ぶことは、ディープラーニングをはじめとした今をときめく最先端技術を学ぶ基礎知識になります。この記事を最後まで読めば、多層パーセプトロンについての理解が得られ、その後の機械学習プログラムの開発などにきっと役立つに違いありません。何事も基礎が重要ですよね。

そこで今回はディープラーニングの原型となった多層パーセプトロンについて解説します。まずは多層パーセプトロンとは一体何なのか、メリットデメリット、実装や応用方法について解説を始めます。

多層パーセプトロンとは

計算のイメージ
多層パーセプトロンとは、1980年代に登場した機械学習手法の一種です。多層パーセプトロンはもともと1960年代に登場した単純パーセプトロンの欠点を補う目的で開発されました。

単純パーセプトロンとは複数の入力値(x1, x2, x3とする)に対し、それぞれ調整した重み(w1, w2, w3とする)をかけて出力値(y = w1x1+w2x2+w3x3)を計算し、その結果を使って入力データを分類する手法です。二次元平面に直線を引き、入力データがその直線の右側か左側かによって分類をします。例えば、測定結果がある閾値に対して大きいか小さいかを判定するような場合がこれに当てはまります。

単純パーセプトロンは二次元平面を直線で左右に分けるまでが限界でした。そうすると、例えばOKデータが平面上の右上(第一象限)と左下(第三象限)、NGデータが右下(第四象限)のそれぞれ全域に分布しているような場合、OKデータとNGデータを分けられる直線は存在しません。すると当然、直線を曲線にしたいというニーズが発生しますよね。

そこで考案されたのが多層パーセプトロンです。多層パーセプトロンは単純パーセプトロンの計算を複数回実施するようにしたものです。

ここで単純パーセプトロンに対し、中間層を1層追加した多層パーセプトロンを例にとりましょう。入力値(x1, x2, x3とする)に対し、重み(w11, w12, w13, w21・・・w33とする)をかけ中間層(y1, y2, y3)を計算すると、以下のようになります。

y1 = w11x1 + w12x2 + w13x3
y2 = w21x1 + w22x2 + w23x3
y3 = w31x1 + w32x2 + w33x3

そしてこれら中間層の値にさらに重み(W1, W2, W3とする)をかけ、すべて足した値を出力値(z = W1y1 + W2y2 + W3y3)として算出するのです。

つまり、出力値z = W1(w11x1 + w12x2 + w13x3) + W2(w21x1 + w22x2 + w23x3)+W3(w31x1 + w32x2 + w33x3)と表すことができ、単純パーセプトロンより調整できるパラメータがずっと増えています。

これによって平面を直線でしか分割できなかった単純パーセプトロンに対し、多層パーセプトロンでは平面を曲線で分割でき、分類の幅が増えました。

多層パーセプトロンの良いところ・悪いところ

立体のイメージ
多層パーセプトロンの良いところは、データをうまく分類できるよう教師データを使って重みの値を自動調整できることです。この自動調整の手法を「逆誤差伝播法」と言います。

逆誤差伝播法を非常に簡単に説明すると、各重みの値を少しだけ増減させ、多層パーセプトロンによる予測値が教師データの正解に近づくように重みを変化させます。これにより、人がパラメータを調整することなく教師データを使って分類することができる、いわゆる機械学習が実現できました。

また、もう一つの良いところは、あらゆるデータに対して機械学習が可能な点です。画像データは機械学習が最も得意とする対象ですが、画像データも元々は0と1で表現されたデータです。同じように多層パーセプトロンでは0と1で表現された音声データのような時系列データも扱うことができます。パソコンで扱うデータはすべてこのような0と1で表されたデータなので、工夫によって機械学習ができると言えますよね。

多層パーセプトロンの欠点は分類の根拠がわからないことです。仮に100%思い通りに分類できていたとしても、どういう根拠で分類されているのかが判断できないため、作成した多層パーセプトロンに対して完全に信頼することができません。

例えば、製品の画像検査を多層パーセプトロンで学習させた場合を考えます。開発者としては製品の欠陥があればNGと判断して欲しいのですが、NGデータとして用いた画像すべてに埃が写っていたとすると、実は多層パーセプトロンは欠陥の有無でなく埃の有無でOKかNGかを判断している可能性があります。そして、学習結果の重みなどを確認しても欠陥の有無で判断しているのか埃の有無で判断しているのかはわかりません。

多層パーセプトロンを実装する前にやっておくべき下準備

ライブラリのイメージ
多層パーセプトロンを実装して動作を検証したいとき、最もオススメの方法はPythonを利用し、Tensorflowライブラリを利用する方法です。Pythonとはプログラミング言語の一種で、近年機械学習分野で最も広く使われている言語です。機械学習に必要な機能がすべて揃えられる上、ネットや書籍など情報量も多いため、機械学習をするなら迷わずPythonを選びましょう。

ライブラリとは、Pythonの標準機能にはない機能を追加する拡張キットのようなもので、Tensorflowライブラリを用いると、高度な計算に必要なあらゆる機能が使えるようになります。

まずはPythonをインストールしましょう。インストール方法は、Python公式サイトからインストーラーをダウンロードし、実行するだけ。なお、TensorflowライブラリはPythonバージョン3.7までしか対応していないので、注意が必要です。

Python本体のインストールが終わったらTensorflowライブラリのインストールをしましょう。コマンドプロンプトにてpip install Tensorflowと入力するだけでインストールができます。以上で多層パーセプトロンを実装する下準備は完了です。

多層パーセプトロンの実装のやり方

コードのイメージ
それではPythonにて多層パーセプトロンの実装をしましょう。TensorFlow公式サイトの初心者用チュートリアルに、非常に勉強になるサンプルコードがあります。ニューラルネットの構築、学習、そして学習結果表示までの道のりが理解できるでしょう。

チュートリアルのコードは下記のようなものです。

### mnist.py ###
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation=’relu’),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=’softmax’)
])
model.compile(optimizer=’adam’,
loss=’sparse_categorical_crossentropy’,
metrics=[‘accuracy’])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)
###############
出展: https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ja

上記のコードではまず、各種ライブラリのインポートから始まります。インポートというのは、インストールしたライブラリの内、今回のプログラムではこのライブラリを使いますよという宣言です。

今回は手書きの数字の認識を行うので、mnistという変数に、あらかじめ用意された手書きの数字画像を代入します。さらにこの画像を教師データ(x_train, y_train)と、学習結果の確認用データ(x_test, y_test)に分けています。

そして、多層パーセプトロンを実装しているのがmodel の部分。layersと書かれている1行が1層のパーセプトロンになります。こうして一つ一つを見ていくと多層パーセプトロンの実装という難しそうなプログラミングでも、案外簡単に書けそう・・・と感じるかもしれません。

多層パーセプトロンを応用すると、こんなところにも使える

画像のイメージ
多層パーセプトロンは基本的に画像やデータを分類する手法です。一般的な企業での最も一般的な使用方法は、製品の画像検査によるOK・NG判定や、膨大なデータを解析し新しい法則を見つけ出すデータマイニングでしょう。

※データマイニングとはこちらの記事で解説しています

また、多層パーセプトロンの応用手法として、敵対的生成ネットワークがあります。これは、「本物の画像と偽者の画像を分類する多層パーセプトロン」と「偽者の画像を作成する多層パーセプトロン」を競わせることによって本物と区別のつかないような偽者画像を作り出す技術です。

※敵対的生成ネットワークについて知りたい方はこちら

敵対的生成ネットワークを利用すると、存在しない人の顔画像や落書きのような風景画を写真のように修正もできます。このように、多層パーセプトロンは主に画像処理やデータ解析といった分野で利用されます。

まとめ

さて、今回は多層パーセプトロンについて概要から実装までを解説しました。ここまでの内容をまとめると、下記のようになります。

  • 多層パーセプトロンは単純パーセプトロンの欠点を補う目的で開発
  • 多層パーセプトロンは単純パーセプトロンの計算を複数回実施する
  • 多層パーセプトロンは平面を曲線で分割し、データが曲線のどちら側かで分類する
  • 多層パーセプトロンはどんなデータでも扱い、機械学習できる
  • 多層パーセプトロンの分類の根拠はわからないため、信頼しきれない面もある
  • 多層パーセプトロンの実装にはPythonとTensorflowの利用がオススメ
  • 多層パーセプトロンの応用例として敵対的生成ネットワークによる画像修正がある

機械学習では、まだまだたくさんの研究者が様々な手法を開発しており、年々新しい手法が発表されています。個人でもアイデアしだいで世間をあっと言わせるような手法を見つけ出せるかもしれません。いろいろな多層パーセプトロンを作ってみて、精度の高い分類ができるモデルや、新しい手法を見つけましょう!

トップへ戻る
タイトルとURLをコピーしました