-
Notifications
You must be signed in to change notification settings - Fork 532
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEA] Promote FITSNE from experimental #3805
Comments
It looks like a lot of those differences can be reduced by adjusting late_exaggeration. It also looks like there are flyaways in the Iris dataset in cuML B-H. |
This issue has been labeled |
Just want to provide an update here for some tasks that should be completed before we officially promote the FFT TSNE from experimental (and potentially make it the default option). We've shown that the FFT algorithm works well on toy datasets but there has been evidence to suggest that 1) it may not always be providing better results over Barnes-hut, and 2) It may not be faster. To my knowledge, we have not done any formal benchmarks or scale analysis of the FFT algorithm, outside of the initial results that @zbjornson has been gracious enough to perform. At the very minimum, we should want the results to be at least as correct and performant as Barnes-hut in order to make the FFT variant the default option. If more stable results but not quite as performance, we could probalby still move FFT out of experimental but not make it the default. From my perspective, there are reall two tasks that remain:
One very easy place to try this is https://github.com/clara-parabricks/rapids-single-cell-examples/blob/master/notebooks/hlca_lung_gpu_analysis.ipynb |
I ran TSNE on a few real-world datasets to observe the embeddings and the performance.
I'll add here the results, starting with the dataset that you linked. (shape = (65462, 20)) |
On a Spotify dataset from Kaggle (link) with shape (2017, 8) and 500 iterations |
On a Credit card fraud detection from Kaggle too (link) with multiple iterations choices. Shape=(3492, 30) |
@lowener, these plots and benchmarks look great and it's nice to see the performance gap isn't prohibitively large between FFT and BH on these datasets. So long as they are converging in a reasonable number of iterations (which look to be similar-ish across BH and FFT), this could be evidence for supporting FFT as the default. Ideally, before we officially promote FFT to a default, we should also address this concern (since these datasets don't seem to be showing such a signficant slowdown across differing numbers of iterations): #3865 (comment) |
The runtimes for these examples are only a few seconds. When I benchmarked larger datasets that take between 30 seconds an 10 minutes a V100, FFT was between 1.3 and 2.2x faster than B-H. Now that K-L divergence can be calculated, it would be cool to plot that over each iteration. The plot in #3058 is partly wrong, but exact, FFT and B-H all seemed to converge at different rates. |
I fully agree we should be comparing larger datasets. It also looks like the early stopping was removed from barnes-hut at some point, which invalidates the benchmarks above. Out of curiosity, what datasets did you use for benchmarking? |
Closes #3805 Authors: - Micka (https://github.com/lowener) Approvers: - Corey J. Nolet (https://github.com/cjnolet) URL: #4361
@cjnolet I was using synthetic N-dimensional Gaussian blobs with between 4 and 50 dimensions, 100k and ~20M rows. I was using a fixed number of iterations without early stopping. (I have some concerns about the min grad norm for early stopping but haven't had time to dig into it yet.) edit Your comment here #4361 (comment)
is the opposite of my observations. |
Closes rapidsai#3805 Authors: - Micka (https://github.com/lowener) Approvers: - Corey J. Nolet (https://github.com/cjnolet) URL: rapidsai#4361
I'll attach embeddings of some popular datasets using cuML t-sne (FFT), cuML t-sne (BH), and sklearn t-sne (BH)
The text was updated successfully, but these errors were encountered: