この記事の目的
本記事は、Deep Learningの入門書「ゼロから作るDeep Learning」を参考に、Juliaを用いて同書の内容を実装してみる、という試みです。
※これはあくまで筆者の一つの試みと提案で、必ずしも内容が正解ではありませんのでご了承お願い致します。
また、より良いアドバイスや協力のご提案などありましたら、お気軽にお声がけ頂けますと幸いです。
今回取り組むこと
本記事は、参考書の2章にあたります。
今回は以下の基本的な4つの論理回路を実装してみます。
①ANDゲート
②NANDゲート
③ORゲート
④XORゲート
①ANDゲート
ANDゲートについては、参考書のp.23に書かれています。
ANDゲートは、真理値表で書くと以下のようになります。
x1及びx2が入力、yが出力です。
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
参考書のソースを元に、Juliaで実装してみます。
wは重み、bはバイアスです。
function AND(x1, x2)
b = [-0.7]
x = [x1 x2]
w = [0.5; 0.5]
calc = x * w + b
if calc[1] <= 0.0
return 0
else
return 1
end
end
ANDゲートを実装しました。
真理値表通りに動作することを確認します。
↑上枠(灰色網掛け)が実行部分、下部の数字の並びが実行結果です。
真理値表のyの値通りに動作していることが確認できました。
②NANDゲート
続いて、NANDゲートを実装します。
NANDゲートは、真理値表で書くと以下のようになります。
x1及びx2が入力、yが出力です。
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
NANDゲートの実装は以下としました。
function NAND(x1, x2)
b = [0.7]
x = [x1 x2]
w = [-0.5; -0.5]
calc = x * w + b
if calc[1] <= 0.0
return 0
else
return 1
end
end
NADゲートの動作確認を行います。
上記、NANDゲートの動作確認ができました。
③ORゲート
続いて、ORゲートを実装します。
ORゲートは、真理値表で書くと以下のようになります。
x1及びx2が入力、yが出力です。
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
ORゲートの実装は以下としました。
function OR(x1, x2)
b = [-0.2]
x = [x1 x2]
w = [0.5; 0.5]
calc = x * w + b
if calc[1] <= 0.0
return 0
else
return 1
end
end
④XORゲート
最後にXORゲートを実装します。
XORゲートは排他的論理和とも呼ばれています。
真理値表は以下となります。
x1及びx2が入力、yが出力です。
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
XORゲートは、これまで作成したAND,NAND,OR各ゲートの組み合わせで実現できます。
以下のような回路を構成します。
s1,s2はそれぞれNAND,ORゲート通過時の中間値です。
実装は以下の通りです。
function XOR(x1, x2)
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
end
以上で論理回路の実装ができました。
次回は活性化関数の実装に入りたいと思います。
もくじ
(1)論理回路
(2)活性化関数
(3)3層ニューラルネットワークの実装
(4)ソフトマックス関数
(5)MNIST手書き数字認識 その①画像表示
(5)MNIST手書き数字認識 その②推論
関連情報
Julia早引きノート[01]変数・定数の使い方
https://qiita.com/ttabata/items/a1ada2c0cba03672e105
Julia - 公式ページ
https://julialang.org/
Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html
初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035
出典
■参考書
「ゼロから作るDeep Learning ~ Pythonで学ぶディープラーニングの理論と実装」
斎藤康毅 著/オライリー・ジャパン
ご意見など
ご意見、間違い訂正などございましたらお寄せ下さい。