デジタルトレンドナビ
システム開発

2023.10.25

パーセプトロンとは?仕組みとメリット・デメリット、実装まで初心者向けに解説

パーセプトロンとは?仕組みとメリット・デメリット、実装まで初心者向けに解説

Pythonを用いたAI開発を行う際、つまずきやすいポイントにパーセプトロンがあります。パーセプトロンを学習しようとすると、専門用語や英語が多く出てくるため、簡単には学習できません。


そこで今回は、パーセプトロンについて解説します。なお、本記事を読むことで以下の内容が理解できます。

この記事でわかること

  • パーセプトロンについて
  • パーセプトロンの仕組み
  • 単純パーセプトロンのメリットとデメリット
  • 多層パーセプトロンのメリットとデメリット

パーセプトロンとは

パーセプトロンとは

パーセプトロンとは、計算や処理の方法であるアルゴリズムの一種です。古くから存在しますが、現在話題となっているディープラーニングの大元になる存在です。ディープラーニングについては、後述します。


特徴としては、人間の脳に張り巡らされている神経の回路に似せて作った学習モデルということです。学習モデルとは、入力されたデータを解析して別の形で出力する仕組みです。学習モデルによって、さまざまな仕組みがあります。


脳神経の回路に似せて作るので、学習する際は人間や動物の脳神経細胞がどのように作用しているかを理解する必要があります。脳神経細胞や回路などという難しい言葉が出てくると、とても複雑なものを想像するかもしれません。


パーセプトロンを理解すべき理由

ディープラーニングを学ぶうえで、パーセプトロンの理解は欠かせません。なぜなら、ニューラルネットワークやディープラーニングの大元にあたるからです。ディープラーニングや後ほど解説するニューラルネットワークの仕組みはとても複雑です。


しかし、これら3つの仕組みはほとんど違いがありません。最も単純なパーセプトロンを学ぶことで、ほか2つの仕組みも学習しやすくなるでしょう。

ニューラルネットワークとは

ニューラルネットワークとは、人間の脳内の神経細胞の回路を人工ニューロンで表現したものです。人工ニューロンとは、神経細胞(ニューロン)を数学的に真似したものを指します。


仕組みとしては、パーセプトロンを複数個組み合わせて作られます。つまり、パーセプトロンという脳神経を集めて、ニューラルネットワークという脳を作るというイメージです。


主に、音声や画像などのパターンを認識するときに活用されています。機械学習やディープラーニングを学ぶうえでの基礎なので、押さえておきましょう。

ディープラーニングとは

ディープラーニングは、コンピューターに大量のデータを読み込ませて、データのパターンやルールなどを学習させる技術です。AI技術の一部に含まれており、AIの進化をサポートしています。


また、ディープラーニングはさまざまな分野へ進出しています。たとえば、自動車業界の自動運転です。標識の認識や人間を避ける運転などはディープラーニングによるものです。


大量の情報を読み込ませることで高度なパフォーマンスを発揮できるため、従来の技術では再現ができません。その要因には、ニューラルネットワークがベースになっていることが挙げられます。


従来のデータ分析は、入力したらそのまま出力する仕組みでした。しかし、ディープラーニングはその間に、多層構造のニューラルネットワークを設けています。このニューラルネットワークに、テキストや音声などの大量のデータを認識させることで、データのパターンやルールなどを学習します。

なお、層が多くなるほど情報の伝達と処理の量が増えます。

パーセプトロンの仕組み

パーセプトロンの仕組み

パーセプトロンには以下の2つがあります。

  • 単純パーセプトロン
  • 多層パーセプトロン

この章では、それぞれの仕組みやメリット、デメリットについて解説します。

単純パーセプトロン

単純パーセプトロンは、ひとつのパーセプトロンしか使わないアルゴリズムです。複数の入力に対して、ひとつの出力を行います。なお、出力は0か1のどちらか一方です。


まずは、入力が2つの場合、それぞれを順番にX1、X2とします。それぞれの入力には、重みW1、W2が加わります。計算式としてはそれぞれ「W1X1」と「W2X2」です。


0か1のどちらを出力するかを決めるには、上記の2つの合計がしきい値よりも多いか少ないかを確かめる必要があります。なお、しきい値は自由に調整可能です。


計算式としては「W1X1+W2X2>しきい値 なら1を出力」「W1X1+W2X2≦しきい値 なら0を出力」となります。補足として、重みとしきい値の説明は以下のとおりです。

  • 重み:どの入力が重要なのかをコントロール
  • しきい値:出力のしやすさをコントロール

