Никак не работает. Для метода градиентного спуска функция активации должна быть непрерывна, да еще и желательно монотонна, желательно без нулей производной. А производная пороговой функции - ноль почти везде, поэтому градиент функции потерь (по которому считается приращение коэффициентов нейронов, и в который входит производная функции активации множителем) будет почти всегда нулевой - и приращение коэффициентов будет нулевым - обучение не пойдет. Можете попробовать использовать генетический алгоритм вместо градиентного спуска, он сможет. Опять-же, если у вас пороговая функция только на выходе - замените ее на сигмоиду с очень маленькой температурой(чтобы переход 0-1 был порезче), это позволит сеть обучить и градиентным спуском, хотя и очень медленно.
А исключающее или решается оптимально тремя нейронами с пороговыми функциями аналитически, без обучения - раскладываете xor по формуле через базовую логику в нормальную форму (и,или,не), для них находите коэффициенты нейронов.