How Low Can We Go: Trading Memory for Error in Low-Precision Training