単純パーセプトロンのメリット

単純パーセプトロンのメリットは以下の3点です。

  • 数式がシンプル
  • ディープラーニングの基礎となっている
  • 2つのデータから1つのデータを出力するのに向いている

このなかでも、ディープラーニングの基礎となっているという点を解説します。後ほど解説する多層パーセプトロンやディープラーニングは、単純パーセプトロンから派生しました。そのため、単純パーセプトロンを学ぶということは、多層パーセプトロンやディープラーニングの学習効率を上げることにつながります。

単純パーセプトロンのデメリット

単純パーセプトロンのデメリットは、線形分離可能な問題にしか対応できない点です。線形分離可能な問題とは、複数個あるものを2つにジャンル分けする問題を指します。単純パーセプトロンは、この線形分離可能な問題に対応しているのが特徴です。


しかし、単純パーセプトロンは、2つ以上のものを判別するといった、線形分離不可能な問題には対応できません。したがって、この点がデメリットといえるでしょう。

単純パーセプトロンの実装

単純パーセプトロンを実装する際は、プログラミング言語であるPythonを用いてください。理由は、比較的容易に実装できるからです。では、以下のようなANDゲートを用いて例を挙げます。

入力(x1,x2) 出力(y)
(0,0) 0
(1,0) 0
(0,1) 0
(1,1) 1

こちらをPythonの関数として実装すると以下のようになります。

# パーセプトロンの ANDゲート
# x1(入力1)x2(入力2)
def and_gate(x1, x2):

w1 = 0.3 # 重み1
w2 = 0.3 # 重み2
b = -0.5 # バイアス

a = b + x1 * w1 + x2 * w2

if a <= 0:
y = 0
else:
y = 1

return y # 出力

# 確認用コード
print(and_gate(0, 0))
print(and_gate(1, 0))
print(and_gate(0, 1))
print(and_gate(1, 1))

実行して、以下のように表示されたら動作しているということになります。

$ python and_gate.py
0
0
0
1

多層パーセプトロン

単純パーセプトロンは入力層と出力層の二層構成でした。一方で、多層パーセプトロンは、入力層と出力層との間に中間層あるいは隠れ層と呼ばれる層が追加された三層構成になっています。中間層が追加されることによって、表現量が増えて複雑な問題も解くことが可能です。なお、中間層は何層にも増やせます。


多層パーセプトロンは、バックプロパゲーションと呼ばれる方法で学習を行います。バックプロパゲーションは、誤差逆伝播法とも呼ばれることも多いです。


この方法では、入力したデータに対して重みを設定し、出力データを作ります。その出力データと入力データを比べて、その誤差が限りなく小さくなるように重みを調整します。このサイクルを繰り返すことによって、データを処理、分類できるようになります。

多層パーセプトロンのメリット

多層パーセプトロンのメリットは、さまざまなデータの学習ができる点です。機械学習させるデータとして思い浮かぶのが画像データだと思います。

しかし、多層パーセプトロンでは、画像のほかにも音声などのデータも学習させられます。これは、先ほど説明したバックプロパゲーションによって実現可能になっています。

また、多層パーセプトロンでは回帰問題を推論できます。つまり、今まで学習したデータをもとに、別のデータの予測が立てられるということです。過去の入学生の特徴を分析することで、来年の入学生の特徴を分析できます。

多層パーセプトロンのデメリット

多層パーセプトロンのデメリットは、どのようにデータを分類したのかがわからない点です。出力だけを見ると、思った通りに分類できていたとしても、どのような方法や基準で分類したかがわかりません。そのため、完全には信頼できないという懸念点があります。


もし、多層パーセプトロンによって出力されたデータを信頼して業務を進めたとします。分類の方法が意図していた方法ではなかった場合、業務に支障をきたすかもしれません。

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

単純パーセプトロンと同様に、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)
###############

こちらで、実装完了です。


まとめ

まとめ

パーセプトロンとは、アルゴリズムの一種でディープラーニングの下になっています。そのため、ディープラーニングについて理解したい方は、パーセプトロンから学ぶとよいでしょう。


なお、テクノデジタルでは、パーセプトロンおよびディープラーニングの導入を検討されている方に向けてサポートを行っております。導入予定の方はお気軽にお問い合わせください。

投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。