[機械学習]多層パーセプトロン(MLP)の仕組みを解説する

2023/08/11に公開

はじめに

今まで機械学習の勉強をしてきましたが、機械学習のアルゴリズムをちゃんと説明できるようにアウトプットしていきたいと思います。プログラムの書き方というよりはアルゴリズムを解説していきたいと思います。

想定読者

  • 基礎的な微分、線形代数は理解している
  • プログラムは書けるけど、原理を理解していない方
  • 機械学習に興味のある方

多層パーセプトロン(MLP)を簡潔に説明すると?

多層パーセプトロンは、名前の通りパーセプトロンをいくつも結合させて多層化したものになります。パーセプトロンは、複数の入力を受け取り、一つの信号を出力する関数になります(下図参照)。

パーセプトロン、多層パーセプトロンについてそれぞれ詳しく解説していきます。

まずはパーセプトロンについて

パーセプトロンの中身をもう少し詳しく描いたものがこちらの図になります。

パーセプトロンの処理の流れは以下の通り。

  1. 各入力に重みを乗じる(重みはどの変数をどれくらい重要視するかの指標)
  2. 入力と重みの積(重み付き入力)とバイアスを総和する
  3. 総和を活性化関数に入力
  4. 出力を得る

1~4についてそれぞれ説明します。
まずは、各変数と重みの掛け算をします。

w_1x_1, w_2x_2, ... ,w_nx_n

そして、重み付き入力とバイアスの総和aを計算します。(バイアスは任意の実数)

a = b + w_1x_1 + w_2x_2+ ... + w_nx_n

また、この総和は行列の掛け算として表記することもできます。

a = b + w_1x_1 + w_2x_2+ ... + w_nx_n = [b, w_1, w_2, ..., w_n][1, x_1, x_2, ..., x_n]^T

そして、総和aを活性化関数hに入力して出力yを得ます。

h(a) = y

活性化関数にはある閾値を境に出力が切り替わる関数が使用されます。例えば、sigmoid関数(下図)が使用されます。

MLPの処理の流れ

MLPはパーセプトロンを複数繋げた構造になります。パーセプトロンの出力が次のパーセプトロンの入力になる構造となっています。

処理の流れとしては下記の通り。

  • 重み付き入力とバイアスの総和aを活性化関数hに入力し、出力zを得る(図の緑枠)
  • 第1層のパーセプトロンの出力z^{(1)}_1, z^{(1)}_2にそれぞれ重みを乗じ、バイアスとの総和を第2層の活性化関数hに入力(図の赤枠)
a^{(2)}_1 = z^{(1)}_1w^{(2)}_{11} + z^{(1)}_2w^{(2)}_{21} + b^{(2)}_1
z^{(2)}_1 = h(a^{(2)}_1)
  • 第2層の総和a^{(3)}_1, a^{(3)}_2を、出力層の活性化関数\sigmaに入力し、出力を得る

出力層の活性化関数を\sigmaとしたのは、中間層と異なる活性化関数が使用される場合があるためです。
基本的な流れはパーセプトロンと同じで、①重み付き入力とバイアスの総和を算出、②総和を活性化関数に入力という流れになります。

おわりに

MLPの仕組みをなるべく日本語で説明しました。scikit-learnなどのライブラリを使えばMLPは簡単に実装できますが、仕組みを理解したい方の一助になれば幸いです。

Discussion