Differentiable Visual Computing for Inverse Problems and Machine Learning