Walk me through the mathematics and intuition behind gradient boosting. How does it differ from random forests?