New features:
* `nt.empirical`:
* New `implementation=3` for `nt.empirical`, allowing to often speed-up or reduce the memory of the empirical NTK by orders of magnitude. Please see our ICML2022 paper [Fast Finite Width Neural Tangent Kernel](https://arxiv.org/abs/2206.08720), new [empirical NTK examples](https://github.com/google/neural-tangents#colab-notebooks), and [visit us on Thursday at ICML in-person](https://icml.cc/virtual/2022/spotlight/17194)!
* [New experimental prototype of using our empirical NTK implementations in Tensorflow via `nt.experimental.empirical_ntk_fn_tf`](https://github.com/google/neural-tangents/commit/e28971ce224857094dce8766a8127f1c17aa3c5f).
* [Make `nt.empircial` work with arbitrary pytrees](https://github.com/google/neural-tangents/commit/f86dafae0477900cf1b73ea7030ec7220949a03d).
* `nt.stax`:
* [`nt.stax.Index` layer mimicking numpy indexing](https://github.com/google/neural-tangents/commit/6f10d16979d9a69b1ddac31a4f2a3813abb30c78).
* [Expose the layer scaling parameter `s` in `parameterization="standard"`](https://github.com/google/neural-tangents/commit/239cc849cf55d672018bce0e3539e56b1a50870f).
Improvements:
* [Slightly lower memory usage in batching](https://github.com/google/neural-tangents/commit/d065a8c508d9cbac57604815ea5944d874bc8a28).
* [Many improvements to documentation and type annotations](https://github.com/google/neural-tangents/commit/eec18f56562864540f8141372d7df67f9c34373e).
* [Simplify test specifications and avoid relying on JAX testing utilities](https://github.com/google/neural-tangents/commit/a137b9672f855996748ad5a2f79e9ef0ebc0b8a8).
Bugfixes:
* [Make `nt.batch` use the correct (local) number of devices in a multi-host setting](https://github.com/google/neural-tangents/commit/23bea9f10e40a470521c8ca887be0fc6f5f2570f) (thanks jglaser).
Breaking changes:
* [If you've been using `nt.empirical` or `nt.monte_carlo` with `mask_constant` (empirical kernels with masking, for variable-lengths sequences), you now need to pass `nt.empirical_kernel_fn(stax.unmask_fn(apply_fn))` instead of `nt.empirical_kernel_fn(apply_fn)`. This is done in order to decouple `nt.empirical` and `nt.stax`, and the under-the-hood unmasking happening in `nt.empirical` is now delegated to `stax.unmask_fn`](https://github.com/google/neural-tangents/commit/f86dafae0477900cf1b73ea7030ec7220949a03d).