昨今ではAI(人工知能)やディープラーニングなどに世界中が注目していますよね。実はこれらのものは多層パーセプトロンと呼ばれるニューラルネットワークが根幹となり、今日まで発展しました。
なお、多層パーセプトロンおよびニューラルネットワークは人間の脳の機能をモデル化する試みとして、1957年ごろから研究されるようになりました。そして、さまざまな課題や技術的な問題を乗り越えることで、人間を超えるようなAI(人工知能)やディープラーニングが生まれました。
そこで今回は、機械学習の基礎として多層パーセプトロンとは何であるのかを基本からわかりやすく解説しましょう。多層パーセプトロンについて正しく理解して、より発展的な機械学習を学んでください。
多層パーセプトロン(MLP)とは
多層パーセプトロン(MLP)とは人間の脳の神経細胞であるニューロンの働きをモデル化したパーセプトロンの構造を多層化したものです。ただし、これだけではわかりにくいのでそれぞれについて順に説明しましょう。
まず、人間の脳にあるニューロンとは電気信号を伝達するための細胞です。具体的にはコアとなる細胞体と軸索、樹状突起、シナプスなどによって1つのニューロンを構成しており、これらが複雑に結びつくことで脳という回路を構成します。
仕組みとしては上位のニューロンから流れてきた電気信号を樹状突起で受け取り、シナプスと細胞体で処理を行って化学反応させます。そして、この反応によって電気信号を発生させるのですが、この際に出力するかどうかは閾値を超えるのかで決めます。なお、閾値を超えない場合には電気信号は出力されません。
あとは発生した信号を軸索を経由して次のニューロンに伝えます。以上がニューロンの働きと仕組みになり、これを以下のようにモデル化したのがパーセプトロンです。
入力層 出力層
w1
x1 → 総
w2 閾値を超えている場合は出力
x2 → →f(x)
w3
x3 →・
・
・
wi
xi → 和
数式としては以下のように表現可能です。
入力信号:x1,x2,x3,……,xi
重み:w1,w2,w3,……,wi
出力信号:f(x)
n
出力層での総和:x = x1w1 + x2w2 + x3w3 + …… =Σxiwi
i=1
活性化関数(ステップ関数の場合):f(x)={1(x≧0),0(x<0)}
以上のようにパーセプトロンは入力層と出力層の2層で構成され、入力に対して重みを付加して総和し、ニューロンで行った出力の判断は活性化関数(ステップ関数など)を利用して処理される仕組みです。このパーセプトロンの考え方は画期的なものであり、実際に人間の小脳も同じような仕組みで働いていることが後に実証されました。
しかし、パーセプトロンは単純なものであれば問題ないですが、複雑な事象を扱うと線形分離できない課題があるとわかったのです。この線形分離可能とは、平面上にあるAという分布とBという分布が存在していた場合に、両者の間に直線を引くことが可能であるということで、可能であれば機械にも数式として理解できます。
こちらは以下のように構成されます。
w1 v1
x1 → h0 →
総
w2 v2
x2 → h1 → →h(x) w3 v3
x3 → h2 →・
・
・
wi vj
xi → hj → 和
数式では以下のようになります。
n
中間層hjへの総和:hj = x1w1 + x2w2 + x3w3 + …= Σxiwi
i=1
m
出力層への総和1:y = h1v1 + h2v2 + h3v3 + …=Σvjhj
j=0
m n
出力層への総和2:ΣvjΣw0ijxi
j=0 i=0
非線形活性化関数(ReLU):h(x)=max(0,x)={1(x≧0),0(x<0)}
説明していくとパーセプトロンに中間層が加えられることで出力層への重みvが加わり、それぞれの層で総和されます。そして、最終的な出力の判断は非線形分離可能な非線形活性化関数(ReLU)で行われる仕組みです。
こちらは(−∞, +∞)の入力に対して(−1, +1)を出力するハイパボリックタンジェント(tanh)を利用する方法で、xが0以上であればそれに対応した値を出力し、0以下であれば出力を行いません。これによってパーセプトロンの活性化関数よりも多層パーセプトロンでは複雑な表現が可能になるため、線形分離できないものでも理解できるようになります。
多層パーセプトロンについての解説は以上です。これらを踏まえて多層パーセプトロンの長所と課題点をお伝えしましょう。
多層パーセプトロンの長所
多層パーセプトロンの長所は、パーセプトロンの短所である線形分離不可能なものでも対応できることでした。ここではこの長所について論理演算を利用して説明しましょう。
なお、論理演算とはコンピューターや回路などで利用されている演算で、真と偽の状態を1、0で表すことでさまざまな演算を行えるものです。こちらについては以下の種類の論理演算などがあります。
- 論理和
- 論理積
- 否定論理積
- 排他的論理和
まず、倫理和とは2つの入力のうちどちらかが真の場合に、以下のように1(真)を出力するものです。
入力1:0 1 0 1
入力2:0 0 1 1
出力 :0 1 1 1
以上のようにどちらかが1(真)であれば1を出力するのが倫理和です。次に論理積とは両者とも1(真)である場合に以下のように1を出力します。
入力1:0 1 0 1
入力2:0 0 1 1
出力 :0 0 0 1
以上のように両者とも1(真)でなければ1とは出力されていません。続いて否定論理積とは論理積を否定するように出力するもので、結果が以下のように論理積とは逆になります。
入力1:0 1 0 1
入力2:0 0 1 1
出力 :1 1 1 0
最後に排他的論理和とは両者のうちどちらかが違った場合に以下のように出力するものです。
入力1:0 1 0 1
入力2:0 0 1 1
出力 :0 1 1 0
以上のように、両者とも1(真)の場合には0(偽)と出力するのが排他的論理和の特徴です。これらの論理演算がどのようにパーセプトロンの線形分離不可能の問題に関わってくるのかといえば、入力1と入力2の値を平面座標と捉え、プロットすればわかります。
例えば、論理和を平面座標で表した場合には以下のようになります。
入力2
↑
真(0,1) 真(1,0)
この場合には出力が偽である(0,0)と真である(1,0)、(0,1)、(1,0)がわかりやすく分かれており、両者の間に直線を引けるでしょう。つまり、論理和では線形分離が可能です。一方で排他的論理和の場合には上のようにはいかず、以下のようにプロットされます。
入力2
↑
真(0,1) 偽(1,0)
この場合では出力が真の場合と偽の場合が対角上に位置しており、1つの直線で両者を分けることができないため、線形分離不可能です。つまり、排他的論理和をパーセプトロンでやろうとすると機械は数式化できないので理解できません。
しかし、これを多層パーセプトロンで行った場合には線形分離が可能になります。具体的には複数の論理演算のパーセプトロンを組み合わせ、以下のような多層パーセプトロンにすることで排他的論理和を表現できます。
→ 論理積
否定論理積
これがどういうことかといえば排他的論理和は入力1、入力2のどちらかが真であり、両方が真でない場合に出力が真になる演算です。そのため、右の論理積の入力1を論理和、入力2を否定論理積のパーセプトロンにして多層パーセプトロンを構成すれば実現できます。
したがって、パーセプトロンでは線形分離不可能だった排他的論理和も多層パーセプトロンでは線形分離が可能になります。以上のように多層パーセプトロンであれば対象が複雑な場合でも線形分離できます。
多層パーセプトロンの課題点
多層パーセプトロンであれば線形分離不可能な問題もクリアできますが、課題点がないわけではありません。なぜなら、多層化することで学習が進まなくなる勾配消失問題が生まれるからです。
パーセプトロンや多層パーセプトロンなどでは何をもって学習を進めていくのかといえば、重みWを更新していくことがポイントになります。こちらについては出力結果のデータと教師データを比較した誤差関数、または損失関数と呼ばれるものを使い、その関数の傾き(勾配)がどうなっているのかで重みを更新します。
この際に学習を進める対象がパーセプトロンであれば、決まった誤差関数を使い、ランダムの重みを設定して教師データと比較する作業をしていけば問題はありません。しかし、中間層を持つ多層パーセプトロンでは連鎖律による問題「勾配消失問題」が発生するのです。
なお、この連鎖律については合成関数の微分をイメージするとわかりやすいでしょう。例えば、以下の関数を微分しましょう。
f(x)=sin(x2 +1)
この場合ではsin内の関数を置き換えて、以下のようにしていけば微分できます。
g(x)=x2 +1
f(x)=sin(g(x))f´(x)=df(x)/dx=df(x)/dg(x)・dg(x)/dxより
f´(x)=cos(g(x))・2x=2xcos(x2 +1)
つまり、演算の構造的には以下のような連鎖的な流れを踏んでいます。
x → g(x) → f(x)
↑ ↑
dg(x)/dx df(x)/dg(x)
これらを踏まえて入力層から出力層までが計n層ある多層パーセプトロンを想定すると以下のような構造になります。
w1 w2 wn-1
X0 → A1(x) → A2(x) → …… → An(x) →X1
ちなみにX0は入力値、X1は出力値を示し、A1(x)などは活性化関数A(x)に入力値を入れて計算したものです。そして、誤差関数をQとして一番最初のw1の勾配を計算すると、最終的に以下のような式になります。
dQ/Dw1 = dQ/dx1・dx1/dxA1・dxA1/dxA2・dxA2/dxA3…dxAn/dw1
= dQ/dx1・w2・w3…wn・A2´(x1)・A3´(x2)・A4´(x3)…An´(xn-1)A1(x0)
ここで注目してほしいのが「A2´(x1)・A3´(x2)・A4´(x3)…An´」という部分であり、こちらは各層での活性化関数を微分したものを順に積算していったものです。これの何が問題かというと利用する活性化関数によっては微分した値が1未満であることがあり、この場合は層が増えるほど重みが更新されなくなります。
例えば、よく利用されるシグモイド曲線「A(x)=1/1+ e-x」の場合は微分した関数の極大値は0.25です。そのため、上のn層の多層パーセプトロンでシグモイド曲線を使うと、結果としてw1の勾配は限りなく0に近づきます。
そうなると重みの更新が行われなくなるため、学習が進まなくなります。これが勾配消失問題であり、層の数が少ない場合でも学習に影響があり、層を増やすほど大きく顕在化します。
したがって、多層パーセプトロンなどを扱う際には勾配消失問題が起こらないような活性化関数を利用しなければなりません。
多層パーセプトロンとディープラーニングの関係性とは
これまで解説してきた多層パーセプトロンと今話題のディープラーニングの関係性とはどのようなものなのでしょうか。こちらについては、多層パーセプトロンを発展させたものがディープラーニングだといえます。
具体的には中間層を含む3層で構成されるのが多層パーセプトロンであり、中間層をよりたくさん設けたものがディープラーニングです。ちなみにディープラーニングのディープは中間層(隠れ層ともいう)が深層化(ディープ)したものであるという意味から名付けられています。
しかし、そのそれらの問題を解決するアプローチや技術が追い付いてきたことにより、中間層をより多層化することが可能になりました。そのため、多層パーセプトロンからディープラーニングという名称が名付けられ、両者は明確な違いを持ったのです。
後者については次で詳しく紹介しましょう。
多層パーセプトロンを応用したニューラルネットワークの種類とは
多層パーセプトロンを基本として現在では以下のようなさまざまなニューラルネットワークが登場しています。
- CNN(畳み込みニューラルネット)
- RNN(再帰型ニューラルネット)
- LSTM(長短期記憶)
- GAN(敵対的生成ネットワーク)
まず、1のCNN「Convolutional Neural Network」は畳み込み処理とプーリング処理を行って入力する手法です。こちらは画像に対して利用されることが多いニューラルネットワークであり、画像データを圧縮して特徴量を検出して学習を進めます。
この時には畳み込み処理で元データの特徴を持った圧縮データを作成し、プーリング処理でさらに特徴を強調しながらより小さくします。これによって最終的には画像データが特徴量を記載したデータになるため、これを基に画像認識などに活用します。
次に、2のRNN「Recurrent Neural Network」は再帰的な構造を持ったニューラルネットワークです。学習においては時系列データなど連続したデータを扱うことがありますが、その場合には通常のニューラルネットワークでは対応が難しいです。
これはある時点でのデータがその後のデータに影響を与えるからです。したがって、RNNでは最初のデータx1の入力による出力を次の層y1だけでなく、次の入力データx2の中間層に出力することを繰り返すことで学習します。
x1 → セル → 出力 → y1
↓
x2 → セル → 出力 → y2
↓
・
・
・
つまり、構図としては以下のように再帰的なやり取りをする中間層(セルとも呼ばれる)を持ったニューラルネットワークを構成します。
xt → セル → yt
↑
セル内でループする
多くの場合では店舗の売上データや気象データなどを扱う際にRNNは利用されることが多いです。ただし、時系列データの中には長期的なデータを扱うことがありますが、その場合ではRNNでは難しいことがあるので、3のLSTM(Long short-term memory)を利用します。
こちらは上のセルをLSTM blockと呼ばれるものに置き換えて構成されたニューラルネットワークです。
xt → LSTM block → yt
↑
LSTM block内でループする
上をみていくとRNNと同じように見えますが、LSTM blockはより構造が複雑になっており、内部にはセルだけでなく入力ゲートと出力ゲート、忘却ゲートと呼ばれる機構が備わっています。
実際の入力値 → セル →出力
↑ ↑
入力ゲート 出力ゲート
仕組みとしては実際の入力値と入力データ、1つ前の出力データが三か所の入力ゲートに同時に入力。そして、重み付けなどがなされてセルを通り、入力ゲートや出力ゲートなどに出力されます。
この際に入出力ゲートの値が0に近い場合はデータを伝えず、1に近い場合のみ伝えることで適切にコントロールします。また、忘却ゲートではセル内部のメモリを状況に応じてクリアするもので、これによって時系列データのパターンが変わった場合でも機構が動くようにします。
最後に、4のGAN「Generative Adversarial Networks」はデータを生成するGenerator、本物のデータがどうかを判断するDiscriminatorを競わせるニューラルネットワークです。
本物のデータ →
Discriminator →本物か、偽物か出力
ノイズ→ Generator→ 偽のデータ →
このGANの目的は学習を行うことで、生成を行うGeneratorがDiscriminatorに勝るような精度を確立することにあります。本物と見分けがつかないようなデータを生成できれば、あるデータを別のものに変換したり、1つの画像データから複数の画像データを生成できます。
多層パーセプトロンの今後
かつての多層パーセプトロンには技術的な問題などがあり、それが研究の障害となっていました。しかし、コンピューターが発達し、新たなアプローチが発見されることで多層パーセプトロンはディープラーニングへと進歩しました。
そして、この流れは現在でも続いており、中間層をより深くした学習が行われていたり、既存のニューラルネットワークを改良することが頻繁に行われています。例えば、RNNからLSTMが生まれたり、解説したLSTMをさらに改良したものも存在します。したがって、今後多層パーセプトロンは時間を経るほどにより高みを目指して発展するでしょう。
また、今述べたような状況から多層パーセプトロンを学びたい人も確実に増えています。こちらについてはプログラミング言語「Python」などを利用すれば、基本のパーセプトロンや多層パーセプトロンは簡単に実装できます。
もちろん、Pythonや学習に必要なライブラリを理解する必要がありますが、学習環境のハードルは大きく下がっています。そのため、個人で多層パーセプトロンを扱いやすくなっており、今後より学ぶ人が増えていくことで、発展のスピードはさらに加速していくでしょう。
そうなっていけば画期的な技術や新たなアプローチがみつかることで、より便利な社会になっていくかもしれません。
さて、今回は機械学習の基礎として多層パーセプトロンとは何であるのかを基本からわかりやすく解説し、以下の点も併せてお伝えしました。
- 多層パーセプトロン(MLP)とはニューロンの働きをモデル化したパーセプトロンの構造を多層化したもの
- 多層パーセプトロンの長所は線形分離不可能なものでも対応できること
- 多層パーセプトロンには多層化することで学習が進まなくなる勾配消失問題がある
- 両者には中間層を含む3層で構成されるのが多層パーセプトロン、中間層をよりたくさん設けたものがディープラーニングという関係性がある
- 多層パーセプトロンを応用したニューラルネットワークにはCNN(畳み込みニューラルネット)やRNN(再帰型ニューラルネット)、LSTM(長短期記憶)、GAN(敵対的生成ネットワーク)などがある
- 多層パーセプトロンは日々進歩しており、最近では学習環境も整っているので今後より発展していく
昨今話題の機械学習やディープラーニングは多層パーセプトロンが基礎となって発展しています。そのため、ニューロンやパーセプトロンなどに関する知識をしっかりと押さえた上で多層パーセプトロンを学び、より発展的なニューラルネットワークについて学びましょう。
そうしていけばみなさんの手で新しい技術を作り出したり、新たなアプローチを発見できるかもしれません。
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。