Methods For Defending Neural Networks Against Adversarial Attacks