Adversarial Attacks and Defenses in Machine Learning: Understanding Vulnerabilities and Countermeasures