はじめに
こんにちは、初めまして。
今回は初めての記事ということで、ディープラーニングの礎ともなる考え方のパーセプトロンについて(私が)勉強していきたいと思います。
下記の本を通読してます。
パーセプトロンとは一般的に図1のようなモデルで表され、複数の入力信号を受け取り1つの出力信号を得るというものです。
式で表すと以下のようになります。
一応Python3でと言っているのでPython3でも記述しときました。
def y(w1,x1,w2,x2,theta):
tmp = w1*x1+w2*x2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
については上記に述べた通りで、は各入力信号に対しての重みを表し、θはニューロンの発火(y=1を出力した時)しやすさー閾値(いきち)を表しています。
重みは入力信号ごとに与えてあげます、これはその信号の重要度を示すものとなり、アイドルユニットの中に推しが一人いたとすればその子の重みパラメータが他より高いみたいな感じです。 ?
例として論理回路のANDゲートをパーセプトロンを使ってPython3で実装してみようと思います。
ANDゲートの真理値表を図2に示します。
この真理値表からわかるように、が両方とも1の時y=1が出力されます。
つまり閾値θはと重みの積和未満にしなければいけないことがわかります。
この時取り得るパラメータはいくらでもありますが、ここでは図3のようにしたいと思います。
これで上で示したプログラムを少し変えて実際にANDゲートの出力を見てみたいと思います。
計算ではを図2の入力とした時より図4のようになるはずです。
プログラムは以下のものを使用します。
def AND(x1,x2):
w1 = 0.5
w2 = 0.5
theta = 0.8
tmp = w1*x1+w2*x2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
このプログラムを実際にJupyter notebookやSpyderで実行すると図5のような結果が得られました。
以上でパーセプトロンによるANDゲートの実装はできました。
ORやNANDは?
NANDもORも同じようにしてあげることで実装できます。
ここでは一例として入力パラメータと実行結果を図6、図7に示します。上のプログラムの2行目~4行目の部分を変えてあげれば問題なく動きます。
他の論理ゲート
TeXとかMarkdownとかいろいろ疲れたので加筆か次回書きます。
NANDゲートだけでド・モルガンの法則を用いてしこしこ式変形していけばAND,OR,XOR...すべての論理ゲートを作ることが可能です。ただ単純パーセプトロンでは一層しかないという点で限界が見えてきます。
参考