The example above presents the evolution of the tSNE embedding of the MNIST dataset which contains 60.000 images of handwritten digits. By clicking on Iterate, the tSNE embedding is optimized directly in your web browser. By clicking on Texture, you can visualize the trick that makes our algorithm so fast.
This work presents a TensorFlow.js powered implementation of the tSNE algorithm for high-dimensional data analysis. The development of WebGL tSNE was made possible by two new developments. First, the most computationally intensive operation, the computation of the repulsive force between points, is approximated by drawing a scalar and a vector field in an adaptive-resolution texture. Second, the generated fields are sampled and saved into tensors. Hence, the tSNE optimization is reformulated as a set of tensor operations that are efficiently computed on the GPU using TensorFlow.js. The algorithm builds upon the previous work presented in the Barnes-Hut SNE and the Approximated tSNE algorithms and allows a fast computation of tSNE embeddings directly in the browser.
Nicola Pezzotti came up with the idea of using adaptive textures to approximate the tSNE gradient during its work at the Computer Graphics & Visualization at the Delft University of Technology and implemented a first prototype in C++ and OpenGL. Nicola later joined Google AI in Zürich under the supervision of Alexander Mordvintsev who proposed to integrate the algorithm in TensorFlow.js. The tfjs-tsne library was developed by Nicola who received support from Nikhil Thorat for releasing the code and improving its quality. Yannick Assogba helped with the examples and supervised the release of the open source library.