【理論基礎4】ニューラルネットワークの多層化 (MLP)

ニューラルネットワークの基本構造を示す図。入力層(X1, X2, X3)から重み(W)とバイアス(b)を通じて、活性化関数を適用した出力層(Z1, Z2)を生成する流れを視覚的に解説。 ディープラーニング
ニューロンを複数接続

前回は「ニューラルネットワークの基本要素」で、脳の神経細胞(ニューロン)の発火の仕組みを数式で表現することを学びました。インプット (\(x_i, i=1, 2, …\)) は数値化されたデータで、それらに重み \(w_i\) をかけて合計し、バイアスを加えたものを活性化関数に通すことで、ニューロンの出力が得られます。このプロセスがニューラルネットワークの基本的な構造を形成しています。

しかし、単一の層だけでは複雑な問題を解決するには力不足です。そこで本記事では「ネットワーク」を名乗るにふさわしい多層化の構造を学んでいきます。実は、層を増やすだけでニューラルネットワークの表現力は格段にアップし、手書き文字認識のような高度なタスクすらもできるようになります。

前のニューラルネットワークの基本要素」、続きの「ニューラルネットワークの層構造とその役割」と合わせて読むことで、ディープラーニングの基本的な概念と数式的な理解が一通り完成します。

最新記事の更新情報等はXでお知らせしています。

ステップ1: 複数ニューロンの結合

前回は3つのニューロンをインプットとして1つのニューロンに接続する例を考えました。ここではさらに発展させ、3つのニューロンが複数のニューロンに接続される場合を見てみましょう。

ニューラルネットワークの基本構造を示す図。入力層(X1, X2, X3)から重み(W)とバイアス(b)を通じて、活性化関数を適用した出力層(Z1, Z2)を生成する流れを視覚的に解説。

ニューロンを複数接続(出典:筆者作成)

上の図を見ると、今回は3つのニューロンが繋がる先が2つに増えています。したがって、重みも繋がる先の添字が必要になりました。重み \(w_{i,j}\) の一つ目の添字は繋がる先のニューロンのラベル、2つ目は元の3つのニューロン(インプット)のラベルです。

  • \(w_{1, 2}\): 2番目のニューロンから1番目のニューロンへの重み
  • \(w_{1, 3}\): 3番目のニューロンから1番目のニューロンへの重み

バイアスは繋がる先のニューロンに対応して、\(b_1\)、\(b_2\)とラベルをつけます。これら2つのニューロンの値も同様に、\(z_1\)、\(z_2\) となります。具体的に \(z_i\) の式を書くと次のようになります:

\(z_{i} = \varphi\left(\sum_{j}w_{i,j} x_j + b_{i}\right)\)

ステップ2:レイヤーの導入

実際にはニューロンの繋げ方は色々考えられますが、ここでは基本的な形を考えたいと思います。まず、先程の例を踏襲して、ニューロンは縦に並べることにします。これをレイヤー(層)と呼びます。そしてニューロンをつなげたい場合、それを右隣に、2つ目のレイヤーとして縦に並べることにします。

例として、第一レイヤーに3つのニューロン、第二レイヤーに2つのニューロンを配置します。信号は左から右へ一方通行で流れます。このように、ニューロンをレイヤー単位で積み重ねることで、ネットワークを構成することができます。各レイヤーにおけるニューロンの数は自由に設定可能で、左から右に進むにつれて増やしたり減らしたりすることもできます。このようなレイヤー構造を複数持つものを多層パーセプトロン(MLP:Multi-Layer Perceptron)と呼びます。

たったこれだけのシンプルな仕組みでも、例えば手書き文字認識のような、従来のプログラミングでは非常に困難だったタスクを容易に実現できるようになります。

ところで、ここまではレイヤーが2つだけの簡単な例を扱ったため、あえてレイヤーのラベル(添字)を省略しました。しかし、レイヤーの概念を導入したので、今一度、模式図を確認してみましょう。複数のレイヤーがある場合、レイヤーの分、添字を追加する必要があります。ここでは、各レイヤーの番号を上付きの添字にします(例: \(z^{(l)}\))。これは、それぞれの層 l における出力を表します。

具体的には次のように記述できます:

\(z_{i}^{(l)} = \varphi\left(\sum_{j}w_{i,j}^{(l-1)} z_j^{(l-1)} + b_{i}^{(l-1)}\right)\)

このように書くと、数学的な見通しが良くなるため、特に数学に慣れている方には便利です。重み、バイアスは各層で行列 (i, j) が行、列のインデックス)、ベクトル(i が座標のインデックス)となります。ただし、プログラミングを行う際は、こうした小難しい計算を自分で実装する必要はほとんどありません。ライブラリがこれらを自動で処理してくれるので、心配しなくても大丈夫です。

まとめ

本記事では、ニューラルネットワークを**多層化(MLP)**することで、より複雑な問題を解けるようになる仕組みを解説しました。

  • 単層ネットワーク では扱える問題が限られるが、層を増やすことで表現力が向上する
  • 複数のニューロンを組み合わせることで、より高度なパターンを学習できる
  • 活性化関数を重ねて用いることで、複雑で非線形なデータの処理が可能になる。

次回の記事では、入力・中間・出力層の役割について詳しく解説します。

コメント

タイトルとURLをコピーしました