Extensions to gradient descent