message: Use 64bit aggregation for gradients and hessians since the 32 bit version is numerically unstable for large minibatches.
diff: @@ -501,11 +501,18 @@ def sparse_make_stats_update(
  example_partition_ids)
  # Compute aggregate stats for each partition.
  + # Since unsorted_segment_sum can be numerically unstable, use 64bit
  + # operation.
  + gradients64 = math_ops.cast(gradients, dtypes.float64)
  + hessians64 = math_ops.cast(hessians, dtypes.float64)
  per_partition_gradients = math_ops.unsorted_segment_sum(
  - gradients, mapped_partitions, array_ops.size(unique_partitions))
  + gradients64, mapped_partitions, array_ops.size(unique_partitions))
  per_partition_hessians = math_ops.unsorted_segment_sum(
  - hessians, mapped_partitions, array_ops.size(unique_partitions))
  -
  + hessians64, mapped_partitions, array_ops.size(unique_partitions))
  + per_partition_gradients = math_ops.cast(per_partition_gradients,
  + dtypes.float32)
  + per_partition_hessians = math_ops.cast(per_partition_hessians,
  + dtypes.float32)
  # Prepend a bias feature per partition that accumulates the stats for all
  # examples in that partition.
  bias_feature_ids = array_ops.fill(
  