Deeplearning ch02 and_gate.py
Chapter 02
第1章はnumpyのざっとした説明とmatplotlibの使い方の説明でしたが、第2章よりDeep Learning (深層学習に向けて初歩的なアルゴリズムパーセプトロンとAND、NAND、OR、XORゲートのプログラム内容の紹介をします。(第3章にニューロラルネットワークの説明があります。)
パーセプトロンとはパーセプトロン(perceptron)は、心理学者・計算機科学者のフランク・ローゼンブラットが1957年に考案し、1958年に論文を発表した、人工ニューロンやニューラルネットワークの一種。(Wikipediaより)複数の入力信号を処理して、一つ出力を行うアルゴリズムです。ここで言う「処理」とは信号を流す(1)か流さない(0)かを決める処理となります。
パーセブトロンのアルゴリズムを式で表すと以下のようになります。
は出力信号、は入力信号、は重み、は閾値(しきいち)を表します。入力信号に重みを掛けたものの総和が閾値を超えると出力信号1が出力されます。
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: return 0 else: return 1 if __name__ == '__main__': for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]: y = AND(xs[0], xs[1]) print(str(xs) + " -> " + str(y))
⇒ 重みが0.5、は閾値が0.7のAND関数を定義します。入力信号がそれぞれ(1,1)だとすると、となり出力信号1が出力されます。入力信号がそれぞれ(0,0)とすると、(1,0)とするととなり、出力信号は全て0です。
入力信号が0,1である理由は、パーセプトロンの組み合わせにより、複雑な関数であってもパーセプトロンで表現できるという利点を前提としており、パーセプトロンからの出力(0,1)が次のパーセプトロンに入力されると想定しているためです。