Gradient-based Training Algorithm