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)

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

人工知能について知る!【ニューラルネットワークについて学ぶ】Next

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

Pickup post

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

Related post

  1. IT

    パソコンの選び方について【ベンチマーク選定】【2019年版】

    パソコンの選び方として、まず注目されるのが「CPU」です。「…

  2. AWS Practitioner

    AWS

    【合格体験記】AWS 認定クラウドプラクティショナーの効率的な勉強方法

    こんにちは、G-CLOUDです。2週間でAWS試験のプラクテ…

  3. AI人工知能

    人工知能について知る!【多層ネットワークの実装】

    前記事では活性化関数について学びましたが、本記事では非線形関数…

  4. IT

    【初心者必見】ネットワークを学ぶ前に知っておくべきこと

    本サイトに訪問して頂きありがとうございます。この記事では、ネット…

  5. IT

    How to mount a network drive on Windows

    In this brief article, I share the …

  6. IT

    web開発未経験者がwebの勉強をするには (HTML, CSS編)

    webアプリケーションが乱立する今の時代、一人でweb…

Comment

  1. No comments yet.

  1. No trackbacks yet.

日テレドラマ

おすすめ記事

  1. AWS Practitioner
価格満足度No1
  1. AI人工知能

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

    LPICとLinuCどっちを受験するべき?LPICとLinuCの違いを紹介
  3. IT

    【LINE Notify】毎朝天気のお知らせをLINEで送る方法
  4. Linux

    Linuxを基礎から勉強してみる【Linuxとは?】
  5. IT

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