function predict(x) {
  // y = a * x ^ 3 + b * x ^ 2 + c * x + d
  return tf.tidy(() => {
    return a.mul(x.pow(tf.scalar(3, 'int32')))
      .add(b.mul(x.square()))
      .add(c.mul(x))
      .add(d);
  });
}
We want to learn the coefficients that give correct solutions to the
following cubic equation:
     y = a * x^3 + b * x^2 + c * x + d
In other words we want to learn values for:
     a
     b
     c
     d
Such that this function produces 'desired outputs' for y when provided
with x. We will provide some examples of 'xs' and 'ys' to allow this model
to learn what we mean by desired outputs and then use it to produce new
values of y that fit the curve implied by our example.