お布団宇宙ねこ

にゃーん

Haskell で『ゼロから作るDeep Learning』(1)

『ゼロから作るDeep Learning – Pythonで学ぶディープラーニングの理論と実装』の読書メモです。

www.oreilly.co.jp

この書籍のサンプルプログラムは Python で書かれていますが、表題の通り自分は Haskell で書いていきます。

今回は、2章全部です。

2章 パーセプトロン

パーセプトロンとは

  • パーセプトロンとは、複数の信号を受け取ってひとつの信号を出力するアルゴリズムのこと
  • 信号を入出力するものを「ニューロン」や「ノード」と呼ぶ
  • 入力信号が送られるときには重みが乗算される
    • 入力(x) -> 重み(w) -> 出力(y)
  • ニューロンは受け取った信号の総和を計算し、それがある値を超えたときのみに 1 を出力する
    • そのある値を「閾値」と呼ぶ
    • 閾値を超えて 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