apple-0.3.0.0: test/data/trainXor.apple
-- see: https://towardsdatascience.com/implementing-the-xor-gate-using-backpropagation-in-neural-networks-c1f255b4f20d
-- wh: 2x2 wo: 2 bh: 2 bo: (scalar)
λwh.λwo.λbh.λbo.
{ X ⟜ ⟨⟨0,0⟩,⟨0,1⟩,⟨1,0⟩,⟨1,1⟩⟩;
Y ⟜ ⟨0,1,1,0⟩;
sigmoid ← [⅟(1+ℯ(_x))];
sDdx ← [x*(1-x)];
sum ⇐ [(+)/x];
-- ho: 4x2
-- prediction: 4
ho ⟜ sigmoid`{0} ([(+)`bh x]'(X%.wh));
prediction ⟜ (sigmoid ∴ (+bo))'(ho%:wo);
l1E ← (-)`Y prediction;
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 ← [(+)/ₒ x y]`{0,1} bh hΔ;
boa ← bo + sum l1Δ;
(wha,woa,bha,boa)
}
-- train ⟨⟨0.51426693,0.56885825⟩,⟨0.48725347,0.15041493⟩⟩ ⟨0.14801747,0.37182892⟩ ⟨0.79726405,0.67601843⟩ 0.57823076