【第1回】 ゼロから作る Deep Learning (2章:パーセプトロン) 解説ブログをやってみた

Python 機械学習

ゼロから作る Deep Learning を、データサイエンス初心者の私と一緒にやっていきませんか?

ゼロから作る Deep Learning とは

ゼロから作るDeep Learning  とは、python の基礎からのDeep Learning を実戦的に学べる書籍なのでぜひ手に取ってみてください。


今回は第1回、第2章のパーセプトロンについてやっていきたいと思います。(第1章はPythonの導入の部分なので今回は扱いません。)

今回の目標

今日の目標は、パーセプトロンの実装をおこない
・AND ゲート
・NAND ゲート
・OR ゲート
・XOR ゲート
の4つを実装するプログラムを書くことです。

第2章 パーセプトロン

パーセプトロンとは、ニューラルネットワークの起源となるアルゴリズムです。複数の入力信号に対し、出力信号を出す情報伝達の流れみたいなものをイメージして下さい。

ANDゲート

AND ゲートとは、2つの入力がどちらも1の時のみ1、その他は0となるような回路です。

# y=0 (w1x1+w2x2<=θ)
# y=1 (w1x1+w2x2>θ)
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 
 elif tmp>0:
    return 1
AND (0,0),AND(0,1),AND(1,0),AND(1,1)
# (0, 0, 0, 1) となればOK

NANDゲート

NAND ゲートとは、AND ゲートの逆で2つの入力がどちらも1の時のみ0、その他は1となるような回路です。

 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 elif tmp>0:
    return 1
NAND (0,0),NAND(0,1),NAND(1,0),NAND(1,1)
#(1, 1, 1, 0) となればOK

ORゲート

OR ゲートとは、2つの入力のうち、少なくとも一つが1であれば、

1となるような回路です。

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

OR(0,0),OR(0,1),OR(1,0),OR(1,1)
#(0, 1, 1, 1) となればOK

XORゲート(排他的論理和)

XORゲートは今までの3つとは違い、線形分離ができないため、既存のゲートの組み合わせによりゲートを表現することができます。

def XOR(x1,x2):
  s1 = NAND(x1,x2)
  s2 = OR(x1,x2)
  y= AND(s1,s2)
  return y
XOR(0,0),XOR(0,1),XOR(1,0),XOR(1,1)
#(0, 1, 1, 0) となればOK

まとめ

以上、AND,NAND,OR,XOR の4つの論理ゲートを実装できました。
パーセプトロンはニューラルネットワークの基本となる概念なので、ここをおろそかにせず、
次回以降のニューラルネットワークの実装に入っていきましょう。

ゼロから作る Deep Learning 解説ブログ 第2回 はこちらです。