A constrained optimization approach to improve robustness of neural networks