More numpy optimization
Adaptable step size based on NLL
Print error rate on full training set

This makes it more obvious when it's predicting 0 for everything