Computing weighted sums and thresholds gives you a universal function approximator, so that's nice. I'm more interested in how the buggers set those weights and thresholds. It is hard to imagine them having access to any gradient information, so how do they work?