『ゼロから作るDeep Learning』をScalaで実装する(その2) - パーセプトロン
前回の続き
ANDゲート、NANDゲート、ORゲート、XORゲートをパーセプトロンで実装します。
// Perceptron.scala import breeze.linalg._ object Perceptron { private def gate(w: DenseVector[Double], b: Double) (x1: Double, x2: Double): Double = { assert(w.size == 2) val x = DenseVector(x1, x2) if ((w dot x) + b <= 0) 0.0 else 1.0 } val AND = gate(DenseVector(0.5, 0.5), -0.7)_ val NAND = gate(DenseVector(-0.5, -0.5), 0.7)_ val OR = gate(DenseVector(0.5, 0.5), -0.2)_ def XOR(x1: Double, x2: Double): Double = { val s1 = NAND(x1, x2) val s2 = OR(x1, x2) AND(s1, s2) } }
コードの重複を避けたかったので、AND
、NAND
、OR
については共通のカリー化された関数gate
を用意し、それに部分適用する形で実装してみました。
GitHubにも上げた。
ここまでは簡単。次はニューラルネットでたぶんここからが本番。