Learning in Non-Stationary Environments