apple-0.2.0.0: test/examples/xor.apple
-- see: https://towardsdatascience.com/implementing-the-xor-gate-using-backpropagation-in-neural-networks-c1f255b4f20d
{ X ⟜ ⟨⟨0,0⟩,⟨0,1⟩,⟨1,0⟩,⟨1,1⟩⟩;
Y ⟜ ⟨0,1,1,0⟩;
sigmoid ← [1%(1+ℯ(_x))];
sDdx ← [x*(1-x)];
sum ⇐ [(+)/x];
forward ← λwh.λwo.λbh.λbo.
-- ho: 4x2
{ ho ← sigmoid`{0} ([(+)`bh x]'(X%.wh))
-- prediction: 4
; prediction ← sigmoid'((+bo)'(ho%:wo))
; (ho,prediction)
};
-- wh: 2x2 wo: 2 bh: 2 bo: (scalar)
train ← λinp.
{ wh ← inp->1; wo ← inp->2; bh ← inp->3; bo ← inp->4
; o ← forward wh wo bh bo
; ho ⟜ o->1; prediction ⟜ o->2
; l1E ← (-)`prediction Y
; l1Δ ← (*)`(sDdx'prediction) l1E -- 4
; he ← l1Δ (*)⊗ wo -- 4x2
; hΔ ← (*)`{0,0} (sDdx`{0} ho) he -- 4x2
; wha ← (+)`{0,0} wh ((|:X)%.hΔ)
; woa ← (+)`wo ((|:ho)%:l1Δ)
; bha ← sum'((<|)`{0,1} bh hΔ)
; boa ← bo + sum l1Δ
; (wha,woa,bha,boa)
};
wh ⟜ 𝔯_1 1;wo ⟜ 𝔯_1 1;bh ⟜ 𝔯_1 1;bo ⟜ 𝔯_1 1;
train^:10000 (wh,wo,bh,bo)
}