Neural Networks for Decoding Error-Correcting Codes