So that the subclasses can implement the optimizer main functions and be more concise than slamming it all into one neural_network class.