AI人工知能

人工知能について知る!【パーセプトロンについて学ぶ】

 

上記のサイトで、人工知能について学ぶ際に実際にプログラミングをしながら学ぶという話をしました。また、本記事ではディープラーニングの基礎知識として必要なパーセプトロンというアルゴリズムについてご紹介したいと思います。

・本サイトは以下の書籍を参考にしています。

文字だけで理解するのではなく、実際に手を動かしながら学ぶことで理解を深めることができると思います。

パーセプトロンとは?

パーセプトロンとは、複数の信号を入力として受け取り、一つの信号として出力する処理のことです。
信号は、「1=流す」「0=流さない」の2通りだけとなっています。

今後、学んでいくニューラルネットワークやディープラーニングへと進む上で、必要不可欠な考え方になりますので、本記事で確実に抑えていきましょう。

 

パーセプトロンを数式で表すと以下のようになります。

数式を少し説明したいと思いますが、

x1,x2は入力信号、yは出力信号、そしてw1,w2は重みを表現します。

wはweightの略です。

そして入力信号には、それぞれに固有の重み(w)が乗算されます。

そしてさらにそれらの値を足します。その総和が限界値であるθを超えた場合のみ「1」を出力するという意味になります。この「1」を出力する時「ニューロンが発火する」と一般的には呼びます。

パーセプトロンは、複数の入力信号に対してそれぞれ固有の重みを持っています。

そして、その重みによって各信号を制御し、重みが大きければ大きいほど、その信号に対する重要度が高くなっていくのです。

※そこまで深く考え込まず、今はそういうものなんだな~と思ってもらえれば大丈夫です。

単純な論理回路を作ってみる

1、AND演算

Pythonを使って、先ほど記述したパーセプトロンの数式に値を代入して計算をし、AND演算を実装してみたいと思います。

# coding: utf-8
import numpy as np

def AND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        print(0)
    else:
        print(1)

AND(0,0)
AND(1,0)
AND(0,1)
AND(1,1)

'''
【出力結果】
0
0
0
1
'''

先ほど、θを使いニューロンを発火させるトリガーとして数式を表しましたが、実装をする際には、θを-b(バイアス)に書き変えます。そうすると、数式が以下のようになります。

※バイアス=ここでは下駄を履かせるという意味で捉えてもらってかまいません。

AND演算をするためには、重みやバイアスは

(w1,w2,b)=(0.5,0.5,0.7)

(0.5,0.5,0.8)

(1.0,1.0,1.0)などで動作します。

重みやバイアスが決まったら、Pythonで実装してみましょう。

出力結果が意図した結果になっていれば成功です。

2、NAND演算

NAND演算を実装する際には、先ほどのAND演算で使った重みやバイアスを変更するだけで実装ができてしまいます。

AND演算:(w1,w2,b)=(0.5,0.5,0.7)

NAND演算:(w1,w2,b)=(-0.5,-0.5,-0.7)

# coding: utf-8
import numpy as np

def NAND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        print(0)
    else:
        print(1)

NAND(0,0)
NAND(1,0)
NAND(0,1)
NAND(1,1)

'''
【出力結果】
1
1
1
0
'''

3、OR演算

OR演算も実装する際には、AND演算で使った重みやバイアスを変更するだけで実装ができてしまいます。

AND演算:(w1,w2,b)=(0.5,0.5,0.7)

NAND演算:(w1,w2,b)=(0.5,0.5,0.2)

# coding: utf-8
import numpy as np

def OR(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        print(0)
    else:
        print(1)

OR(0,0)
OR(1,0)
OR(0,1)
OR(1,1)

'''
【出力結果】
0
1
1
1
'''

4、XOR演算

ここが少し、難しい所になります。XOR演算というのは入力、出力は以下のようになります。

しかし、これは重みやバイアスを変えるだけでは実装できません。

実際に先ほど使ったパーセプトロンの数式をグラフにしてみると分かりやすいと思いますが、AND演算やOR演算などは1次方程式なので直線になります。

しかし、XOR演算をする場合、曲線を表現しなければ実装はできません。

しかし、AND演算、OR演算、NAND演算を組み合わせることにより、XOR演算を実装することができるのです。

回路はこのような形になります。

そうしましたら、先ほど実装してきた演算を関数として、XOR演算を実装してみましょう。

ソースコードは以下のようになりますが、もっといい書き方はいくらでもあると思うので、著者よりもプログラミングができる方は是非効率の良い方法で実装してみてください。

# coding: utf-8
import numpy as np

def NAND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def OR(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def AND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def XOR(x1,x2):
    s1 = NAND(x1,x2)
    s2 = OR(x1,x2)
    y = AND(s1,s2)
    print(y)

XOR(0,0)
XOR(1,0)
XOR(0,1)
XOR(1,1)

'''
【出力結果】
0
1
1
0
'''




まとめ

パーセプトロンについて理解できましたか?

今後、学習していくニューラルネットワークなどのベースにもなってきますので、ここでつまづいてしまった方はもう一度じっくり考えながら実装してみてください。時には自分で考えて息詰まることも大切です。

次回は、「ニューラルネットワーク」の仕組みについて紹介していきたいと思います。

斎藤 康毅「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」(オライリージャパン,2016)

60か国の講師陣とマンツーマン!

Pickup post

  1. 【CCENT廃止】Cisco認定試験制度変更(2020年2月24日~)
  2. 【合格体験記】AWS 認定クラウドプラクティショナーの効率的な勉強方法

Related post

  1. IT

    【双方向NAT(Twice NAT)】概要と設定

    双方向NAT(Twice NAT)とは  双方向NATとは…

  2. CCENT/ICND1

    【CCENT/ICND1】ネットワークについて

    ネットワークとはコンピュータをお互いに接続し、通信できるよう…

  3. IT

    初心者必見!IT業界について知ろう!

    この記事では「IT業界についてよくわからない」「ITってどんな所で使わ…

  4. AI人工知能

    人工知能について知る!【ディープラーニングについて学ぶ】

    人工知能という言葉がTVなどでも取り上げられるようになり、将棋や囲碁の…

  5. IT

    【OTV(Overlay Transport Virtualization)】概要

    OTV(Overlay Transport Virtualizati…

  6. IT

    How to mount a network drive on Windows

    In this brief article, I share the …

Comment

  1. No comments yet.

  1. No trackbacks yet.

おすすめ記事

  1. AWS Practitioner
価格満足度No1
  1. 映画

    【評判】ザ・サークルを見てきた感想
  2. 海外ドラマ

    ウォーキング・デッド シーズン8【第2話の感想】懐かしの人と再会!
  3. 最新ニュース

    ビットコインキャッシュ【Bitcoin Cash】の概要と今後
  4. 英会話

    英語を勉強するならDMM英会話!効率的な勉強法をご紹介
  5. 英会話

    【語学留学】英語偏差値底辺がフィリピンに行ってきた感想
PAGE TOP