3D molecular pre-training at scale · 5×5 cross validation · two data sets
Uni-Mol1 pre-trains a 3D SE(3)-invariant transformer on 209 million RDKit conformers by masked-atom prediction and coordinate denoising; Uni-Mol22 scales the idea to a two-track atom/pair transformer and reports downstream error falling as it grows from 84 million to 1.1 billion parameters. Both come with a fine-tuning package, unimol_tools, and that is how they are run here: the package's own recipe at its defaults, on the same fifteen ExpansionRx and Biogen endpoints, folds and held-out test sets as the rest of this site, and each encoder also frozen and read by TabPFN 35 exactly as Monroe is. Fine-tuned Uni-Mol2 84M is the stronger of the two and a real step up from Uni-Mol (30 wins, 12 no call, 3 losses over 45 endpoint × metric calls): it beats fine-tuned CheMeleon6 (31–8–6), never loses to LightGBM (42–3–0), and on ExpansionRx reaches the top Tukey tier on 14 of 27 combinations, more than Monroe + TabPFN 34 (9). But it is never best alone, it trails fine-tuned Atom-JEPA3 (3–6–36), and on Biogen it loses all 18 calls to Monroe and is on top of none. Frozen, neither Uni-Mol vector wins a single call against Monroe's; fine-tuning is what makes these models competitive.
Both fine-tuned arms are a single call to unimol_tools 0.1.5's MolTrain per repeat, with nothing of ours inside the training loop. split='select' with kfold=5 takes the repeat's training molecules tagged with the fold each is held out in, and fits one model per fold on the other four fifths, early-stopping it on the held-out fifth. Uni-Mol starts from the released mol_pre_all_h_220816 weights, Uni-Mol2 from the package's default 84M model; hydrogens are kept, and each molecule gets the package's own single RDKit conformer. Every setting is the package default: Adam at 1e−4 with linear warm-up and decay, batch 16, at most 100 epochs with a patience of 10, gradient clipping at 5 and mixed precision, one seed per repeat. One model per fold predicts every endpoint of its data set at once under the package's NaN-masked L1 loss (multilabel_regression), the multitask setting CheMeleon and Atom-JEPA are also fine-tuned in. Two choices are ours. Targets are standardised (target_normalize='standard'), because the default 'auto' applies log1p to skewed columns and these are already logs that go below −1. And each of the five fold models predicts the test set separately, rather than through MolPredict, which would average them and leave five scores where the protocol needs twenty-five.
One thing the package does that the other fine-tuned arms here do not: its target scaler is fitted on all five fifths of the training set before the folds are split (unimol_tools/data/datahub.py), so each fold's held-out fifth helps set the mean and standard deviation the model trains and early-stops in. The test set is never involved, so the scores below are unaffected; it is a small leak into early stopping only.
The frozen arms (unimol_tabpfn, unimol2_tabpfn) take the package's UniMolRepr CLS vector for every molecule — 512-d for Uni-Mol, 768-d for Uni-Mol2 84M, from the same conformers — and hand each fold's training vectors to TabPFN 3 with Monroe's exact call: one TabPFNRegressor, 8 estimators, softmax temperature 0.9, no PCA, the mean as the point estimate. Set against Monroe they differ only in the vector; set against the fine-tuned arm they show what fine-tuning buys.
The four comparators are imported unchanged from the nine-method foundation-model comparison and the Atom-JEPA study on the identical fold assignments: LightGBM on 2,048-bit Morgan counts8 (the classical floor), ChemProp7 fine-tuned from CheMeleon6 (the strongest 2D message-passing arm), Monroe + TabPFN 34 (the strongest frozen encoder read in context), and fine-tuned Atom-JEPA3 (a 39M-parameter 3D EquiformerV3 pre-trained by latent prediction on 19M Uni-Mol conformers). Uni-Mol2's 310M model was planned and dropped: at the package's batch of 16 it does not fit in the 16 GB of the faster GPU, and the slower one would have taken days.
Tukey HSD per endpoint and metric, counted the same way across every study on this site: a method is on top if Tukey's simultaneous correction cannot separate it from the best mean at α = 0.05, and it is only best alone if no other arm shares the top group. MAE is in the log units of each endpoint, followed by R².
| Endpoint | LightGBM | CheMeleon FT | Monroe/PFN3 | Atom-JEPA FT | Uni-Mol FT | Uni-Mol2 FT | Uni-Mol/PFN3 | Uni-Mol2/PFN3 |
|---|---|---|---|---|---|---|---|---|
| LogD | 0.545±0.012 | 0.427±0.018 | 0.402±0.015 | 0.382±0.014tied | 0.445±0.030 | 0.381±0.022tied | 0.724±0.017 | 0.583±0.006 |
| LogS | 0.454±0.015 | 0.358±0.017 | 0.380±0.009 | 0.323±0.010tied | 0.334±0.016 | 0.324±0.013tied | 0.457±0.007 | 0.468±0.009 |
| LOG_HLM | 0.332±0.009 | 0.314±0.014 | 0.293±0.009 | 0.277±0.014tied | 0.298±0.021 | 0.288±0.025tied | 0.365±0.016 | 0.335±0.009 |
| LOG_MLM | 0.410±0.014 | 0.399±0.030 | 0.358±0.011tied | 0.390±0.017 | 0.389±0.020 | 0.370±0.020tied | 0.420±0.010 | 0.395±0.008 |
| LOG_Caco_AB | 0.340±0.022 | 0.305±0.033 | 0.248±0.011best | 0.314±0.037 | 0.393±0.027 | 0.347±0.064 | 0.360±0.014 | 0.337±0.012 |
| LOG_Caco_Efflux | 0.432±0.019 | 0.375±0.034 | 0.346±0.012best | 0.375±0.034 | 0.445±0.025 | 0.413±0.045 | 0.434±0.012 | 0.397±0.013 |
| LOG_MPPB | 0.288±0.020 | 0.212±0.021 | 0.259±0.013 | 0.185±0.018tied | 0.203±0.020 | 0.200±0.018tied | 0.269±0.010 | 0.287±0.018 |
| LOG_MBPB | 0.223±0.018 | 0.157±0.018 | 0.192±0.016 | 0.124±0.005best | 0.168±0.008 | 0.149±0.014 | 0.227±0.010 | 0.251±0.021 |
| LOG_MGMB | 0.302±0.034 | 0.175±0.015tied | 0.204±0.033 | 0.163±0.010tied | 0.188±0.015 | 0.173±0.017tied | 0.259±0.017 | 0.246±0.020 |
| Endpoint | LightGBM | CheMeleon FT | Monroe/PFN3 | Atom-JEPA FT | Uni-Mol FT | Uni-Mol2 FT | Uni-Mol/PFN3 | Uni-Mol2/PFN3 |
|---|---|---|---|---|---|---|---|---|
| LogD | 0.510±0.021 | 0.671±0.019 | 0.718±0.017 | 0.754±0.015best | 0.647±0.035 | 0.724±0.022 | 0.186±0.033 | 0.431±0.009 |
| LogS | 0.335±0.036 | 0.474±0.029 | 0.442±0.028 | 0.562±0.021best | 0.446±0.029 | 0.502±0.031 | 0.238±0.018 | 0.255±0.021 |
| LOG_HLM | 0.139±0.045 | 0.221±0.071 | 0.314±0.049 | 0.388±0.062tied | 0.293±0.098 | 0.325±0.121tied | -0.017±0.071 | 0.111±0.038 |
| LOG_MLM | 0.084±0.064 | 0.135±0.141 | 0.290±0.048tied | 0.183±0.074 | 0.176±0.083 | 0.242±0.096tied | 0.036±0.041 | 0.132±0.036 |
| LOG_Caco_AB | -0.014±0.129 | 0.160±0.191 | 0.471±0.041best | 0.103±0.219 | -0.363±0.172 | -0.122±0.436 | -0.139±0.093 | 0.028±0.080 |
| LOG_Caco_Efflux | -0.135±0.096 | 0.110±0.158 | 0.275±0.054best | 0.112±0.158 | -0.238±0.124 | -0.099±0.226 | -0.167±0.061 | 0.024±0.071 |
| LOG_MPPB | 0.229±0.105 | 0.541±0.093 | 0.300±0.068 | 0.639±0.059tied | 0.578±0.079tied | 0.590±0.062tied | 0.265±0.047 | 0.187±0.091 |
| LOG_MBPB | 0.477±0.080 | 0.713±0.061 | 0.590±0.066 | 0.797±0.013best | 0.680±0.029 | 0.736±0.043 | 0.483±0.044 | 0.335±0.105 |
| LOG_MGMB | 0.260±0.148 | 0.642±0.027tied | 0.588±0.098 | 0.670±0.023tied | 0.598±0.035 | 0.623±0.041tied | 0.389±0.045 | 0.437±0.066 |
| Endpoint | LightGBM | CheMeleon FT | Monroe/PFN3 | Atom-JEPA FT | Uni-Mol FT | Uni-Mol2 FT | Uni-Mol/PFN3 | Uni-Mol2/PFN3 |
|---|---|---|---|---|---|---|---|---|
| LOG_SOL | 0.413±0.009 | 0.370±0.007 | 0.322±0.004best | 0.340±0.006 | 0.358±0.012 | 0.363±0.024 | 0.410±0.004 | 0.377±0.005 |
| LOG_HLM | 0.395±0.005 | 0.337±0.007 | 0.299±0.003tied | 0.295±0.008tied | 0.350±0.014 | 0.317±0.021 | 0.426±0.003 | 0.368±0.003 |
| LOG_RLM | 0.470±0.005 | 0.404±0.006 | 0.375±0.003best | 0.385±0.005 | 0.432±0.018 | 0.395±0.016 | 0.500±0.003 | 0.448±0.003 |
| LOG_MDR1_ER | 0.385±0.005 | 0.340±0.004 | 0.294±0.002best | 0.317±0.005 | 0.345±0.015 | 0.339±0.021 | 0.439±0.006 | 0.360±0.003 |
| LOG_HPPB | 0.576±0.033 | 0.558±0.025 | 0.438±0.017best | 0.500±0.019 | 0.510±0.034 | 0.514±0.032 | 0.575±0.017 | 0.539±0.019 |
| LOG_RPPB | 0.554±0.021 | 0.553±0.023 | 0.445±0.026best | 0.513±0.023 | 0.492±0.037 | 0.522±0.050 | 0.590±0.020 | 0.553±0.015 |
| Endpoint | LightGBM | CheMeleon FT | Monroe/PFN3 | Atom-JEPA FT | Uni-Mol FT | Uni-Mol2 FT | Uni-Mol/PFN3 | Uni-Mol2/PFN3 |
|---|---|---|---|---|---|---|---|---|
| LOG_SOL | 0.275±0.024 | 0.363±0.021 | 0.504±0.013best | 0.436±0.017 | 0.337±0.042 | 0.360±0.085 | 0.271±0.008 | 0.378±0.010 |
| LOG_HLM | 0.326±0.015 | 0.474±0.019 | 0.556±0.009tied | 0.573±0.016tied | 0.388±0.048 | 0.526±0.051 | 0.237±0.013 | 0.399±0.010 |
| LOG_RLM | 0.389±0.011 | 0.513±0.012 | 0.569±0.007tied | 0.564±0.012tied | 0.441±0.045 | 0.542±0.033 | 0.318±0.009 | 0.444±0.007 |
| LOG_MDR1_ER | 0.449±0.010 | 0.520±0.009 | 0.641±0.008best | 0.584±0.012 | 0.514±0.030 | 0.546±0.039 | 0.323±0.011 | 0.498±0.005 |
| LOG_HPPB | 0.129±0.094 | 0.230±0.065 | 0.478±0.036best | 0.390±0.038 | 0.330±0.074 | 0.314±0.083 | 0.166±0.048 | 0.263±0.050 |
| LOG_RPPB | 0.118±0.067 | 0.154±0.061 | 0.415±0.051best | 0.318±0.051 | 0.332±0.089 | 0.251±0.107 | 0.160±0.075 | 0.151±0.065 |
On ExpansionRx fine-tuned Atom-JEPA is on top of 19 of 27 combinations (7 of them alone), fine-tuned Uni-Mol2 of 14 — on six endpoints: LogD, LogS, LOG_HLM, LOG_MLM, LOG_MPPB and LOG_MGMB — always sharing the tier, and Monroe + TabPFN 3 of 9. Fine-tuned Uni-Mol reaches it one time. On Biogen ADME the picture is Monroe's: on top of 18 of 18 combinations (13 alone), Atom-JEPA of 5, and no Uni-Mol arm of any. Neither frozen Uni-Mol arm is on top anywhere.
Paired by fold, a two-sided t-test over the 25 shared folds at p < 0.05 for each endpoint and metric. Fine-tuned Uni-Mol2 against fine-tuned Uni-Mol goes 30–12–3, so at the same recipe the larger, newer model is better, by a mean +0.060 R². It beats fine-tuned CheMeleon 31–8–6 where Uni-Mol does not (13–8–24), and both beat LightGBM (42–3–0 and 41–0–4). Against Monroe + TabPFN 3 Uni-Mol2 splits by data set: 14–5–8 on ExpansionRx and 0–0–18 on Biogen. Against fine-tuned Atom-JEPA, the other 3D model and one that was pre-trained on Uni-Mol's own conformers, both lose clearly: Uni-Mol2 3–6–36, Uni-Mol 3–5–37.
| Uni-Mol2 84M fine-tuned against | ExpansionRx, 27 | Biogen, 18 | Gain, mean of 15 | |||||
|---|---|---|---|---|---|---|---|---|
| wins | no call | losses | wins | no call | losses | Δ R² | MAE drop | |
| Atom-JEPA fine-tuned | 3 | 2 | 22 | 0 | 4 | 14 | −0.067 | −0.0141 |
| Monroe + TabPFN 3 | 14 | 5 | 8 | 0 | 0 | 18 | −0.073 | −0.0161 |
| ChemProp + CheMeleon, fine-tuned | 16 | 5 | 6 | 15 | 3 | 0 | +0.009 | +0.0124 |
| LightGBM + Morgan | 24 | 3 | 0 | 18 | 0 | 0 | +0.166 | +0.0680 |
| Uni-Mol fine-tuned | 22 | 5 | 0 | 8 | 7 | 3 | +0.060 | +0.0169 |
| Uni-Mol fine-tuned against Atom-JEPA fine-tuned | 0 | 3 | 24 | 3 | 2 | 13 | −0.127 | −0.0311 |
| Uni-Mol fine-tuned against Monroe + TabPFN 3 | 7 | 7 | 13 | 0 | 0 | 18 | −0.133 | −0.0331 |
| Uni-Mol fine-tuned against ChemProp + CheMeleon, fine-tuned | 5 | 5 | 17 | 8 | 3 | 7 | −0.051 | −0.0045 |
| Uni-Mol fine-tuned against LightGBM + Morgan | 23 | 0 | 4 | 18 | 0 | 0 | +0.106 | +0.0511 |
| Uni-Mol2 84M frozen + TabPFN 3 (fine-tuned against frozen) | 23 | 3 | 1 | 17 | 1 | 0 | +0.132 | +0.0563 |
| Uni-Mol fine-tuned against Uni-Mol frozen + TabPFN 3 | 23 | 0 | 4 | 18 | 0 | 0 | +0.161 | +0.0737 |
| frozen Uni-Mol2 + TabPFN 3 against Monroe + TabPFN 3 | 0 | 0 | 27 | 0 | 0 | 18 | −0.205 | −0.0725 |
| frozen Uni-Mol2 + TabPFN 3 against ChemProp + CheMeleon, fine-tuned | 0 | 2 | 25 | 3 | 3 | 12 | −0.123 | −0.0439 |
| frozen Uni-Mol2 + TabPFN 3 against LightGBM + Morgan | 9 | 5 | 13 | 14 | 4 | 0 | +0.034 | +0.0117 |
| frozen Uni-Mol + TabPFN 3 against Monroe + TabPFN 3 | 0 | 0 | 27 | 0 | 0 | 18 | −0.293 | −0.1067 |
| frozen Uni-Mol + TabPFN 3 against LightGBM + Morgan | 3 | 8 | 16 | 2 | 4 | 12 | −0.055 | −0.0226 |
Reading each encoder frozen through Monroe's TabPFN 3 call splits the distance from Monroe to fine-tuned Uni-Mol2 into two steps: first swap Monroe's vector for Uni-Mol2's, then fine-tune Uni-Mol2 instead of reading it.
| Endpoint | Data set | Swap Monroe's embedding for frozen Uni-Mol2's, same TabPFN 3 | Then fine-tune Uni-Mol2 instead | Fine-tuned Uni-Mol2 against Monroe |
|---|---|---|---|---|
| LOG_Caco_AB | ExpansionRx | −0.443 | −0.149 | −0.592 |
| LOG_Caco_Efflux | ExpansionRx | −0.251 | −0.123 | −0.374 |
| LOG_HLM | ExpansionRx | −0.203 | +0.213 | +0.010 |
| LOG_MBPB | ExpansionRx | −0.255 | +0.401 | +0.145 |
| LOG_MGMB | ExpansionRx | −0.150 | +0.185 | +0.035 |
| LOG_MLM | ExpansionRx | −0.159 | +0.111 | −0.048 |
| LOG_MPPB | ExpansionRx | −0.113 | +0.403 | +0.291 |
| LogD | ExpansionRx | −0.287 | +0.293 | +0.005 |
| LogS | ExpansionRx | −0.187 | +0.247 | +0.060 |
| LOG_HLM | Biogen ADME | −0.157 | +0.127 | −0.030 |
| LOG_HPPB | Biogen ADME | −0.215 | +0.052 | −0.163 |
| LOG_MDR1_ER | Biogen ADME | −0.143 | +0.047 | −0.095 |
| LOG_RLM | Biogen ADME | −0.124 | +0.098 | −0.026 |
| LOG_RPPB | Biogen ADME | −0.264 | +0.101 | −0.163 |
| LOG_SOL | Biogen ADME | −0.126 | −0.018 | −0.144 |
| median | ExpansionRx | −0.203 | +0.213 | +0.010 |
| median | Biogen ADME | −0.150 | +0.075 | −0.120 |
As a frozen vector Uni-Mol2's is behind Monroe's on all 15 endpoints, by a median −0.203 R² on ExpansionRx and −0.150 on Biogen, and neither frozen arm wins one of the 45 calls against Monroe (Uni-Mol2 0–0–45, Uni-Mol 0–0–45). Frozen Uni-Mol is behind even LightGBM (5–12–28); frozen Uni-Mol2 edges it (23–9–13) but loses to CheMeleon 3–5–37. Fine-tuning then lifts R² on 12 of 15 endpoints for Uni-Mol2 and 13 of 15 for Uni-Mol, by a median +0.213 and +0.075 R² for Uni-Mol2 on the two data sets (+0.207 and +0.158 for Uni-Mol), winning 40 of 45 calls against its own frozen arm (41 for Uni-Mol). The net against Monroe is a median +0.010 R² on ExpansionRx and −0.120 on Biogen. Unlike Monroe, whose encoder never sees these labels, these vectors were never meant to be used frozen: Uni-Mol is pre-trained to denoise coordinates and recover atoms, not to summarise a molecule in one token.
The fine-tuned Uni-Mol arms are the least stable fine-tuned arms here. Across the fifteen endpoints the median ratio of their fold-to-fold R² standard deviation to fine-tuned Atom-JEPA's is 2.0 for Uni-Mol2 and 1.8 for Uni-Mol. It is worst on the two Caco-2 endpoints of ExpansionRx, LOG_Caco_AB and LOG_Caco_Efflux, where Uni-Mol2's mean R² is below zero and its standard deviation reaches 0.44: some folds are fine and some are badly miscalibrated. A likely contributor is that the package early-stops each fold model on one validation score pooled over every endpoint, so the epoch it keeps is the one that suits the data set as a whole, not the hardest endpoint in it.
The 100 fine-tuned fold models took 43 GPU hours, 3 for Uni-Mol and 40 for Uni-Mol2, across two machines (apollo, an RTX 5070 Ti; spark, a DGX Spark GB10, which took a median 3.3× as long per Uni-Mol2 fold). On the same machine a Uni-Mol2 fold took a median 8.8× as long as a Uni-Mol one, though the two keep similar epochs (a median best epoch of 33 against 30), so the cost is the larger model, not longer training. Time per fold is one MolTrain call's wall clock, five folds and the test predictions, shared evenly. The frozen arms need one forward pass per molecule and then TabPFN 3, minutes rather than hours, and are not tabulated.
| Arm | Data set | Machine | Fold models | Median minutes / fold | Median best epoch | Longest run, epochs | Total, GPU hours |
|---|---|---|---|---|---|---|---|
| Uni-Mol FT | Biogen ADME | apollo, GeForce RTX 5070 Ti | 25 | 1.9 | 23 | 52 | 0.8 |
| Uni-Mol FT | ExpansionRx | apollo, GeForce RTX 5070 Ti | 25 | 5.3 | 37 | 83 | 2.2 |
| Uni-Mol2 FT | Biogen ADME | apollo, GeForce RTX 5070 Ti | 15 | 18.4 | 29 | 68 | 4.4 |
| Uni-Mol2 FT | Biogen ADME | spark, GB10 | 10 | 56.8 | 30 | 55 | 9.5 |
| Uni-Mol2 FT | ExpansionRx | apollo, GeForce RTX 5070 Ti | 20 | 41.8 | 36 | 81 | 14.0 |
| Uni-Mol2 FT | ExpansionRx | spark, GB10 | 5 | 143.9 | 48 | 74 | 12.0 |
Reported the way “Even More Thoughts on ML Method Comparisons” and the protocol paper it points at11 argue comparisons should be: distributions over folds, simultaneous confidence intervals, paired tests on the folds, and no bolded maxima. Where two methods cannot be separated, both are reported as tied.
Code, per-fold metrics and every figure: studies/unimol.
unimol, from its released mol_pre_all_h_220816 weights. openreview:6K2RM6wVqKuunimol2. arXiv:2406.14969