LoginSignup
0
2

More than 3 years have passed since last update.

[ゼロから作るDeep Learning]パーセプトロンでANDゲート・ORゲート・NANDゲートを分かりやすく実装してみた

Last updated at Posted at 2019-10-13

はじめに

この記事はゼロから作るディープラーニング 3章パーセプトロンを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。

ANDゲート・ORゲート・NANDゲートとは

これらのゲートはパーセプトロンを元に作れる選別機のようなもので、決められた条件に合致した時だけ1を出力してそれ以外は0を出力します。簡単に言うと、機能を固定したパーセプトロンや機能を制限したパーセプトロンとも言えます。

ANDゲートは、2つある入力信号の両方が1の場合だけ1を出力します。
スクリーンショット 2019-10-12 20.37.06.png

ORゲートは、2つある入力信号のうち1つ以上が1の時に1を返します。
スクリーンショット 2019-10-12 20.39.17.png

NANDゲートは、ANDゲートの逆で2つある入力信号の両方が1の場合に0を返します。
スクリーンショット 2019-10-12 20.40.49.png

これらのゲートはパーセプトロンのパラメータを変えるだけで実装することができ、構造自体を変える必要はありません。
これがパーセプトロンの良いところであり、このメリットを活かすことでニューラルネットワークを実装していきます。

実際に実装してみる

今回の実装からはパーセプトロンのパラメータの1つである闘値の代わりにバイアスと言うパラメータを使っていきます。
理由としては、パーセプトロンをニューラルネットワークに進化させることを考えるとバイアスの方が適しているからです。

しかし、バイアスは闘値にマイナスをつけただけなので全く難しくはありません。
実際にバイアスを使ったパーセプトロンを図で表してみます。
スクリーンショット 2019-10-12 20.19.24.png
式が少し変わるだけなので難しくはありません。

ANDゲート実装

def AND_b(x1,x2):
    x = np.array([x1,x2])#入力信号
    w = np.array([0.5,0.5])#重み
    b = -0.7#バイアス
    newlon = x*w
    newlon = newlon.sum()
    if newlon + b > 0:
        return 1
    elif newlon + b <= 0:
        return 0

ORゲート実装

def OR_b(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.4
    newlon = x*w
    newlon = newlon.sum()
    if newlon + b > 0:
        return 1
    elif newlon + b <= 0:
        return 0

NANDゲート実装

def NAND_b(x1,x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    newlon = x*w
    newlon = newlon.sum()
    if newlon + b > 0:
        return 1
    elif newlon + b <= 0:
        return 0
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2