title: What's the difference between GradientTape, implicit_gradients, gradients_function and implicit_value_and_gradients?
body: <p>I'm trying to switch to TensorFlow eager mode and I find the documentation of <code>GradientTape</code>, <code>implicit_gradients</code>, <code>gradients_function</code> and <code>implicit_value_and_gradients</code> confusing. </p>
  
  <p>What's the difference between them? When should I use one over the other?</p>
  
  <p>The <a href="https://www.tensorflow.org/programmers_guide/eager" rel="nofollow noreferrer">intro point in the documentation</a> does not mention implicit* functions at all, yet almost all of the examples in TensorFlow repository seems to use that method for computing gradients.</p>