Haskell で『ゼロから作るDeep Learning』(1)
『ゼロから作るDeep Learning – Pythonで学ぶディープラーニングの理論と実装』の読書メモです。
この書籍のサンプルプログラムは Python で書かれていますが、表題の通り自分は Haskell で書いていきます。
今回は、2章全部です。
2章 パーセプトロン
パーセプトロンとは
- パーセプトロンとは、複数の信号を受け取ってひとつの信号を出力するアルゴリズムのこと
- 信号を入出力するものを「ニューロン」や「ノード」と呼ぶ
- 入力信号が送られるときには重みが乗算される
入力(x) -> 重み(w) -> 出力(y)
- ニューロンは受け取った信号の総和を計算し、それがある値を超えたときのみに 1 を出力する
論理回路をパーセプトロンで表現する
- 論理回路 AND・NAND・OR はパーセプトロンを使って表現することができる
- 信号の総和の計算に「バイアス」を加えることで、ニューロンの発火のしやすさを調整できる
- 重みはその信号の重要度を調整するために使う
- 両者をまとめて「重み」と呼ぶこともある
- 論理回路 XOR は AND などと同じような構造のパーセプトロンでは表現できない
- 2次元グラフに描画したときに、出力する値の境界を1本の直線で分けることができない
- XOR はパーセプトロンの層を重ねることで表現できる
- 層を複数重ねたものを多層パーセプトロンと呼ぶ
参考文献
書いたコード
今回は、論理回路(AND・NAND・OR・XOR)を hmatrix というライブラリを使って実装しました。
deep-learning-practice/Gate.hs at master · ku00/deep-learning-practice · GitHub