<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technical on Genomics x AI</title><link>https://genomicsxai.github.io/audience/technical/</link><description>Recent content in Technical on Genomics x AI</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 03 Aug 2026 11:41:32 -0700</lastBuildDate><atom:link href="https://genomicsxai.github.io/audience/technical/index.xml" rel="self" type="application/rss+xml"/><item><title>Beyond coverage tracks: fine-tuning AlphaGenome's splicing heads from scratch</title><link>https://genomicsxai.github.io/blogs/2026-009/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>https://genomicsxai.github.io/blogs/2026-009/</guid><description>&lt;aside class="summary-box"&gt;
 &lt;h2 class="summary-box__title"&gt;Summary&lt;/h2&gt;
 &lt;div class="summary-box__body"&gt;
 &lt;p&gt;DeepMind has released &lt;a class="link" href="https://deepmind.google/discover/blog/alphagenome-a-foundation-model-for-genome-biology/" target="_blank" rel="noopener"
 &gt;AlphaGenome&lt;/a&gt;’s code and model weights, and the community has since developed &lt;a class="link" href="https://github.com/genomicsxai/alphagenome_ft" target="_blank" rel="noopener"
 &gt;alphagenome_ft&lt;/a&gt; and &lt;a class="link" href="https://github.com/genomicsxai/alphagenome-pytorch" target="_blank" rel="noopener"
 &gt;alphagenome-pytorch&lt;/a&gt; to enable seamless fine-tuning in both JAX and PyTorch. These implementations support bigwig-based modalities such as RNA sequencing (RNA-seq) coverage tracks, but other RNA-seq-derived outputs, including splice site probabilities, splice site usage, and splice junctions, require additional work, from data preprocessing and loading to validating fine-tuning on samples not represented during AlphaGenome pretraining. What initially seemed like a straightforward extension became a useful exercise in understanding how large genomic models learn and how to debug new output heads.&lt;/p&gt;
&lt;p&gt;In this post, we share that development process: preprocessing the data, building loaders, running sanity checks, and overfitting a single interval, including the bugs we found along the way and how we fixed them. We then scale up to full fine-tuning and evaluation on held-out genomic intervals and report the resulting performance for two fine-tuning strategies.&lt;/p&gt;
&lt;p&gt;All code, model adaptations, and pipelines used for this blog post are &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/tree/v1.0.2" target="_blank" rel="noopener"
 &gt;available&lt;/a&gt;.&lt;/p&gt;

 &lt;/div&gt;
&lt;/aside&gt;

&lt;hr&gt;
&lt;h2 id="motivation"&gt;Motivation
&lt;/h2&gt;&lt;p&gt;This post describes how we fine-tuned and evaluated AlphaGenome’s splicing heads, covering data preprocessing, loading, debugging, and testing on held-out genomic intervals. Our broader goal is to develop a workflow that can adapt AlphaGenome to new RNA-seq samples that were not represented during the model’s original pretraining. The workflow learns sample-specific, multimodal transcriptomic patterns from those data and predicts them at genomic intervals held out during fine-tuning.&lt;/p&gt;
&lt;p&gt;As a case study, we selected two RNA-seq samples from López-Oreja et al. (2023): one carrying the cancer-driver mutation K700E in SF3B1, a core component of the spliceosome, and one wild-type sample. Although K700E changes only a single amino-acid residue, it can affect splicing across the transcriptome. In particular, the mutation is known to promote the use of cryptic splice sites, making it a useful test case for the RNA-seq-derived modalities considered here.&lt;/p&gt;
&lt;h3 id="what-comes-from-where"&gt;What comes from where
&lt;/h3&gt;&lt;p&gt;Since much of this work sits between &amp;ldquo;using AlphaGenome as published,&amp;rdquo; &amp;ldquo;reproducing details the paper doesn&amp;rsquo;t fully specify,&amp;rdquo; and &amp;ldquo;our own implementation choices,&amp;rdquo; here&amp;rsquo;s a breakdown of which parts of the pipeline fall into each category:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Component&lt;/th&gt;
					&lt;th&gt;Category&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Junction-head architecture and candidate splice-site conditioning&lt;/td&gt;
					&lt;td&gt;Inherited from AlphaGenome, unmodified&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;STAR/deepTools-based alignment and coverage processing&lt;/td&gt;
					&lt;td&gt;Reproduced from the AlphaGenome paper&amp;rsquo;s methods, best-effort (original preprocessing code is not public)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Splice site usage / junction count extraction scripts, on-the-fly per-modality normalization&lt;/td&gt;
					&lt;td&gt;New implementation choices, specific to this project&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;rope_params&lt;/code&gt; truncated-normal initialization, ratio-normalized junction loss&lt;/td&gt;
					&lt;td&gt;Debugging fixes for a mismatch between the paper&amp;rsquo;s pseudocode and the JAX/PyTorch implementations — not new methodological contributions&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="alphagenomes-splicing-heads"&gt;AlphaGenome&amp;rsquo;s splicing heads
&lt;/h2&gt;&lt;p&gt;AlphaGenome predicts four RNA-seq-derived modalities: coverage, splice site class, splice site usage, and splice junction counts.&lt;/p&gt;
&lt;p&gt;The coverage head predicts read depth along the sequence. The splice site head classifies each position as donor, acceptor, or background for each strand. The splice site usage head predicts how strongly each splice site is used, and the junction head predicts counts for candidate donor–acceptor pairs.&lt;/p&gt;
&lt;p&gt;Coverage, splice site usage, and junction counts use sample-specific output tracks, whereas the splice site head is shared across samples. The junction head also receives candidate donor and acceptor positions as part of its input and predicts a normalized count for each candidate pair.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/alphagenome_rna_heads.png" class="image-link" data-pswp-width="1189" data-pswp-height="345"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/alphagenome_rna_heads.png" width="500px" height="145"loading="lazy"
			alt="Figure 1. Overview of AlphaGenome’s splicing heads."
			title="Overview of AlphaGenome&amp;#39;s splicing heads." data-title-escaped="Overview of AlphaGenome&amp;amp;#39;s splicing heads."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="from-raw-data-to-preprocessed-training-tracks"&gt;From raw data to preprocessed training tracks
&lt;/h2&gt;&lt;p&gt;AlphaGenome&amp;rsquo;s data preprocessing code is not publicly available, though the key steps are described in the paper&amp;rsquo;s methods. To reproduce the pipeline as closely as possible, we wrote &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/blob/v1.0.2/workflows/01-obtain_data/rules/sf3b1mut.smk" target="_blank" rel="noopener"
 &gt;standardized Snakemake workflows&lt;/a&gt; that derive all four training tracks from a single STAR RNA-seq alignment BAM file. Reads are aligned with STAR following the AlphaGenome paper&amp;rsquo;s alignment settings, retaining only uniquely mapped reads on canonical chromosomes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Per-base RNA-seq coverage&lt;/strong&gt; (stranded or unstranded) is computed using &lt;code&gt;deepTools&lt;/code&gt;&amp;rsquo; &lt;a class="link" href="https://deeptools.readthedocs.io/en/develop/content/tools/bamCoverage.html" target="_blank" rel="noopener"
 &gt;&lt;code&gt;bamCoverage&lt;/code&gt;&lt;/a&gt;. Output: bigwig files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Splice site classes&lt;/strong&gt; are derived on the fly during data loading from the union of splice sites present in the splice site usage files, so no separate file is needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Splice site usage&lt;/strong&gt; is computed from the BAM using our custom script &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/blob/splice-finetuning/scripts/compute_ssu.py" target="_blank" rel="noopener"
 &gt;&lt;code&gt;compute_ssu.py&lt;/code&gt;&lt;/a&gt;, equivalent to &lt;a class="link" href="https://github.com/CraigIDent/SpliSER/tree/speedups" target="_blank" rel="noopener"
 &gt;&lt;code&gt;SpliSER&lt;/code&gt;&lt;/a&gt;. For each splice site supported by at least one junction, usage is estimated as the fraction of reads supporting that site relative to reads that skip it. Output: zstd-compressed parquet files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Splice junction counts&lt;/strong&gt; are available directly from STAR at alignment time, or can be extracted post-hoc from the BAM using our custom script &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/blob/splice-finetuning/scripts/get_star_junctions.py" target="_blank" rel="noopener"
 &gt;&lt;code&gt;get_star_junctions.py&lt;/code&gt;&lt;/a&gt;. Output: tab-separated files.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/data_prep_workflow.png" class="image-link" data-pswp-width="1108" data-pswp-height="282"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/data_prep_workflow.png" width="500px" height="127"loading="lazy"
			alt="Figure 2. Data preprocessing workflow."
			title="Data preprocessing workflow." data-title-escaped="Data preprocessing workflow."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;To make sure our custom implementations to compute splice junction counts and splice site usage matched how STAR and SpliSER calculate them respectively, we ran a comparison on chromosome 1 on our samples.&lt;/p&gt;
&lt;p&gt;In both cases we observe a Pearson correlation of 1 (for splice junction counts from uniquely mapped reads and for splice site usage), confirming the implementations are correct.&lt;/p&gt;
&lt;p&gt;Both implementations were also highly efficient in runtime, with &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/blob/splice-finetuning/scripts/get_star_junctions.py" target="_blank" rel="noopener"
 &gt;&lt;code&gt;get_star_junctions.py&lt;/code&gt;&lt;/a&gt; requiring ~10s and ~150 MB per sample, and &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/blob/splice-finetuning/scripts/compute_ssu.py" target="_blank" rel="noopener"
 &gt;&lt;code&gt;compute_ssu.py&lt;/code&gt;&lt;/a&gt; requiring ~20s and ~200 MB per sample compared to SpliSER&amp;rsquo;s ~600s and ~100 MB.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/benchmark_juncs_and_ssu.png" class="image-link" data-pswp-width="1013" data-pswp-height="1398"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/benchmark_juncs_and_ssu.png" width="350px" height="483"loading="lazy"
			alt="Figure 3. Benchmark of splice junction counting and splice site usage computation."
			title="Benchmark of splice junction counting and splice site usage computation." data-title-escaped="Benchmark of splice junction counting and splice site usage computation."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="data-loading-and-on-the-fly-normalization"&gt;Data loading and on-the-fly normalization
&lt;/h2&gt;&lt;p&gt;All four tracks are loaded jointly for each genomic interval and normalized on the fly before being passed to the model. Getting this right matters: RNA-seq coverage spans several orders of magnitude across genes and samples, splice junction counts are extremely sparse, and splice site labels are binary signals at a handful of positions in a million-base-pair window. Each modality needs a different normalization strategy to avoid one dominating the loss or presenting the model with uninformative targets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNA-seq coverage&lt;/strong&gt; bigwigs are read at 1 bp resolution. The raw values are loaded as-is; normalization happens at training time. Just before the loss is computed, targets are scaled into model prediction space by dividing by a per-track non-zero mean (computed once from the training set), applying a power transform (x^0.75) to compress dynamic range, and smooth-clipping extreme values. Model predictions are converted back to data space using the inverse of these operations for evaluation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Splice site classes&lt;/strong&gt; are derived on the fly as a 5-class label array: donor on the positive strand, acceptor on the positive strand, donor on the negative strand, acceptor on the negative strand, and background. All positions default to background, and annotated splice sites from the union of sites in the splice site usage files are then overlaid.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Splice site usage&lt;/strong&gt; values are loaded from the precomputed parquet files. For each genomic interval, only the splice sites overlapping that interval are retrieved, and usage values are arranged into a per-position array with two channels per sample (one per strand).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Splice junction counts&lt;/strong&gt; from STAR are CPM-normalized using the total mapped reads per sample, clipped at the 99.99th percentile, and then mean-scaled so that the typical non-zero value is close to 1. Junctions are assembled into a donor × acceptor count matrix, with forward and reverse strand channels interleaved across samples.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/data_loading_normalization.png" class="image-link" data-pswp-width="2250" data-pswp-height="2081"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/data_loading_normalization.png" width="600px" height="554"loading="lazy"
			alt="Figure 4. Normalizing training data on the fly."
			title="Normalizing training data on the fly." data-title-escaped="Normalizing training data on the fly."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="first-time-never-works"&gt;First time never works
&lt;/h2&gt;&lt;p&gt;As a first sanity check, we verified that the model could overfit a single genomic interval using linear probing (freezing the backbone and training only the new heads). A model with enough capacity should memorize a single batch; failure to do so points to a bug rather than a generalization problem. To make the test representative, we selected an interval with median splice junction density among all training intervals (see &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/blob/v1.0.2/figures/overfitting_interval_selection.ipynb" target="_blank" rel="noopener"
 &gt;this&lt;/a&gt; notebook for the selection details).&lt;/p&gt;
&lt;p&gt;The test was useful precisely because it failed. Coverage and splice site usage overfit fine on the first attempt; the splice site classification head did not overfit, and the splice junction head did not learn at all. The next two sections trace what was wrong with each of those two heads and how we fixed it.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/first_attempt.png" class="image-link" data-pswp-width="2091" data-pswp-height="421"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/first_attempt.png" width="900px" height="181"loading="lazy"
			alt="Figure 5. First attempt to overfit a single interval."
			title="First attempt to overfit a single interval." data-title-escaped="First attempt to overfit a single interval."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="why-the-splice-site-head-could-not-overfit"&gt;Why the splice site head could not overfit
&lt;/h2&gt;&lt;p&gt;The splice site classification head struggled to overfit when initialized randomly. This is not surprising: the purpose of fine-tuning AlphaGenome is not to re-learn the general splicing code from scratch. Unlike the splice site usage and junction heads, which are sample-specific (AlphaGenome exposes them per tissue/track), the splice site classification head captures a single, shared property across all samples: where donor and acceptor sites sit on each strand. There is one general splice site head, not a track to pick per sample or cell type, so it makes sense to start from its pretrained weights directly and let the sample-specific heads adapt instead.&lt;/p&gt;
&lt;p&gt;We explored three factors that could affect overfitting on the single interval: (1) initializing the splice site classification head from pretrained rather than random weights, (2) augmenting the interval&amp;rsquo;s splice sites with all annotated sites from the GTF (to reduce label sparsity, since AlphaGenome was pretrained on many more samples and thus more splice sites), and (3) segmenting the loss computation to match the 8-segment sequence parallelism used during AlphaGenome pretraining. We implemented support for all three options via &lt;code&gt;finetune.py&lt;/code&gt; flags: &lt;code&gt;--pretrained-head-samples&lt;/code&gt; to initialize specific head weights from a pretrained track (e.g. &lt;code&gt;splice_site:0&lt;/code&gt;), &lt;code&gt;--gtf&lt;/code&gt; to supply a GTF or parquet file of canonical splice sites, and &lt;code&gt;--num-segments&lt;/code&gt; to control how many segments the sequence is split into for loss computation (applies to all modalities, not just splicing).&lt;/p&gt;
&lt;p&gt;Initializing the splice site classification head from pretrained weights enabled clean overfitting regardless of whether GTF sites or loss segmentation were used. When starting from random weights, loss segmentation had a secondary effect: higher overall loss but faster overfitting, with or without the GTF augmentation.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/debug_splice_head.png" class="image-link" data-pswp-width="1772" data-pswp-height="418"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/debug_splice_head.png" width="600px" height="141"loading="lazy"
			alt="Figure 6. Debugging the splice site classification head. SS loss is the splice site cross-entropy loss during single-interval overfitting. Curves compare pretrained vs. random head initialization, with and without GTF augmentation (adding all GENCODE-annotated canonical splice sites in the interval on top of the ones observed in these two samples), and with and without 8-way loss segmentation."
			title="Debugging the splice site classification head." data-title-escaped="Debugging the splice site classification head."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="why-the-junction-head-could-not-learn"&gt;Why the junction head could not learn
&lt;/h2&gt;&lt;p&gt;In our first attempt, the splice junction head would not learn. Understanding why required looking at how the head works. For each genomic interval, the trunk produces 1 bp resolution embeddings across the full sequence. The junction head extracts embeddings only at the positions of known splice sites (up to 512; padded with -1 if fewer are present). Each extracted embedding is then linearly transformed with a learned per-sample scale and offset before RoPE positional encoding is applied. Junction counts for each donor-acceptor pair are then predicted as the softplus of the inner product between the corresponding donor and acceptor embeddings.&lt;/p&gt;
&lt;p&gt;Inspecting the pretrained weights revealed the problem: the junction head&amp;rsquo;s &lt;code&gt;rope_params&lt;/code&gt;, which contain the learned scale and offset, were non-zero and approximately truncated-normal distributed, whereas a newly initialized head set both to zero. With &lt;code&gt;scale = 0&lt;/code&gt; and &lt;code&gt;offset = 0&lt;/code&gt;, the transformation &lt;code&gt;scale * x + offset&lt;/code&gt; collapses every splice-site embedding to zero before RoPE is applied, preventing the head from learning properly. We confirmed the pretrained parameter distribution for predicting K562 polyA-plus RNA-seq stranded tracks, chosen only as an available stranded pretrained initialization rather.&lt;/p&gt;
&lt;p&gt;Cross-referencing with the original JAX implementation and reaching out to the authors (see &lt;a class="link" href="https://github.com/google-deepmind/alphagenome_research/issues/22" target="_blank" rel="noopener"
 &gt;GitHub issue&lt;/a&gt;) confirmed this was a bug also in the original implementation. The fix was to initialize &lt;code&gt;rope_params&lt;/code&gt; with a truncated normal distribution (std=0.1), controlled via the &lt;code&gt;--rope-init&lt;/code&gt; flag in &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/blob/splice-finetuning/scripts/finetune.py" target="_blank" rel="noopener"
 &gt;&lt;code&gt;finetune.py&lt;/code&gt;&lt;/a&gt; (default: &lt;code&gt;truncated_normal&lt;/code&gt;; &lt;code&gt;zeros&lt;/code&gt; is kept only for ablation experiments).&lt;/p&gt;
&lt;p&gt;With the fix in place, the randomly initialized junction head overfit the interval comparably to a head initialized from the pretrained K562 weights when splice-site positions were taken from the sample’s own annotated, STAR-called junctions, using &lt;code&gt;--junction-position-source annotated&lt;/code&gt; (the default). This position source is sample-dependent rather than GTF-derived: it uses the junctions observed in the sample to define the candidate splice-site positions for which the model learns to predict counts. We used the K562 weights only as a pretrained reference initialization, not because K562 is biologically matched to our samples.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/splice_junctions_debug-init.png" class="image-link" data-pswp-width="1998" data-pswp-height="903"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/splice_junctions_debug-init.png" width="800px" height="361"loading="lazy"
			alt="Figure 7. Debugging the splice junction head: single-interval overfitting loss with zeros vs. truncated_normal RoPE-parameter initialization, using splice site positions taken from the sample’s own annotated (STAR-called) junctions."
			title="Debugging the splice junction head: random initialization." data-title-escaped="Debugging the splice junction head: random initialization."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Using predicted positions from the splicing head (&lt;code&gt;--junction-position-source predicted&lt;/code&gt;) exposed a further issue: here it&amp;rsquo;s the pretrained-weight initialization of the junction heads that collapsed, while random initialization still learned. A possible explanation is that the pretrained junction heads were optimized alongside a dense, tissue-diverse set of splice site positions from pretraining, suggesting that positions predicted by a freshly fine-tuned splice site head on just two samples are sparser and differently distributed, likely placing it outside its operating range. Looking at the loss values pointed to a related problem: the junction cross-entropy was going negative during training, which would destabilize any head but hit the pretrained one harder.&lt;/p&gt;
&lt;p&gt;The root cause seemed to be a mismatch between the paper&amp;rsquo;s pseudocode and both the JAX and PyTorch implementations. The supplementary methods define &lt;code&gt;multinomial_cross_entropy&lt;/code&gt; by normalizing both targets and predictions to ratios before computing the cross-entropy, so &lt;code&gt;log(p_pred) &amp;lt;= 0&lt;/code&gt; always and the loss is guaranteed non-negative. The JAX implementation instead uses a log-normalizer formulation (&lt;code&gt;log_normalizer - log_likelihood&lt;/code&gt;), which is mathematically equivalent when junction counts are present but produces a negative contribution when a training window contains annotated splice sites with zero observed counts; common in sparse datasets like SF3B1 RNA-seq, where not every annotated site will have reads in a given sample. The PyTorch port (&lt;code&gt;--junction-loss original&lt;/code&gt;, the default) inherited this behavior unchanged.&lt;/p&gt;
&lt;p&gt;We opened another &lt;a class="link" href="https://github.com/google-deepmind/alphagenome_research/issues/24" target="_blank" rel="noopener"
 &gt;GitHub issue&lt;/a&gt; with the authors, who confirmed the discrepancy and introduced a ratio-normalized formulation: both targets and predictions are divided by their within-mask sums before computing &lt;code&gt;-p_true * log(p_pred)&lt;/code&gt;. We ported this as &lt;code&gt;--junction-loss normalized&lt;/code&gt;. Since &lt;code&gt;p_pred &amp;lt;= 1&lt;/code&gt;, its log is always non-positive and the loss is always non-negative. With this correction, training is stable, the loss no longer dips below zero on our window, and both random and pretrained-weight initialization can overfit the single interval regardless of whether annotated or predicted splice site positions are used.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/splice_junctions_debug-loss.png" class="image-link" data-pswp-width="999" data-pswp-height="461"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/splice_junctions_debug-loss.png" width="400px" height="184"loading="lazy"
			alt="Figure 8. Debugging the splice junction head: single-interval overfitting loss comparing the original (--junction-loss original) vs. ratio-normalized (--junction-loss normalized) junction cross-entropy formulation, across pretrained/random initialization and annotated/predicted splice site position sources."
			title="Debugging the splice junction head: loss formulation." data-title-escaped="Debugging the splice junction head: loss formulation."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="what-actually-worked-practical-recipe-for-full-fine-tuning-alphagenome-on-new-samples-across-rna-seq-modalities"&gt;What actually worked: practical recipe for full fine-tuning AlphaGenome on new samples across RNA-seq modalities
&lt;/h2&gt;&lt;p&gt;After resolving the failure points identified above, we scaled up to a first genome-wide fine-tuning run using linear probing, with the trunk frozen and only the new output heads trained. We used the settings that performed most reliably during single-interval debugging:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pretrained initialization for the splice site head;&lt;/li&gt;
&lt;li&gt;annotated junction positions;&lt;/li&gt;
&lt;li&gt;truncated-normal initialization for the junction head’s RoPE parameters;&lt;/li&gt;
&lt;li&gt;the normalized, ratio-based junction loss.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using annotated junction positions gives the junction head a reliable training signal. Positions predicted by a splice site head that is still learning seemed to introduce an additional source of error. This follows AlphaGenome’s pretraining strategy of first training on annotated positions and later distilling to predicted ones.&lt;/p&gt;
&lt;p&gt;We also used eight-way loss segmentation. Although the single-interval experiments did not establish it as necessary, we retained it for consistency with AlphaGenome pretraining as well.&lt;/p&gt;
&lt;p&gt;Performance on held-out intervals improved over training, alongside a modest but consistent generalization gap: at every epoch, we compared test-set performance against a same-sized random subsample of training intervals (&lt;code&gt;train_sample&lt;/code&gt;). At epoch 10, held-out test performance trailed the training subsample by roughly 0.06–0.10 Pearson r across all three modalities (gene expression, splice site usage, splice junctions), for both linear-probe and LoRA. Reassuringly, that gap stayed roughly constant across epochs rather than widening — i.e. the models aren&amp;rsquo;t progressively overfitting the training intervals with more training, though they also aren&amp;rsquo;t closing the gap to training performance either.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-009/full_runs.png" class="image-link" data-pswp-width="1355" data-pswp-height="359"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-009/full_runs.png" width="700px" height="185"loading="lazy"
			alt="Figure 9. Held-out (solid) vs. training-subsample (dashed) performance across full fine-tuning epochs, linear-probe vs. LoRA, for gene expression, splice site usage, and splice junctions."
			title="Held-out (solid) vs. training-subsample (dashed) performance across full fine-tuning epochs, linear-probe vs. LoRA, for gene expression, splice site usage, and splice junctions." data-title-escaped="Held-out (solid) vs. training-subsample (dashed) performance across full fine-tuning epochs, linear-probe vs. LoRA, for gene expression, splice site usage, and splice junctions."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Gene expression performance saturated early, so we asked whether LoRA fine-tuning - updating the trunk&amp;rsquo;s internal DNA representation via low-rank adapters, rather than only the new output heads — could do better, particularly on the splicing-specific modalities. Comparing linear-probing against LoRA at epoch 10 on the held-out test set:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Metric&lt;/th&gt;
					&lt;th&gt;Linear-probe&lt;/th&gt;
					&lt;th&gt;LoRA&lt;/th&gt;
					&lt;th&gt;Δ (LoRA − probe)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Gene expression (Pearson r)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;0.899&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;0.893&lt;/td&gt;
					&lt;td&gt;−0.006&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Splice site usage (Pearson r)&lt;/td&gt;
					&lt;td&gt;0.646&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;0.659&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;+0.013&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Splice junctions (Pearson r)&lt;/td&gt;
					&lt;td&gt;0.788&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;0.811&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;+0.023&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As expected, LoRA, by updating the trunk&amp;rsquo;s internal DNA representation instead of leaving it frozen, improved performance over linear probing on the splicing-specific metrics (splice site usage, splice junctions), while gene expression stayed essentially unchanged between the two (linear-probe even edges it out slightly there).&lt;/p&gt;
&lt;p&gt;The two strategies also differ substantially in compute footprint, though less in runtime than in memory. Full genome fine-tuning took about a week on a single GPU for both strategies, since backpropagating through the frozen trunk to reach the low-rank adapters in LoRA still requires storing its activations end to end, even though the trunk&amp;rsquo;s own weights aren&amp;rsquo;t updated. Where the two diverge is memory: LoRA needed a full NVIDIA H100 (80 GB), while linear probing, which only needs gradients for the new heads, ran comfortably on NVIDIA Hopper-class GPUs with 64 GB. See Xinming&amp;rsquo;s &lt;a class="link" href="https://genomicsxai.github.io/blogs/2026-005/" target="_blank" rel="noopener"
 &gt;GPU benchmarking post&lt;/a&gt; for a closer look at how these memory/compute tradeoffs play out across fine-tuning strategies.&lt;/p&gt;
&lt;p&gt;The workflows for full fine-tuning and evaluation are available in the repository: &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/tree/v1.0.2/workflows/05-full_finetuning" target="_blank" rel="noopener"
 &gt;&lt;code&gt;workflows/05-full_finetuning&lt;/code&gt;&lt;/a&gt; and &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/tree/v1.0.2/workflows/06-evaluation" target="_blank" rel="noopener"
 &gt;&lt;code&gt;workflows/06-evaluation&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="limitations"&gt;Limitations
&lt;/h2&gt;&lt;p&gt;The initial debugging (up to and including the loss-formulation fix) was performed on a single genomic interval with just two RNA-seq samples, so those specific observations may not generalize to larger or more diverse training sets — this is why we followed up with the full genome-wide fine-tuning run above. The preprocessing pipeline reproduces the main steps described in the AlphaGenome paper, but since the original code is not public, we cannot guarantee exact parity.&lt;/p&gt;
&lt;p&gt;The splicing fine-tuning code currently lives in a dedicated fork of &lt;a class="link" href="https://github.com/MiqG/alphagenome-pytorch/tree/splice-finetuning" target="_blank" rel="noopener"
 &gt;alphagenome-pytorch&lt;/a&gt; and is pending merge into the main branch. Support in the JAX-based &lt;a class="link" href="https://github.com/genomicsxai/alphagenome_ft" target="_blank" rel="noopener"
 &gt;alphagenome_ft&lt;/a&gt; will follow once that merge is complete. We&amp;rsquo;ll update this post once both merges land, with any code or figure references that change as a result.&lt;/p&gt;
&lt;p&gt;This post focuses on getting the implementation correct and measuring held-out performance, not on biological interpretation. We do not yet relate these predictions to independent data or ask whether the fine-tuned heads capture SF3B1-specific splicing changes — that comparison, and the accompanying biological interpretation, is left for the follow-up post. We also only evaluate two RNA-seq samples (one WT, one K700E) and a single AlphaGenome fold; generalization to more samples, mutations, or cell types remains to be tested.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;This process gave us a much better understanding of what it actually takes to fine-tune new transcriptomic heads on AlphaGenome. Extending the model to splicing modalities was not simply a matter of adding data loaders and output layers (as we hoped): higher label sparsity, head initialization, loss formulation, and the interaction between position sources and weight initialization all turned out to matter.&lt;/p&gt;
&lt;p&gt;The most useful strategy was to build confidence at each step before scaling up, from preprocessing validation and target inspection to single-interval overfitting. Each stage exposed a different class of problem. The single-interval test in particular was worth its weight as the two loss bugs and a zero-initialization bug in the junction head would have been much harder to diagnose in a full training run. We hope that sharing these intermediate failures, alongside the fixes and the flags that control them, makes it easier for others to extend AlphaGenome to new RNA-seq modalities and biological questions.&lt;/p&gt;
&lt;p&gt;The full fine-tuning results also suggest that gene expression and splicing tasks don&amp;rsquo;t need the same amount of compute: gene expression performance saturated early and didn&amp;rsquo;t benefit from LoRA, so linear probing on modest hardware is likely enough there, whereas the splicing modalities kept improving and gained the most from LoRA&amp;rsquo;s larger compute and memory footprint. If gene expression is your main target, linear probing is probably all you need; splicing tasks are where the extra compute marginally pays off.&lt;/p&gt;
&lt;p&gt;In the end, this project became more than a simple port. It resulted in reusable preprocessing scripts, training pipelines, and a set of practical checks and warnings that we hope make fine-tuning RNA-seq–derived splicing modalities on AlphaGenome more transparent and reproducible. We are especially grateful to the DeepMind developers for openly sharing their code and model weights, and for the responsiveness of Tom Ward (&lt;a class="link" href="https://github.com/tomwardio" target="_blank" rel="noopener"
 &gt;&lt;code&gt;@tomwardio&lt;/code&gt;&lt;/a&gt;) and Vincent Dutordoir (&lt;a class="link" href="https://github.com/vdutor" target="_blank" rel="noopener"
 &gt;&lt;code&gt;@vdutor&lt;/code&gt;&lt;/a&gt;) when we reported bugs and implementation issues; their feedback was instrumental in reaching the conclusions presented here. We hope these efforts help make fine-tuning splicing heads as seamless and accessible as possible for the broader community.&lt;/p&gt;
&lt;h2 id="reproducibility"&gt;Reproducibility
&lt;/h2&gt;&lt;p&gt;The repository &lt;a class="link" href="https://github.com/MiqG/alphagenome_finetuning_rna/tree/v1.0.2" target="_blank" rel="noopener"
 &gt;alphagenome_finetuning_rna&lt;/a&gt; contains all the necessary code, from data downloading to analysis and figures, to reproduce these results.&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Avsec, Ž. et al. Advancing regulatory variant effect prediction with AlphaGenome., 649, Nature (2026). &lt;a class="link" href="https://doi.org/10.1038/s41586-025-10014-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-025-10014-0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;López-Oreja, I. et al. SF3B1 mutation-mediated sensitization to H3B-8800 splicing inhibitor in chronic lymphocytic leukemia., 6, Life Sciences Alliance (2023). &lt;a class="link" href="https://doi.org/10.26508/lsa.202301955" target="_blank" rel="noopener"
 &gt;https://doi.org/10.26508/lsa.202301955&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dent, C.I. et al. Quantifying splice-site usage: a simple yet powerful approach to analyze splicing., 3, NAR Genomics and Bioinformatics (2021). &lt;a class="link" href="https://doi.org/10.1093/nargab/lqab041" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/nargab/lqab041&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ramírez, F. et al. deepTools2: a next generation web server for deep-sequencing data analysis., 44, Nucleic Acids Research (2016). &lt;a class="link" href="https://doi.org/10.1093/nar/gkw257" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/nar/gkw257&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dobin, A. et al. STAR: ultrafast universal RNA-seq aligner., 29, Bioinformatics (2013). &lt;a class="link" href="https://doi.org/10.1093/bioinformatics/bts635" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/bioinformatics/bts635&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements
&lt;/h2&gt;&lt;p&gt;Thanks to the &lt;a class="link" href="https://genomicsxai.github.io/" target="_blank" rel="noopener"
 &gt;Genomics x AI&lt;/a&gt; community and the Kundaje Lab at Stanford, where the AlphaGenome PyTorch port is being developed as well. We acknowledge the EuroHPC Joint Undertaking for awarding this project access to the EuroHPC supercomputer MareNostrum 5, hosted by the Barcelona Supercomputing Center (Spain) through an EuroHPC Development Access call. We acknowledge support of the Spanish Ministry of Science and Innovation through the Centro de Excelencia Severo Ochoa (CEX2020-001049-S, MCIN/AEI /10.13039/501100011033), and the Generalitat de Catalunya through the CERCA programme, and to the EMBL partnership. We are grateful to the CRG Core Technologies Programme for their support and assistance in this work.&lt;/p&gt;</description></item><item><title>Cherimoya: a lightweight genomic sequence-to-function model built for large-scale design and understanding</title><link>https://genomicsxai.github.io/blogs/2026-011/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://genomicsxai.github.io/blogs/2026-011/</guid><description>&lt;aside class="summary-box"&gt;
 &lt;h2 class="summary-box__title"&gt;Summary&lt;/h2&gt;
 &lt;div class="summary-box__body"&gt;
 &lt;p&gt;Cherimoya is a lightweight sequence-to-function (S2F) model for chromatin accessibility, adapting the &lt;a class="link" href="https://doi.org/10.1101/2024.12.25.630221" target="_blank" rel="noopener"
 &gt;Chrom/BPNet&lt;/a&gt; architecture into a far smaller and faster model through a redesigned convolutional block and custom GPU kernels. At 614K parameters (under 10% of ChromBPNet), it is small and fast enough to make the millions of forward passes that variant scoring, interpretation, and sequence design demand a practical proposition, rather than optimizing for benchmark scores alone.&lt;/p&gt;
&lt;p&gt;Three things stand out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smaller and better.&lt;/strong&gt; Despite the tiny parameter count, Cherimoya beats ChromBPNet on both accessibility and variant effect prediction, and closes over half the gap to massive generalist models like Borzoi and AlphaGenome on counts prediction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast enough to change what is feasible.&lt;/strong&gt; Custom GPU kernels make it roughly 6x faster than ChromBPNet at inference, and a single model trains in about 10 minutes on genome-wide data. Running ISM on CPU is faster than running Borzoi on a GPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usable without code.&lt;/strong&gt; Command-line tools and agentic skills take you from raw reads to trained models, attributions, and motif calls without writing a line of Python.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;: &lt;a class="link" href="https://github.com/jmschrei/cherimoya" target="_blank" rel="noopener"
 &gt;cherimoya&lt;/a&gt;&lt;/p&gt;

 &lt;/div&gt;
&lt;/aside&gt;

&lt;hr&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image1.png" class="image-link" data-pswp-width="1536" data-pswp-height="696"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image1.png" width="1536" height="696"loading="lazy"
			alt="Stylized hand-drawn illustration of a colorful DNA sequence feeding into a model, depicted as a black box, that outputs several genomic signal tracks."
			 class="gallery-image" data-flex-grow="220" data-flex-basis="529px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Genomic sequence-to-function (S2F) models use nucleotide sequence to predict genomic modalities, such as protein binding, chromatin accessibility, transcription, and alternative splicing. In recent years, these models have grown significantly in scale and can now make predictions for thousands of tracks simultaneously across hundreds of thousands of base pairs [1,2]. Although the details of these models’ architecture and training strategies differ significantly, there is usually one primary performance measure: how accurately they predict experimental readouts on held-out regions of the genome. &lt;em&gt;But, in our opinion, these sorts of predictions are the least interesting usage of S2F models.&lt;/em&gt; After all, most assays for genomic modalities provide genome-wide readouts and there is no more &amp;ldquo;secret held-out genome&amp;rdquo; that one could make predictions for in the same way an image classifier can make predictions for new images.&lt;/p&gt;
&lt;p&gt;Rather, we believe that the true value of S2F models is in their ability to do pretty much everything else: predicting variant (substitution, indel, structural) effects on phenotype, fine-mapping a set of candidate mutations to nominate putative drivers, dissecting the cis-regulatory logic encoded within individual loci of interest or globally, designing DNA with precise quantitative properties, prioritizing hypotheses by asking “what if?” questions before running experiments, etc. Predictive accuracy on held-out portions of the genome likely correlates somewhat well with performance on these tasks, but there are important distinctions. Exacerbating this issue, Rafi et al. [3] have raised concerns that the classic cross-chromosomal splits used for evaluation of S2F models may include homology leaks that sharpen this distinction, as model memorization of the training set translates into higher predictive performance on homologous regions in the validation and test sets but worse performance on downstream tasks.&lt;/p&gt;
&lt;p&gt;Another challenge emerges when considering that each of these downstream tasks can require running S2F models thousands to millions of times. As an example, running &lt;em&gt;in silico&lt;/em&gt; saturation mutagenesis on ~100k peaks of length ~1000bp requires ~300M forward passes. A model that is too big and/or too slow gives up much of its practical usefulness when it cannot be easily used at this scale, regardless of its benchmark score. In a world where academics are usually GPU-limited, especially for those whose research is not computationally focused, it is likely infeasible to use AlphaGenome for more than modest tasks. Taken together, these concerns mean that predictive performance should not be the only thing we consider when developing new S2F models.&lt;/p&gt;
&lt;p&gt;These concerns motivated us to develop Cherimoya: a lightweight S2F model inspired by Chrom/BPNet [4,5]. Despite having only 614K parameters – less than 10% that of ChromBPNet – Cherimoya performs better at predicting observed chromatin accessibility readouts and at variant effect prediction. Through a combination of fewer parameters and custom GPU kernels, Cherimoya can run several times faster at its peak performance than ChromBPNet, and even faster than that when just matching performance. A single Cherimoya model can take as little as 10 minutes to train on genome-wide data, even when such data includes hundreds of thousands of peaks. This small footprint has huge consequences in terms of the scale of problems that one can tackle, and how quickly one can investigate interesting hypotheses. Finally, through a set of command-line tools and agentic skills, one can easily train and use Cherimoya models without needing to write a single line of code.&lt;/p&gt;
&lt;h2 id="model-architecture-cheri-blocks--model-optimization"&gt;Model architecture, Cheri blocks &amp;amp; model optimization
&lt;/h2&gt;&lt;p&gt;Cherimoya models mimic the architecture of Chrom/BPNet models: an initial convolution layer with a wide kernel to capture long patterns, a stack of dilated residual layers, and a branch point where one path applies another convolution with a wide kernel to convert the internal representations into profile predictions, and on the other path a global average pooling followed by a dense layer is used to predict the log of the total number of reads mapping to the region. This multi-task framework allows Cherimoya to predict both the shape and strength of the signal in the same forward pass.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image2.png" class="image-link" data-pswp-width="1999" data-pswp-height="776"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image2.png" width="1999" height="776"loading="lazy"
			alt="Cherimoya’s architecture: a one-hot DNA sequence passes through a convolution and a Cheri residual block, then splits into a convolutional branch that predicts base-resolution profiles and an average-pooling plus dense branch that predicts log total counts."
			 class="gallery-image" data-flex-grow="257" data-flex-basis="618px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;The largest architectural difference between Cherimoya and Chrom/BPNet is that, instead of using dense dilated convolutions, Cherimoya introduces the Cheri Block, which is an adaptation of the ConvNeXt [6] architecture. The Cheri Block consists of a 3-tap dilated depthwise convolution, which pools information spatially but independently for each channel, a layer normalization that gets applied independently on each example in the batch, and a channel mixing MLP similar to that of the transformer layer. This can be viewed similarly to a factorization of the dense convolution, with information first aggregated spatially, and then subsequently aggregated across channels. Finally, a small fixed-scale residual multiplies each channel to keep deep stacks stable by holding the network near the identity at initialization, as the contribution from each Cheri Block is initially low. We found that despite being a fixed parameter, removal of this scaling operation almost always leads to catastrophic collapse in the training process. An important note is that, even though there are several operations performed in each Cheri block, there is only one non-linearity per block.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image3.png" class="image-link" data-pswp-width="1999" data-pswp-height="959"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image3.png" width="1999" height="959"loading="lazy"
			alt="Diagram of the Cheri residual block: a dilated depthwise convolution and layer norm aggregate information spatially, then a dense–GELU–dense MLP mixes across channels, followed by a fixed layer-scale and a residual addition. A red outline marks the fused training kernel and a yellow outline the fused inference megakernel."
			 class="gallery-image" data-flex-grow="208" data-flex-basis="500px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Although most individual PyTorch operations already have efficient CUDA implementations that are better than what anyone could write by hand, new architectural blocks offer sequences of operations that can benefit from custom GPU kernels. To explain at a high level, I/O is expensive for GPUs, and so one can get a big speedup when a GPU can perform multiple operations on the same data before writing the results back to memory. Sometimes, this involves reordering how computation is done to minimize I/O operations, and can result in unintuitive sequences of operations. We provide two such kernels for Cherimoya: a simple kernel that fuses the 3-tap dilated convolution with the subsequent layer-norm operation (in red), and a megakernel that fuses together the entire layer with minimal intermediary values (in yellow). The simple kernel is useful for training models because it caches intermediate values useful for speeding up the backward pass; the megakernel is only for inference and benefits explicitly by eliminating several I/O operations. In our timings, the simple kernel is around 3-4x faster than the PyTorch operations for those two layers, and the megakernel is around 2x faster at inference than a Cheri block with the simple kernel.&lt;/p&gt;
&lt;p&gt;Several changes had to be made to the optimization of Cherimoya models to get the best performance out of these Cheri blocks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;, instead of using a heuristic to set the balance between the log count loss and the profile loss, as introduced in the BPNet paper, we use Kendall-Gal [7] learned loss to automatically balance them. &lt;strong&gt;Second&lt;/strong&gt;, instead of using a single Adam optimizer, we used (1) Muon [8] for the internal 2D matrices, (2) AdamW optimizer for the rest of the model parameters, and (3) SGD for the Kendall-Gal loss weights. &lt;strong&gt;Third&lt;/strong&gt;, autoresearch was used to refine the precise architectural units and optimizer hyperparameters. Over 5,000 experiments were run across several sessions using &lt;a class="link" href="https://github.com/evo-hq/evo" target="_blank" rel="noopener"
 &gt;Evo&lt;/a&gt; (not to be confused with the Evo genomic LLM model). An entire blog post could be written about effective use of autoresearch, but here are four key points that we found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need an objective fast enough for quick iteration. Cherimoya was ideal in this sense because training a model on a reasonably sized dataset took only 5-20 minutes.&lt;/li&gt;
&lt;li&gt;Training deep learning models is noisy, and so running each idea a single time is not always a good estimate of the performance when small differences matter. We ran each experiment three times with different initializations and if the median was higher than the frontier, we ran an additional seven times (ten total) and only incorporated the idea if the median across all ten runs was better than the current frontier.&lt;/li&gt;
&lt;li&gt;Autoresearch will overfit to whatever objective you give it, and almost all of the changes that lead to frontier performance on the autoresearch evaluation set will not generalize. This is where domain knowledge-driven skepticism plays a huge role in doubting weird choices, and where extensive external validation is necessary for confirming that the proposals generalize.&lt;/li&gt;
&lt;li&gt;Even when the proposed changes generalize to larger datasets, many of them led to significantly worse performance on downstream tasks such as variant effect prediction. Potentially, this is related to the homology leakage issue pointed out by Rafi et al.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nonetheless, autoresearch is invaluable when used carefully for converting free GPU time into incremental improvements. Even when proposals were unsuccessful, knowing that one is close to the frontier is important because, when developing a new model, one is sometimes left wondering if they are just one small change away from a big performance boost.&lt;/p&gt;
&lt;h2 id="cherimoya-sets-a-new-pareto-frontier-of-performance-and-parameters"&gt;Cherimoya sets a new Pareto frontier of performance and parameters
&lt;/h2&gt;&lt;p&gt;Everyone in machine learning is talking about &lt;a class="link" href="https://en.wikipedia.org/wiki/Pareto_front" target="_blank" rel="noopener"
 &gt;“Pareto frontiers”&lt;/a&gt; these days, which are the curves showing the best tradeoff between model complexity and performance, so we decided to do the same when comparing Cherimoya and ChromBPNet models. We compared the performance of Cherimoya models with an increasing number of filters per layer against the performance of officially released ChromBPNet models trained by the lab that developed the model. To get a better estimate of the frontier, we averaged across ten chromatin accessibility experiments.&lt;/p&gt;
&lt;p&gt;Our findings were somewhat surprising: Cherimoya reaches the same predictive performance for both tasks at 32 filters, using only 0.65% of ChromBPNet’s parameters. Performance improvements seem to level off around 128 filters, still less than 10% of the parameters of ChromBPNet, and so we used 128 filters as the default for modeling chromatin accessibility experiments moving forward. Somewhat interestingly, profile predictions continue to improve with complexity past the point where the count predictions level off. This may have implications for readouts where signal shape is more complex or informative, such as transcription initiation (e.g., Pro-CAP) experiments.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image4.png" class="image-link" data-pswp-width="888" data-pswp-height="333"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image4.png" width="888" height="333"loading="lazy"
			alt="Two scatter plots showing Cherimoya’s profile-Pearson and count-Pearson gain over ChromBPNet as a function of model size (percent of ChromBPNet’s parameters, 16–192 filters). Both gains rise steeply and plateau by roughly 128 filters, while profile predictions keep improving after counts level off."
			 class="gallery-image" data-flex-grow="266" data-flex-basis="640px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="cherimoya-approaches-the-performance-of-massive-models"&gt;Cherimoya approaches the performance of massive models
&lt;/h2&gt;&lt;p&gt;These initial results suggested that ChromBPNet models are undertrained given their parameter budget, potentially due to their use of dense operations and simple optimization strategies, and raise questions about whether other genomic models may also be undertrained. To investigate this, we wanted to compare Cherimoya’s performance against massive models like Borzoi and AlphaGenome. Although these models do use other computational layers and are known to outperform ChromBPNet, they are likely too massive to truly optimize the hyperparameters and architecture.&lt;/p&gt;
&lt;p&gt;In an attempt to define a shared task, we evaluated all models on the common task of predicting the log counts in experimental peaks for 467 DNase experiments using sequence centered on that peak. For each model, we used the full receptive field (1M for AlphaGenome, ~500k for Borzoi). Additionally, we included an AlphaGenome model that only takes in 2kbp of input sequence so as to more closely mirror ChromBPNet/Cherimoya. For each peak in the Borzoi validation set (which corresponds to the AlphaGenome test set), we used the respective ChromBPNet/Cherimoya model where that peak was also in the validation set, to ensure that no model had seen those coordinates in their respective training sets. We consider the validation set as opposed to the test set here because the work is not yet complete, but anticipate little difference in trends between the two.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image5.png" class="image-link" data-pswp-width="568" data-pswp-height="568"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image5.png" width="568" height="568"loading="lazy"
			alt="Box plot of per-experiment Pearson R for log-count prediction across 467 DNase experiments, comparing AlphaGenome (2 kb and 1 Mb), ChromBPNet, Cherimoya, and Borzoi. Cherimoya sits between ChromBPNet and the larger models; lung experiments (pink) and HL-60 (green) are highlighted as harder cases."
			 class="gallery-image" data-flex-grow="100" data-flex-basis="240px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;We observe the expected trends, with AlphaGenome (median performance 0.724) and Borzoi (0.736) significantly outperforming ChromBPNet (0.666), and with ChromBPNet outperforming the shrunken AlphaGenome (0.582). Perhaps surprisingly, we see that Cherimoya (0.704) closes over half of the gap between ChromBPNet and the larger models despite using over an order of magnitude fewer parameters. Interestingly, AlphaGenome struggled with several lung experiments (in pink) that the other models did not find challenging, and all models struggled to make predictions in HL-60. This suggests that one downside of massive multi-task models is that it is challenging to ensure that the models perform well on &lt;em&gt;all&lt;/em&gt; tasks without a few dropping out.&lt;/p&gt;
&lt;p&gt;In doing this evaluation, we also considered the size of the model, the memory usage, and the inference speed, to provide a more comprehensive picture. Each model was benchmarked on the same H200 GPU using bfloat16 precision and &lt;code&gt;torch.compile(mode='max-autotune')&lt;/code&gt; to ensure maximum throughput, with a warmup period ensuring that the first few slow inference passes do not influence the results.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th&gt;Params&lt;/th&gt;
					&lt;th&gt;Checkpoint&lt;/th&gt;
					&lt;th&gt;Peak VRAM (b=1)&lt;/th&gt;
					&lt;th&gt;Inference (ex/s)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Cherimoya&lt;/td&gt;
					&lt;td&gt;0.6M&lt;/td&gt;
					&lt;td&gt;2.5 MB&lt;/td&gt;
					&lt;td&gt;0.14 GB&lt;/td&gt;
					&lt;td&gt;~40,600&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ChromBPNet&lt;/td&gt;
					&lt;td&gt;6.6M&lt;/td&gt;
					&lt;td&gt;26 MB&lt;/td&gt;
					&lt;td&gt;0.19 GB&lt;/td&gt;
					&lt;td&gt;~6,900&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Borzoi&lt;/td&gt;
					&lt;td&gt;186M&lt;/td&gt;
					&lt;td&gt;744 MB&lt;/td&gt;
					&lt;td&gt;17.9 GB&lt;/td&gt;
					&lt;td&gt;~48&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AlphaGenome (1Mb)&lt;/td&gt;
					&lt;td&gt;450M&lt;/td&gt;
					&lt;td&gt;921 MB&lt;/td&gt;
					&lt;td&gt;117 GB&lt;/td&gt;
					&lt;td&gt;~10&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;At ~40K examples per second, Cherimoya is about 6x faster than ChromBPNet and hundreds to thousands of times faster than the foundation models. This is made possible, in part, by the megakernel that fuses the entire Cheri block for inference. But it is not the only component: a forward+backward step at batch 512 takes ~71 ms, against ChromBPNet&amp;rsquo;s ~244 ms.&lt;/p&gt;
&lt;h2 id="cherimoya-is-a-strong-predictor-of-variant-effect"&gt;Cherimoya is a strong predictor of variant effect
&lt;/h2&gt;&lt;p&gt;As mentioned, predictive accuracy is only the first step in evaluating a model. Although it is encouraging that such a small model can perform so well on held-out data, we next evaluated Cherimoya’s performance at variant effect prediction. There are several datasets available for this task, but we chose to initially focus on one that was provided as part of the ChromBPNet work because it was well documented and simple to understand. In this setting, chromatin accessibility quantitative trait loci (caQTLs) were identified in African LCLs. Models trained to predict chromatin accessibility in LCLs from the ENCODE data were then used to score these caQTLs. A signed Pearson correlation was calculated over the difference in chromatin accessibility predictions between the reference and alternative alleles for the statistically significant caQTLs, in the same manner described in the original work; we did this for both a model trained on DNase-seq and one trained on ATAC-seq.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image6.png" class="image-link" data-pswp-width="1999" data-pswp-height="1352"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image6.png" width="1999" height="1352"loading="lazy"
			alt="Bar chart of signed Pearson correlation for variant-effect (allele-specific binding) prediction in African samples across ENCODE ATAC and DNase, for AlphaGenome, Cherimoya, ChromBPNet, Enformer, and Borzoi. AlphaGenome scores highest, and Cherimoya outperforms ChromBPNet, Enformer, and Borzoi."
			 class="gallery-image" data-flex-grow="147" data-flex-basis="354px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;We see similar results here as in the previous prediction task: Cherimoya outperforms ChromBPNet, and AlphaGenome (all folds) performs the best. Although Cherimoya is not closing the gap quite as strongly here between ChromBPNet and AlphaGenome, it is still outperforming Borzoi and Enformer and providing a nice small boost relative to ChromBPNet.&lt;/p&gt;
&lt;h2 id="cherimoya-enables-interpretation-and-design-with-a-low-compute-budget"&gt;Cherimoya enables interpretation and design with a low compute budget
&lt;/h2&gt;&lt;p&gt;A motivation for developing &lt;em&gt;lightweight&lt;/em&gt; models is to reduce the cost of training and using genomic S2F models in downstream tasks. Accordingly, we next set out to evaluate the speed of these models on downstream tasks.&lt;/p&gt;
&lt;p&gt;The first such task is interpreting loci. A popular method for doing this is DeepLIFT/SHAP [9], which implements a correction to gradients to get interpretable saliency maps that more closely match Shapley values. However, DeepLIFT/SHAP requires custom correction operations for each non-linear operation and, as of the time of writing, there is no confirmed correction operation for layer normalization (though such work is currently underway). Consequently, we must use &lt;em&gt;in silico&lt;/em&gt; saturation mutagenesis (ISM) for attribution with Cherimoya models, which calculates the importance of each nucleotide as the average difference in prediction if it were each of the other three nucleotide choices.&lt;/p&gt;
&lt;p&gt;A common critique of running ISM is that it is costly. Interpreting a 1kb locus requires running 3k forward passes. Fortunately, due to the megakernel, forward passes are where Cherimoya excels. To evaluate these timings more thoroughly, we compare the speed at which several models can interpret a 1kbp window within their original receptive fields. Below, we have the median speed of running ISM across 10 loci for several models, with both the GPU (at half precision) and CPU (at full precision) timings.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;model&lt;/th&gt;
					&lt;th&gt;cuda&lt;/th&gt;
					&lt;th&gt;cpu&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;cherimoya&lt;/td&gt;
					&lt;td&gt;0.0846s&lt;/td&gt;
					&lt;td&gt;18.9110s&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;chrombpnet&lt;/td&gt;
					&lt;td&gt;0.3785s&lt;/td&gt;
					&lt;td&gt;70.9334s&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;alphagenome2kb&lt;/td&gt;
					&lt;td&gt;1.2375s&lt;/td&gt;
					&lt;td&gt;284.7192s&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;borzoi&lt;/td&gt;
					&lt;td&gt;64.4582s&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;alphagenome&lt;/td&gt;
					&lt;td&gt;324.2994s&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cherimoya is roughly 4.5x faster than ChromBPNet, in line with previous results. But perhaps more interestingly, running Cherimoya on a CPU is ~3x faster than running Borzoi on an H200 GPU. The ~20 seconds it takes Cherimoya on a CPU to do 3,000 forward passes may not be ideal for interactive analysis, but if one instead focused on 100 bp windows, a ~2 second cost is very manageable and brings the ability to interpret loci to those without a powerful GPU. Such speed even opens up the possibility of serving models on websites and having the compute done locally.&lt;/p&gt;
&lt;p&gt;Next, we performed a similar analysis but with various design algorithms. Here, we chose to exclude the full Borzoi and AlphaGenome models as they would be extremely slow. With the remaining three models, we considered design tasks to increase the accessibility of a region using greedy substitution, a beam-search version of greedy substitution, &lt;a class="link" href="https://github.com/jmschrei/ledidi" target="_blank" rel="noopener"
 &gt;ledidi&lt;/a&gt; [10], which is a gradient-based design algorithm, and simple screening wherein sequences are randomly generated and the best-scoring ones are returned.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;model&lt;/th&gt;
					&lt;th&gt;greedy&lt;/th&gt;
					&lt;th&gt;ledidi&lt;/th&gt;
					&lt;th&gt;beam&lt;/th&gt;
					&lt;th&gt;screen (1000 it)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;cherimoya&lt;/td&gt;
					&lt;td&gt;0.0737&lt;/td&gt;
					&lt;td&gt;0.0068&lt;/td&gt;
					&lt;td&gt;0.2982&lt;/td&gt;
					&lt;td&gt;0.0097&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;chrombpnet&lt;/td&gt;
					&lt;td&gt;0.4353&lt;/td&gt;
					&lt;td&gt;0.0242&lt;/td&gt;
					&lt;td&gt;1.3781&lt;/td&gt;
					&lt;td&gt;0.0769&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;alphagenome2kb&lt;/td&gt;
					&lt;td&gt;2.5078&lt;/td&gt;
					&lt;td&gt;0.0530&lt;/td&gt;
					&lt;td&gt;11.8330&lt;/td&gt;
					&lt;td&gt;0.0559&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;We see similar results as before, with Cherimoya being several times faster than the other models. As Cherimoya and ledidi were both designed with speed as a primary concern, it is not surprising that Cherimoya + ledidi is 64x faster than ChromBPNet + greedy substitution, which is a more common design algorithm, and ~370x faster than AlphaGenome 2kbp + greedy substitution.&lt;/p&gt;
&lt;h2 id="python-api-and-command-line-interface"&gt;Python API and command-line interface
&lt;/h2&gt;&lt;p&gt;Now that we’ve convinced you that Cherimoya performs well, let’s talk about how to actually use it in practice.&lt;/p&gt;
&lt;p&gt;There are two main ways to use Cherimoya models: the Python API and the command-line tools. The Python API largely focuses on defining the model architecture and training process, saving and loading models, while outsourcing the usage of the model after training to &lt;a class="link" href="https://github.com/jmschrei/tangermeme" target="_blank" rel="noopener"
 &gt;tangermeme&lt;/a&gt; [11], which is a general-purpose package for using S2F models. Although one can use the Python API directly to train models, our lab usually uses the command-line tools to get started and then loads the trained models into Python if we need to do bespoke analyses.&lt;/p&gt;
&lt;p&gt;The command-line tools include the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cherimoya attribute&lt;/code&gt;: Runs &lt;em&gt;in silico&lt;/em&gt; saturation mutagenesis on a set of loci&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cherimoya evaluate&lt;/code&gt;: Evaluates a trained model against observed data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cherimoya fit&lt;/code&gt;: Fits a model to observed data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cherimoya marginalize&lt;/code&gt;: Runs &lt;em&gt;in silico&lt;/em&gt; marginalizations given a motif database&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cherimoya negatives&lt;/code&gt;: Identifies GC-matched negatives for a set of peaks, no model involvement&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cherimoya seqlets&lt;/code&gt;: Calls seqlets on attributions (from any methods) using the recursive seqlet caller in tangermeme&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each can be run individually, but likely the simplest way to go from raw data to trained models and outputs is via the &lt;code&gt;cherimoya pipeline&lt;/code&gt; command, which handles data processing, model training, interpretation, seqlet calling/annotation, TF-MoDISco, and marginalizations by running through the above commands. The command is extremely flexible: you can start with read/fragment files or with bigWig files, you can pass in a control track if you have it, you can pass in peaks or have them called for you using MACS3, and likewise you can pass in negatives or have them called using a GC matching strategy based on the peaks. This graphic illustrates the flexibility one has in getting to a trained model.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image7.png" class="image-link" data-pswp-width="1999" data-pswp-height="772"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image7.png" width="1999" height="772"loading="lazy"
			alt="Flow diagram of the Cherimoya pipeline: raw reads (fastq) are mapped to SAM/BAM/tsv, then converted via MACS3 and bam2bw into peaks (BED), signal (bigWig), negatives (BED), and optional control tracks, all feeding into a trained Cherimoya model. Steps implemented within Cherimoya are boxed."
			 class="gallery-image" data-flex-grow="258" data-flex-basis="621px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;The biggest obstacle for using these command-line tools is that each command requires a JSON that specifies paths to the relevant data and includes important hyperparameters. Defaults for these can be found on GitHub. Because the pipeline command requires a massive JSON – including one internal JSON for each step – a helper utility, &lt;code&gt;cherimoya pipeline-json&lt;/code&gt;, can take in links to the important data and parameters and produce a template JSON that one can subsequently manually refine before running the &lt;code&gt;cherimoya pipeline&lt;/code&gt; command.&lt;/p&gt;
&lt;h3 id="quickstart-guide"&gt;Quickstart guide
&lt;/h3&gt;&lt;p&gt;To demonstrate this in action, let’s look at an example of using the command-line tools to train and run Cherimoya models on an ATAC-seq experiment using the pipeline command. For this example, we will use the deeply sequenced K562 ATAC-seq experiment on the ENCODE Portal.&lt;/p&gt;
&lt;p&gt;First, we need to download the relevant files: the reference genome, a motif database (for characterizing the model-identified motifs), and the reads in BAM format.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -Z -L -C - --fail --remote-name-all \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/latest/hg38.fa.gz \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;https://jaspar.elixir.no/download/data/2026/CORE/JASPAR2026_CORE_vertebrates_non-redundant_pfms_meme.txt \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;https://encode-public.s3.amazonaws.com/2021/03/16/781bf763-825b-41df-9e58-c15a3e16f365/ENCFF534DCE.bam \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;https://encode-public.s3.amazonaws.com/2021/03/16/d0607f6a-198b-4c38-94ba-9161359a5500/ENCFF128WZG.bam \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;https://encode-public.s3.amazonaws.com/2021/03/16/e5948cab-16cc-4bfd-b1fb-93f192ca62d2/ENCFF077FBI.bam \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;&amp;amp;&amp;amp; gunzip --keep -f hg38.fa.gz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After downloading these files, we use &lt;code&gt;cherimoya pipeline-json&lt;/code&gt; to create the pipeline JSON.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cherimoya pipeline-json \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-s hg38.fa \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-i ENCFF534DCE.bam -i ENCFF128WZG.bam -i ENCFF077FBI.bam \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-m JASPAR2026_CORE_vertebrates_non-redundant_pfms_meme.txt \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-n k562_atac -o k562_atac.pipeline.json \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-ps 4 -ns -4 -u -pe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will create a properly formatted pipeline JSON file that is ready to run. Before doing so, you should manually skim it over and ensure there is nothing else you would like to change (such as batch sizes or any other processing or model settings that may be relevant but not exposed). When you’re ready to run the pipeline, you can run &lt;code&gt;cherimoya pipeline -p k562_atac.pipeline.json&lt;/code&gt; and the steps will be performed sequentially. As a final note, a &lt;code&gt;&amp;quot;skip&amp;quot;: true&lt;/code&gt; argument can be passed into any JSON if you want to skip the step, and a trained model can be provided to skip model training and just perform the other steps.&lt;/p&gt;
&lt;p&gt;When the pipeline is complete, you will have several outputs: the trained model, attributions for the specified loci, annotated seqlet calls using tangermeme’s recursive seqlet caller and counts for the number of each annotation (i.e., how many motif instances of each type in a database were found highlighted by the attributions), &lt;em&gt;in silico&lt;/em&gt; marginalizations for all motifs in a database, and TF-MoDISco results for &lt;em&gt;de novo&lt;/em&gt; discovered motifs. For this example, the first few rows of the TF-MoDISco report should look like the following, and correspond to several motifs known to drive accessibility in K562.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-011/image8.png" class="image-link" data-pswp-width="883" data-pswp-height="469"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-011/image8.png" width="883" height="469"loading="lazy"
			alt="First rows of a TF-MoDISco report table, listing for each discovered motif the seqlet count, average contribution, median distance from center, forward and reverse contribution-weight-matrix sequence logos, and the best-matching JASPAR motif."
			 class="gallery-image" data-flex-grow="188" data-flex-basis="451px"&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="agentic-tooling"&gt;Agentic tooling
&lt;/h2&gt;&lt;p&gt;The Cherimoya repository comes with built-in skills that use progressive disclosure to guide the agent in the right direction based on your prompt. We have found this to be immensely useful in creating scripts that we then refine, and when the agent wants to create small snippets to verify something. It is beautiful to see these agents go from writing long bespoke scripts that are challenging to audit to a small number of function calls from a package like Cherimoya or tangermeme. However, it is challenging to guarantee behavior from agents, especially as the underlying models are constantly changing. So, other than to mention that such skills exist and we have been happy with them internally so far, we will not go further here.&lt;/p&gt;
&lt;h2 id="wrap-up"&gt;Wrap up
&lt;/h2&gt;&lt;p&gt;Cherimoya is a lightweight S2F model that achieves strong performance despite its small parameter count. We have adopted it internally in the &lt;a class="link" href="https://programmable-genomics.github.io/" target="_blank" rel="noopener"
 &gt;Programmable Genomics Laboratory&lt;/a&gt; across a range of projects, and plan to continue expanding its scope, performance, and capabilities. To write like an AI: this is not just a one-off project; it’s a foundation for future work in the lab. As we scale up our design work from a small number of cell lines to targeting every cell type in a complex mammalian organ, such as the brain, lightweight models that can run quickly and fit easily in GPU memory are crucial.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cherimoya is from Christian Ramirez, Achsah Marlene Aruva, Zhiping Weng, and Jacob Schreiber (UMass Chan Medical School). Model and CLI code live in the &lt;a class="link" href="https://github.com/jmschrei/cherimoya" target="_blank" rel="noopener"
 &gt;&lt;code&gt;cherimoya&lt;/code&gt; repo&lt;/a&gt;; analysis tooling builds on &lt;code&gt;tangermeme&lt;/code&gt;. Work is still in progress, and the final numbers and results will likely differ slightly from this blog post. Thanks to Anthropic for providing credits through their AI for Science program.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;p&gt;1. Linder, J., Srivastava, D., Yuan, H., Agarwal, V. &amp;amp; Kelley, D. R. Predicting RNA-seq coverage from DNA sequence as a unifying model of gene regulation. &lt;em&gt;Nat. Genet.&lt;/em&gt; 57, 949–961 (2025). &lt;a class="link" href="https://doi.org/10.1038/s41588-024-02053-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41588-024-02053-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Avsec, Ž., Latysheva, N., Cheng, J., Novati, G., Taylor, K. R., Ward, T. et al. Advancing regulatory variant effect prediction with AlphaGenome. &lt;em&gt;Nature&lt;/em&gt; 649, 1206–1218 (2026). &lt;a class="link" href="https://doi.org/10.1038/s41586-025-10014-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-025-10014-0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Rafi, A. M., Kiyota, B., Yachie, N. &amp;amp; de Boer, C. G. Characterizing homology-induced data leakage and memorization in genome-trained sequence models. &lt;em&gt;bioRxiv&lt;/em&gt; (2026). &lt;a class="link" href="https://doi.org/10.1101/2025.01.22.634321" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2025.01.22.634321&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Pampari, A., Shcherbina, A., Kvon, E., Kosicki, M., Nair, S., Kundu, S., Kathiria, A. S., Risca, V. I., Kuningas, K., Alasoo, K., Greenleaf, W. J., Pennacchio, L. A. &amp;amp; Kundaje, A. ChromBPNet: bias factorized, base-resolution deep learning models of chromatin accessibility reveal cis-regulatory sequence syntax, transcription factor footprints and regulatory variants. &lt;em&gt;bioRxiv&lt;/em&gt; (2024). &lt;a class="link" href="https://doi.org/10.1101/2024.12.25.630221" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2024.12.25.630221&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Avsec, Ž., Weilert, M., Shrikumar, A., Krueger, S., Alexandari, A., Dalal, K., Fropf, R., McAnany, C., Gagneur, J., Kundaje, A. &amp;amp; Zeitlinger, J. Base-resolution models of transcription-factor binding reveal soft motif syntax. &lt;em&gt;Nat. Genet.&lt;/em&gt; 53, 354–366 (2021). &lt;a class="link" href="https://doi.org/10.1038/s41588-021-00782-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41588-021-00782-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Liu, Z., Mao, H., Wu, C.-Y., Feichtenhofer, C., Darrell, T. &amp;amp; Xie, S. A ConvNet for the 2020s. &lt;em&gt;arXiv&lt;/em&gt; (2022). &lt;a class="link" href="https://arxiv.org/abs/2201.03545" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/2201.03545&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. Kendall, A., Gal, Y. &amp;amp; Cipolla, R. Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics. &lt;em&gt;arXiv&lt;/em&gt; (2017). &lt;a class="link" href="https://arxiv.org/abs/1705.07115" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/1705.07115&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. Jordan, K., Jin, Y., Boza, V., You, J., Cesista, F., Newhouse, L. &amp;amp; Bernstein, J. Muon: An optimizer for hidden layers in neural networks. (2024). &lt;a class="link" href="https://kellerjordan.github.io/posts/muon/" target="_blank" rel="noopener"
 &gt;https://kellerjordan.github.io/posts/muon/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Shrikumar, A., Greenside, P. &amp;amp; Kundaje, A. Learning Important Features Through Propagating Activation Differences. &lt;em&gt;arXiv&lt;/em&gt; (2017). &lt;a class="link" href="https://arxiv.org/abs/1704.02685" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/1704.02685&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Schreiber, J., Lorbeer, F. K., Heinzl, M., Reiter, F., Rafanel, B., Lu, Y. Y., Stark, A. &amp;amp; Noble, W. S. Programmatic design and editing of cis-regulatory elements. &lt;em&gt;bioRxiv&lt;/em&gt; (2025). &lt;a class="link" href="https://doi.org/10.1101/2025.04.22.650035" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2025.04.22.650035&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. Schreiber, J. tangermeme: A toolkit for understanding cis-regulatory logic using deep learning models. &lt;em&gt;bioRxiv&lt;/em&gt; (2025). &lt;a class="link" href="https://doi.org/10.1101/2025.08.08.669296" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2025.08.08.669296&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Benchmarking seq2func models on distal enhancer effects with CRISPRi screens</title><link>https://genomicsxai.github.io/blogs/2026-007/</link><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>https://genomicsxai.github.io/blogs/2026-007/</guid><description>&lt;img src="https://genomicsxai.github.io/" alt="Featured image of post Benchmarking seq2func models on distal enhancer effects with CRISPRi screens" /&gt;&lt;aside class="summary-box"&gt;
 &lt;h2 class="summary-box__title"&gt;Summary&lt;/h2&gt;
 &lt;div class="summary-box__body"&gt;
 &lt;p&gt;We benchmark four sequence-to-function genomic deep learning models — &lt;a class="link" href="https://www.nature.com/articles/s41592-021-01252-x" target="_blank" rel="noopener"
 &gt;Enformer&lt;/a&gt;, &lt;a class="link" href="https://www.nature.com/articles/s41588-024-02053-6" target="_blank" rel="noopener"
 &gt;Borzoi&lt;/a&gt;, &lt;a class="link" href="https://www.biorxiv.org/content/10.64898/2025.12.22.695963v1" target="_blank" rel="noopener"
 &gt;NTv3&lt;/a&gt;, and &lt;a class="link" href="https://www.nature.com/articles/s41586-025-10014-0" target="_blank" rel="noopener"
 &gt;AlphaGenome&lt;/a&gt; — zero-shot on two K562 CRISPRi enhancer-knockdown screens (&lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/31784727/" target="_blank" rel="noopener"
 &gt;Fulco et al., 2019&lt;/a&gt; and &lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/30612741/" target="_blank" rel="noopener"
 &gt;Gasperini et al., 2019&lt;/a&gt;), extending the in-silico CRISPRi setup from &lt;a class="link" href="https://genomebiology.biomedcentral.com/articles/10.1186/s13059-023-02899-9" target="_blank" rel="noopener"
 &gt;Karollus et al., 2023&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Three things stand out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AlphaGenome leads on both screens&lt;/strong&gt; (Pearson&amp;rsquo;s r = 0.67 on Fulco et al., 0.45 on Gasperini et al.), with Borzoi a close second on Fulco et al. and a more distant second on Gasperini et al.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;All four models systematically underpredict knockdown magnitude&lt;/strong&gt;, and the gap to experimental measurements widens with enhancer-to-TSS distance — distal cis-regulatory element (CRE) effects remain difficult to predict.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AlphaGenome&amp;rsquo;s RNA-Seq head (with GENCODE-exon aggregation) beats its CAGE head&lt;/strong&gt; on the larger screen — which output track you choose matters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;: &lt;a class="link" href="https://github.com/Al-Murphy/seq2func_crispri_eval" target="_blank" rel="noopener"
 &gt;seq2func_crispri_eval&lt;/a&gt;&lt;/p&gt;

 &lt;/div&gt;
&lt;/aside&gt;

&lt;hr&gt;
&lt;h2 id="motivation"&gt;Motivation
&lt;/h2&gt;&lt;p&gt;Sequence-to-function (seq2func) models keep getting bigger, longer-context, and more capable. &lt;a class="link" href="https://www.nature.com/articles/s41586-025-10014-0" target="_blank" rel="noopener"
 &gt;AlphaGenome&lt;/a&gt; is the current state of the art, succeeding &lt;a class="link" href="https://www.nature.com/articles/s41592-021-01252-x" target="_blank" rel="noopener"
 &gt;Enformer&lt;/a&gt; (2021) and &lt;a class="link" href="https://www.nature.com/articles/s41588-024-02053-6" target="_blank" rel="noopener"
 &gt;Borzoi&lt;/a&gt; (2024). DNA language models like &lt;a class="link" href="https://www.biorxiv.org/content/10.64898/2025.12.22.695963v1" target="_blank" rel="noopener"
 &gt;NTv3&lt;/a&gt; now compete in the same space by post-training on the same functional genomic tracks.&lt;/p&gt;
&lt;p&gt;AlphaGenome was launched as a substantial step forward, with most of its zero-shot evaluation focused on single-nucleotide variant (SNV) effects. Two related weaknesses are especially well-documented for this class of model, both originally demonstrated on Enformer: predicting expression across &lt;strong&gt;personalised genomes&lt;/strong&gt; (e.g. &lt;a class="link" href="https://www.nature.com/articles/s41588-023-01524-6" target="_blank" rel="noopener"
 &gt;Sasse et al.&lt;/a&gt;), and predicting &lt;strong&gt;distal CRE effect magnitudes&lt;/strong&gt; (how much knocking down a far-away enhancer changes its target gene&amp;rsquo;s expression). Both involve sequence perturbations the model wasn&amp;rsquo;t directly trained on, and both are where seq2func models historically struggle. Performance on these tasks is what tells us whether a model&amp;rsquo;s apparent advance translates to the questions biologists actually care about.&lt;/p&gt;
&lt;p&gt;The personalised genome question is how well a model predicts gene expression for a specific individual from their own genome. It&amp;rsquo;s hard because the variants that distinguish one individual from the reference are sparse and small in effect, easy to lose against the much stronger reference signal a sequence model is trained to predict. &lt;a class="link" href="https://www.biorxiv.org/content/10.64898/2026.02.01.702969v1.full" target="_blank" rel="noopener"
 &gt;Tu, 2026&lt;/a&gt; and &lt;a class="link" href="https://www.biorxiv.org/content/10.1101/2025.08.05.668750v2.full" target="_blank" rel="noopener"
 &gt;Shen, 2025&lt;/a&gt; recently revisited it: AlphaGenome improves over Enformer on this task, but still falls well short of useful accuracy. The needle moves, but there&amp;rsquo;s a long way to go.&lt;/p&gt;
&lt;p&gt;The distal-CRE magnitude question — much bigger perturbations, disabling a whole regulatory element — has received little attention since &lt;a class="link" href="https://genomebiology.biomedcentral.com/articles/10.1186/s13059-023-02899-9" target="_blank" rel="noopener"
 &gt;Karollus et al., 2023&lt;/a&gt;. They defined an &lt;em&gt;in-silico&lt;/em&gt; CRISPRi benchmark on &lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/31784727/" target="_blank" rel="noopener"
 &gt;Fulco 2019&lt;/a&gt; and &lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/30612741/" target="_blank" rel="noopener"
 &gt;Gasperini 2019&lt;/a&gt; and ran it on Enformer and Basenji2, finding both substantially undershoot real enhancer effects. Borzoi, NTv3, and AlphaGenome have all followed Enformer, claiming gains from longer contexts and broader predictive tasks — yet none have been evaluated on Karollus&amp;rsquo;s magnitude benchmark.&lt;/p&gt;
&lt;p&gt;A related but easier task — enhancer-gene linking — has been tested more widely: in the original Enformer paper (Figure 1a), in AlphaGenome&amp;rsquo;s evaluation on the &lt;a class="link" href="https://www.biorxiv.org/content/10.1101/2023.11.09.563812v1" target="_blank" rel="noopener"
 &gt;ENCODE-rE2G CRISPRi dataset&lt;/a&gt; (Figure 1b), and in the &lt;a class="link" href="https://www.nature.com/articles/s41467-025-65077-4" target="_blank" rel="noopener"
 &gt;DNALONGBENCH&lt;/a&gt; benchmark. Linking is binary classification: does enhancer X regulate gene Y? A model succeeds by sorting interacting from non-interacting pairs above some threshold. Magnitude prediction is regression: how much does Y drop when X is disabled? It demands ranked and calibrated effect sizes across a continuous range, committing the model to a quantitative theory of enhancer-promoter regulation rather than a topological one. AlphaGenome leads on linking and notes that even it underestimates the impact of very distal enhancers — but doesn&amp;rsquo;t run the magnitude-prediction benchmark.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/enf_ag_crispr_orig_pprs.png" class="image-link" data-pswp-width="7209" data-pswp-height="4730"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/enf_ag_crispr_orig_pprs.png" width="900px" height="590"loading="lazy"
			alt="Figure 1"
			title="Figure 1: Enhancer-gene linking performance from the original Enformer and AlphaGenome publications. (a) Adapted from Avsec et al. 2021 (Enformer): enhancer–gene pair classification performance (CRISPRi-validated versus non-validated candidate enhancers), stratified by relative distance, measured by auPRC on two CRISPRi datasets for different methods, models, and contribution scores. (b) Adapted from Avsec et al. 2025 (AlphaGenome): zero-shot enhancer-gene linking performance on the ENCODE-rE2G CRISPRi dataset (auPRC), stratified by enhancer-to-TSS distance." data-title-escaped="Figure 1: Enhancer-gene linking performance from the original Enformer and AlphaGenome publications. (a) Adapted from Avsec et al. 2021 (Enformer): enhancer–gene pair classification performance (CRISPRi-validated versus non-validated candidate enhancers), stratified by relative distance, measured by auPRC on two CRISPRi datasets for different methods, models, and contribution scores. (b) Adapted from Avsec et al. 2025 (AlphaGenome): zero-shot enhancer-gene linking performance on the ENCODE-rE2G CRISPRi dataset (auPRC), stratified by enhancer-to-TSS distance."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;We aim to address this. We re-run the Karollus benchmark on AlphaGenome, Borzoi, and NTv3 — and on Enformer, to anchor against Karollus&amp;rsquo;s original numbers. The result is a measure of progress on distal-CRE prediction across the last four years of seq2func releases, not just a test of AlphaGenome&amp;rsquo;s generalisation abilities.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;em&gt;Side note:&lt;/em&gt; CRISPRi (CRISPR interference) uses a catalytically dead Cas9 fused to a repressive domain to silence a target locus without cutting DNA. When the target is a distal enhancer, you can read out which genes go down in expression — giving you a measured enhancer → gene effect size.&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;em&gt;Side note:&lt;/em&gt; &amp;ldquo;seq2func&amp;rdquo; = sequence-to-function. A model that takes raw DNA as input and predicts functional genomic signals (RNA-seq, CAGE, ATAC, ChIP, etc.) as output. Enformer, Borzoi, and AlphaGenome were all trained end-to-end as seq2func models. NTv3 is a hybrid: first pretrained as a genomic language model (gLM) via masked language modeling — predicting hidden bases from their surrounding sequence across many species&amp;rsquo; genomes — then post-trained on functional assays to produce seq2func outputs.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="the-benchmark"&gt;The benchmark
&lt;/h2&gt;&lt;p&gt;We test on two K562 CRISPRi enhancer screens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/31784727/" target="_blank" rel="noopener"
 &gt;Fulco et al., 2019&lt;/a&gt;&lt;/strong&gt; — ~60 validated enhancer–gene pairs from K562 CRISPRi-FlowFISH. Small but high-confidence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class="link" href="https://pubmed.ncbi.nlm.nih.gov/30612741/" target="_blank" rel="noopener"
 &gt;Gasperini et al., 2019&lt;/a&gt;&lt;/strong&gt; — ~440 high-confidence significant pairs from pooled K562 CRISPRi at scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For each pair, the procedure is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build a sequence window of the model&amp;rsquo;s native context (196 kb for Enformer, 524 kb for Borzoi, 1 Mb for NTv3 and AlphaGenome), centred on the gene&amp;rsquo;s TSS.&lt;/li&gt;
&lt;li&gt;Score the wild-type window.&lt;/li&gt;
&lt;li&gt;Dinucleotide-shuffle a 2 kb slice covering the enhancer. Repeat N = 50 times, average the model&amp;rsquo;s prediction.&lt;/li&gt;
&lt;li&gt;Aggregate the model output over K562 RNA-Seq tracks in a TSS-centred 640 bp window. For AlphaGenome we additionally use the mean signal across GENCODE exons of the target gene (their paper&amp;rsquo;s preferred RNA-Seq score).&lt;/li&gt;
&lt;li&gt;Score &lt;code&gt;pred_delta = (WT − mean(shuffle)) / WT&lt;/code&gt; per pair and correlate with the measured fractional knockdown.&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;em&gt;Side note&lt;/em&gt;: This is a marginalisation procedure — by averaging predictions across many randomised backgrounds in which the enhancer&amp;rsquo;s motif content is destroyed, we isolate the enhancer&amp;rsquo;s contribution from the surrounding sequence context (the same idea underlies Global Importance Analysis (GIA); &lt;a class="link" href="https://pmc.ncbi.nlm.nih.gov/articles/PMC8118286/" target="_blank" rel="noopener"
 &gt;Koo et al., 2021&lt;/a&gt;). The background choice matters: N-replacement is out-of-distribution for the model and can produce strange predictions; drawing random bases changes local G+C content, biasing on composition rather than motif loss; even a plain base shuffle destroys dinucleotide frequencies like CpG counts, themselves a learned regulatory signal. Dinucleotide shuffling (Altschul–Erickson) destroys motif content while keeping both single-base and dinucleotide composition intact — the standard background for in-silico CRISPRi.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;This protocol is a direct extension of &lt;a class="link" href="https://genomebiology.biomedcentral.com/articles/10.1186/s13059-023-02899-9" target="_blank" rel="noopener"
 &gt;Karollus 2023&lt;/a&gt; — most of it is bit-for-bit faithful to theirs. We reuse their Fulco et al. evaluation tables (&lt;code&gt;ziga_additional_columns.tsv&lt;/code&gt; + &lt;code&gt;enhancer_knockdown_effects.tsv&lt;/code&gt; from their &lt;a class="link" href="https://zenodo.org/records/7613255" target="_blank" rel="noopener"
 &gt;Zenodo release&lt;/a&gt;) with the same merge keys and validated-pair filtering, their TSS / enhancer / strand conventions, the same Enformer DeepMind checkpoint, and their K562 CAGE readout, central-bin aggregation, and Pearson/Spearman correlation framework. For Gasperini we apply the same protocol to the Cell 2019 high-confidence pairs (after hg19 → hg38 liftover). The model-specific adjustments — per-architecture aggregation conventions like 5×128 bp bins for Enformer, 20×32 bp for Borzoi, exon-mean for AlphaGenome RNA-Seq — are architecture-driven; the evaluation harness around them is the Karollus harness. Four deliberate departures from Karollus are flagged in &lt;a class="link" href="#limitations" &gt;Limitations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Each model is evaluated using its canonical published inference setup, with no test-time augmentations applied (TTA is explored separately for AlphaGenome below). Inference compute per pair therefore isn&amp;rsquo;t uniform: Borzoi runs four forward passes (one per fold), while the other three run one — we compare models as their authors released them rather than artificially restrict Borzoi to a single fold. Enformer uses the &lt;a class="link" href="https://github.com/lucidrains/enformer-pytorch" target="_blank" rel="noopener"
 &gt;lucidrains PyTorch port&lt;/a&gt; of the DeepMind weights — same weights as Karollus used, different framework wrapper. Borzoi predictions come from the &lt;a class="link" href="https://huggingface.co/johahi" target="_blank" rel="noopener"
 &gt;Flashzoi&lt;/a&gt; community PyTorch port, evaluated as the original paper&amp;rsquo;s 4-fold ensemble (predictions averaged across the four published fold checkpoints). AlphaGenome uses the &lt;a class="link" href="https://github.com/genomicsxai/alphagenome-pytorch" target="_blank" rel="noopener"
 &gt;PyTorch port&lt;/a&gt; loaded with the all-fold distilled checkpoint, a single model trained to reproduce the multi-fold ensemble&amp;rsquo;s behaviour. NTv3 is the &lt;a class="link" href="https://huggingface.co/InstaDeepAI/NTv3_650M_post" target="_blank" rel="noopener"
 &gt;InstaDeepAI HuggingFace release&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="results"&gt;Results
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;AlphaGenome leads, with Borzoi close behind on Fulco et al.&lt;/strong&gt; Figure 2 shows predicted vs. measured fractional knockdown for all four models on each screen, with points coloured by enhancer-to-TSS distance.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/crispri_fig1.png" class="image-link" data-pswp-width="6303" data-pswp-height="3542"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/crispri_fig1.png" width="900px" height="505"loading="lazy"
			alt="Figure 2"
			title="Figure 2: Predicted vs. measured fractional knockdown for the four models on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Points coloured by enhancer-to-TSS distance. AlphaGenome achieves the highest Pearson and Spearman correlations on both screens; on Gasperini, NTv3 trails the leaders by a wide margin while Enformer lands mid-pack. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown." data-title-escaped="Figure 2: Predicted vs. measured fractional knockdown for the four models on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Points coloured by enhancer-to-TSS distance. AlphaGenome achieves the highest Pearson and Spearman correlations on both screens; on Gasperini, NTv3 trails the leaders by a wide margin while Enformer lands mid-pack. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;The headline numbers (left two columns: each model on every pair its own receptive field can reach; right two columns: every model restricted to Enformer&amp;rsquo;s 196 kb receptive field, so all four score the same set of pairs):&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Fulco — full&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Gasperini — full&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Fulco — Enformer RF&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Gasperini — Enformer RF&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Enformer&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.60 / 0.31&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.30 / 0.27&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.60 / 0.31&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.30 / 0.27&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Borzoi&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.66 / 0.49&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.34 / 0.33&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.66 / 0.49&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.34 / 0.35&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NTv3&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.34 / 0.09&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.12 / 0.14&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.34 / 0.09&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0.13 / 0.17&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AlphaGenome&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;strong&gt;0.67 / 0.54&lt;/strong&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;strong&gt;0.45 / 0.45&lt;/strong&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;strong&gt;0.67 / 0.54&lt;/strong&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;strong&gt;0.46 / 0.48&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Values are Pearson&amp;rsquo;s &lt;em&gt;r&lt;/em&gt; / Spearman&amp;rsquo;s ρ. N pairs in the &amp;ldquo;full&amp;rdquo; columns varies by model because larger-context models score extra distal pairs that Enformer can&amp;rsquo;t see (Fulco N = 62–63, Gasperini N = 352–438); in the &amp;ldquo;Enformer RF (Receptive Field)&amp;rdquo; columns N is uniform (Fulco et al. N = 62, Gasperini et al. N = 352), restricted to the enhancers Enformer predicts.&lt;/p&gt;
&lt;p&gt;The matched-RF columns rule out the simple &amp;ldquo;they just see more sequence&amp;rdquo; explanation for AlphaGenome and Borzoi&amp;rsquo;s lead: Fulco et al. barely moves (only one distal pair drops), and on Gasperini et al. the rankings are unchanged — AlphaGenome even nudges up slightly (Pearson 0.45 → 0.46, Spearman 0.45 → 0.48).&lt;/p&gt;
&lt;p&gt;A few takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AlphaGenome outperforms all other models&lt;/strong&gt; on both screens, though essentially tied with Borzoi on Fulco et al. — see the small-sample caveat in &lt;a class="link" href="#limitations" &gt;Limitations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NTv3 is the weakest on Gasperini et al.&lt;/strong&gt; NTv3 has a 1 Mb context, the same as AlphaGenome, but still trails the leaders by a wide margin (Pearson&amp;rsquo;s r 0.13 on the matched-RF set) — so context length isn&amp;rsquo;t the explanation. Enformer, despite its shorter 196 kb context (which excludes ~20% of Gasperini et al. pairs), lands mid-pack on the pairs it can see (Pearson&amp;rsquo;s r 0.30), close to Borzoi (0.34).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On the same set of pairs, AlphaGenome still leads.&lt;/strong&gt; Of Gasperini et al.&amp;rsquo;s pairs, 21 fall within AlphaGenome&amp;rsquo;s 1 Mb context but outside Borzoi&amp;rsquo;s 524 kb — so they contribute to AlphaGenome&amp;rsquo;s correlation but not Borzoi&amp;rsquo;s (Note, all of the tested Fulco et al. pairs are in Borzoi&amp;rsquo;s context). To make the comparison apples-to-apples, we restrict AlphaGenome to only the pairs Borzoi can also score: Pearson&amp;rsquo;s r 0.45 → 0.44, Spearman&amp;rsquo;s ρ 0.45 → 0.45 — giving essentially the same result.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Gasperini et al. ceiling is low across the board.&lt;/strong&gt; Even AlphaGenome leaves substantial variance unexplained. Some of this is likely measurement-side: Gasperini et al.&amp;rsquo;s scaled screen uses a high-MOI single-cell pooled design (median 28 gRNAs per cell), and the statistical and trans-perturbation challenges of high-MOI screens are well-documented (&lt;a class="link" href="https://genomebiology.biomedcentral.com/articles/10.1186/s13059-021-02545-2" target="_blank" rel="noopener"
 &gt;Barry et al., 2021&lt;/a&gt;). Fulco et al.&amp;rsquo;s CRISPRi-FlowFISH targets one enhancer at a time with a bulk-population readout, which we&amp;rsquo;d expect to give more precise per-pair effect sizes. We can&amp;rsquo;t separate measurement noise from model error from these correlations alone, so attributing the gap is interpretive — but it&amp;rsquo;s at least consistent with the per-screen difference we see. Either way, the headline framing is that AlphaGenome improves CRISPRi prediction but a large gap remains, especially for distal cis-regulatory elements (CREs).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="predictions-shrink-knockdowns-dont"&gt;Predictions shrink, knockdowns don&amp;rsquo;t
&lt;/h3&gt;&lt;p&gt;Figure 3 plots observed and predicted effect against enhancer-to-TSS distance, to more closely match &lt;a class="link" href="https://link.springer.com/article/10.1186/s13059-023-02899-9/figures/5" target="_blank" rel="noopener"
 &gt;Karollus et al.&amp;rsquo;s plotting style&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/crispri_fig2.png" class="image-link" data-pswp-width="6303" data-pswp-height="2761"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/crispri_fig2.png" width="900px" height="394"loading="lazy"
			alt="Figure 3"
			title="Figure 3: Observed (grey) and predicted (blue) effect (y-axis) vs. enhancer-to-TSS distance (x-axis). Predictions are systematically smaller than observed knockdowns across all four models, and the gap widens at distal distances." data-title-escaped="Figure 3: Observed (grey) and predicted (blue) effect (y-axis) vs. enhancer-to-TSS distance (x-axis). Predictions are systematically smaller than observed knockdowns across all four models, and the gap widens at distal distances."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Two patterns hold across all four models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Predictions are systematically smaller in magnitude than observed knockdowns.&lt;/strong&gt; Even where the rank ordering is right (good Spearman), the predicted effect sizes are compressed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The gap grows with distance.&lt;/strong&gt; Models capture some of the distance-decay biology, but the slope is shallower than the data demands — most obviously for NTv3, less so for AlphaGenome.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A short aside: AlphaGenome&amp;rsquo;s RNA-Seq head, aggregated as the mean signal across the target gene&amp;rsquo;s GENCODE exons (their paper&amp;rsquo;s preferred approach), beats AlphaGenome&amp;rsquo;s CAGE head on Gasperini et al. (Pearson&amp;rsquo;s r 0.45 vs. 0.39). On Fulco et al. the difference is small (0.67 vs. 0.66). So if you&amp;rsquo;re benchmarking a new model on these screens, your output-aggregation choice should be considered carefully!&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig2.png" class="image-link" data-pswp-width="4917" data-pswp-height="3542"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig2.png" width="900px" height="648"loading="lazy"
			alt="Figure 4"
			title="Figure 4: Predicted vs. measured fractional knockdown for Enformer and AlphaGenome CAGE track and RNA-Seq track on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Points coloured by enhancer-to-TSS distance. AlphaGenome&amp;#39;s RNA-Seq head with GENCODE-exon aggregation beats its CAGE head on Gasperini et al. and is comparable on Fulco et al. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown." data-title-escaped="Figure 4: Predicted vs. measured fractional knockdown for Enformer and AlphaGenome CAGE track and RNA-Seq track on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Points coloured by enhancer-to-TSS distance. AlphaGenome&amp;amp;#39;s RNA-Seq head with GENCODE-exon aggregation beats its CAGE head on Gasperini et al. and is comparable on Fulco et al. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h3 id="scoring-it-two-ways"&gt;Scoring it two ways
&lt;/h3&gt;&lt;p&gt;A second aside: we computed the predicted effect two ways. Figure 2 used the linear &lt;code&gt;pred_delta = (WT − mean(shuffle)) / WT&lt;/code&gt;. We also computed log&lt;sub&gt;2&lt;/sub&gt;(WT / mean(shuffle)) against −log&lt;sub&gt;2&lt;/sub&gt;(1 − y_delta) — a log fold-change scaling that de-emphasises a few high-end outliers. Figure 5 shows the log&lt;sub&gt;2&lt;/sub&gt; version. Spearman is identical between the two scorings (rank-invariant); Pearson can shift noticeably, especially on Gasperini, and AlphaGenome and Borzoi narrowly swap order on Fulco — though the broad picture (AlphaGenome and Borzoi well above NTv3) is robust.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig1.png" class="image-link" data-pswp-width="4917" data-pswp-height="3542"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig1.png" width="900px" height="648"loading="lazy"
			alt="Figure 5"
			title="Figure 5: Predicted vs. measured knockdown on the log2 alignment scale (log2(WT / mean(shuffle)) vs. −log2(1 − y_delta)) for Borzoi, NTv3, and AlphaGenome on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Enformer omitted. Points coloured by enhancer-to-TSS distance. Model ranking matches Figure 2; Pearson can shift on Gasperini, and AlphaGenome and Borzoi swap order on Fulco. Spearman&amp;#39;s ρ is identical between the two scorings. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown." data-title-escaped="Figure 5: Predicted vs. measured knockdown on the log2 alignment scale (log2(WT / mean(shuffle)) vs. −log2(1 − y_delta)) for Borzoi, NTv3, and AlphaGenome on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019. Enformer omitted. Points coloured by enhancer-to-TSS distance. Model ranking matches Figure 2; Pearson can shift on Gasperini, and AlphaGenome and Borzoi swap order on Fulco. Spearman&amp;amp;#39;s ρ is identical between the two scorings. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h3 id="test-time-augmentation-stabilising-alphagenome"&gt;Test-time augmentation: stabilising AlphaGenome
&lt;/h3&gt;&lt;p&gt;Karollus et al.&amp;rsquo;s original benchmark applies &lt;strong&gt;test-time augmentations (TTA)&lt;/strong&gt; — for each sequence, run the model on 3 small offsets (−43, 0, +43 bp) crossed with both orientations (forward + reverse-complement), then average the 6 predictions. The 43 bp shift isn&amp;rsquo;t arbitrary: Enformer&amp;rsquo;s output is binned at 128 bp, and 128 / 3 ≈ 43, so the three offsets sample the TSS at roughly even thirds within its bin, averaging out where exactly the landmark falls. Genomic seq2func models have small but real positional sensitivity — predictions wobble across shifts — and TTA reliably damps this. Past work has shown the same effect in adjacent settings (&lt;a class="link" href="https://www.nature.com/articles/s42256-022-00570-9" target="_blank" rel="noopener"
 &gt;Toneyan et al., 2022&lt;/a&gt;).&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;em&gt;Side note:&lt;/em&gt; Test-time augmentation (TTA) means running the model on slightly perturbed versions of the same input and averaging the outputs, so the final prediction is less dependent on incidental properties like exact bin alignment or input orientation.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;The headline benchmark (Figures 2–5) doesn&amp;rsquo;t use TTA, so all four models are compared on equal footing. To see what stabilising AlphaGenome&amp;rsquo;s predictions buys on this task, we ran a separate analysis applying Karollus et al.&amp;rsquo;s 6-pass recipe to AlphaGenome alone. Figure 6 shows the result: TTA improves AlphaGenome&amp;rsquo;s headline correlations on both screens, lifting Pearson&amp;rsquo;s r on Fulco from 0.67 to 0.69 and Spearman on Gasperini from 0.45 to 0.47.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig3.png" class="image-link" data-pswp-width="4917" data-pswp-height="3542"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-007/crispri_suppfig3.png" width="900px" height="648"loading="lazy"
			alt="Figure 6"
			title="Figure 6: AlphaGenome predicted vs. measured fractional knockdown on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019, without test time augmentations (TTA) (middle) versus with 6-pass TTA (3 shifts × 2 orientations, averaged; right). Points coloured by enhancer-to-TSS distance. TTA modestly improves AlphaGenome&amp;#39;s correlations on both screens — most visibly Fulco Pearson (0.67 → 0.69) and Gasperini Spearman (0.45 → 0.47); the other metrics are essentially unchanged. Enformer without TTA included for context. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown." data-title-escaped="Figure 6: AlphaGenome predicted vs. measured fractional knockdown on (a) Fulco et al., 2019 and (b) Gasperini et al., 2019, without test time augmentations (TTA) (middle) versus with 6-pass TTA (3 shifts × 2 orientations, averaged; right). Points coloured by enhancer-to-TSS distance. TTA modestly improves AlphaGenome&amp;amp;#39;s correlations on both screens — most visibly Fulco Pearson (0.67 → 0.69) and Gasperini Spearman (0.45 → 0.47); the other metrics are essentially unchanged. Enformer without TTA included for context. The dashed x = y line marks perfect prediction (predicted = observed); points falling below it indicate the model underestimates the experimental knockdown."&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h3 id="does-ensembling-help"&gt;Does ensembling help?
&lt;/h3&gt;&lt;p&gt;On the matched-RF (Receptive Field) set used in the headline table, a simple equal-weight average of the four models&amp;rsquo; predictions doesn&amp;rsquo;t beat the best single model on either screen: Pearson&amp;rsquo;s r is 0.66 on Fulco (just below AlphaGenome&amp;rsquo;s 0.67) and 0.42 on Gasperini (below AlphaGenome&amp;rsquo;s 0.46). On Gasperini, where AlphaGenome dominates, averaging in the weaker models clearly dilutes the predictive signal; on Fulco, where the models are more comparable, the average still lands fractionally below the leader rather than above it. Equal-weight ensembling, in other words, doesn&amp;rsquo;t buy you anything over just using AlphaGenome here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="limitations"&gt;Limitations
&lt;/h2&gt;&lt;p&gt;A few things to flag about our analysis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Differences from Karollus 2023.&lt;/strong&gt; We cross-checked our Enformer reimplementation against Karollus&amp;rsquo;s original code line-by-line with an LLM (&lt;a class="link" href="https://www.anthropic.com/" target="_blank" rel="noopener"
 &gt;Claude Opus 4.7&lt;/a&gt;). Our Enformer numbers don&amp;rsquo;t exactly match their published ones but the qualitative pattern is the same — Enformer underpredicts distal enhancer effects. Four deliberate departures from their approach may explain some of this gap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Window construction.&lt;/strong&gt; Karollus reads precomputed &lt;code&gt;sequence_start&lt;/code&gt;/&lt;code&gt;sequence_end&lt;/code&gt; from a fixed table, designed so both TSS and enhancer sit inside Enformer&amp;rsquo;s central crop. We build the window on-the-fly as strict TSS-centred so that all models were compared equally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TTA only for AlphaGenome.&lt;/strong&gt; Karollus et al. applies TTA (6 forward passes per sequence) uniformly across all evaluated models. Our headline four-model comparison (Figures 2–5) does not apply TTA to any model — each model is evaluated using its standard published setup: single forward pass for Enformer, NTv3, and AlphaGenome (the distilled checkpoint), and the 4-fold ensemble for Borzoi. We separately apply Karollus et al.&amp;rsquo;s 6-pass TTA recipe to AlphaGenome (Figure 6) to characterise the stability gain, but we don&amp;rsquo;t apply it to Enformer, Borzoi, or NTv3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No N-replacement control.&lt;/strong&gt; Karollus also runs an all-N enhancer replacement (replacing every base with the &amp;ldquo;N&amp;rdquo; wildcard) as a stronger knockout than shuffling. We deliberately don&amp;rsquo;t: while reference genomes do contain N regions (gaps, centromeres, hard-masked repeats), these are typically excluded or under-weighted in training pipelines for these models, so a 2 kb block of N embedded in an otherwise-normal genic context is anomalous input. Predictions there reflect how the model handles unfamiliar input, not how it responds to motif loss, which is the actual question. The dinucleotide shuffle keeps the model in-distribution and isolates the motif-loss signal cleanly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear vs. log&lt;sub&gt;2&lt;/sub&gt; observed effect.&lt;/strong&gt; Karollus uses log&lt;sub&gt;2&lt;/sub&gt;(1 + fraction_change); we report the linear fractional change and the log&lt;sub&gt;2&lt;/sub&gt; observed effect. Spearman is identical; Pearson&amp;rsquo;s r differs by a small log-vs-linear distortion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These methodological differences may shift absolute Pearson values, though broad model rankings should be unaffected.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Small Fulco sample (n ≈ 63).&lt;/strong&gt; Fulco et al.&amp;rsquo;s ~60 validated enhancer–gene pairs is small enough that correlation estimates carry wide confidence intervals — for r ≈ 0.65 at n = 63 the 95% CI spans roughly ±0.15 either side. Numerical differences within roughly ±0.05–0.10 (e.g., AlphaGenome 0.67 vs Borzoi 0.66 on Fulco Pearson) should be read as essentially tied, not as a meaningful ordering. Gasperini&amp;rsquo;s ~440 pairs give tighter estimates, so the model gaps there are more reliable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;K562 only.&lt;/strong&gt; Both screens are in K562, and K562 is heavily represented in every model&amp;rsquo;s training data. None of these numbers say anything about how the models would do on cell types under-represented in training. We&amp;rsquo;d expect the gap between models, and between predictions and truth, to widen there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In-silico ≠ real CRISPRi.&lt;/strong&gt; Dinucleotide shuffling destroys motif content but doesn&amp;rsquo;t capture chromatin context changes, dCas9 occupancy, or 3D genome reorganisation. It&amp;rsquo;s a motif-loss proxy, not a full simulation. Karollus discusses this; worth keeping in mind when reading the numbers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CRISPRi isn&amp;rsquo;t purely cis.&lt;/strong&gt; Knocking down an enhancer can affect other nearby genes, or the target gene&amp;rsquo;s own regulatory partners, whose altered expression shifts the cellular context against which we measure the target. Part of any measured enhancer effect is downstream of these indirect (trans) effects, which a sequence-only model predicting from a TSS-centred window can&amp;rsquo;t capture.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="implications"&gt;Implications
&lt;/h2&gt;&lt;p&gt;The benchmark tests seq2func models on experimentally validated distal enhancer-promoter interactions. AlphaGenome&amp;rsquo;s gains over Enformer on distal CRE effect-magnitude prediction are substantial, and most pronounced on the larger Gasperini et al. screen. That&amp;rsquo;s real progress. But the headline finding — that even AlphaGenome underestimates the magnitude of distal-enhancer effects — converges with what AlphaGenome&amp;rsquo;s own paper observed on the easier enhancer-gene linking task on ENCODE-rE2G: distal CREs remain hard from two distinct evaluation angles. Fully benchmarking seq2func models on distal CRE effect magnitudes will require follow-up CRISPRi screens in cell lines beyond K562 — without them, we can&amp;rsquo;t tell which gains generalise.&lt;/p&gt;
&lt;p&gt;Echoing &lt;a class="link" href="https://www.biorxiv.org/content/10.64898/2026.02.01.702969v1.full" target="_blank" rel="noopener"
 &gt;Tu, 2026&lt;/a&gt; and &lt;a class="link" href="https://www.biorxiv.org/content/10.1101/2025.08.05.668750v2.full" target="_blank" rel="noopener"
 &gt;Shen, 2025&lt;/a&gt; from a different angle: AlphaGenome improves CRISPRi effect prediction, but the remaining gap — especially for distal CREs — is still an open problem for the field.&lt;/p&gt;
&lt;p&gt;The repo is set up so adding a fifth model is one new &lt;code&gt;scripts/test_&amp;lt;dataset&amp;gt;_&amp;lt;newmodel&amp;gt;.py&lt;/code&gt; writing a CSV with &lt;code&gt;y_delta&lt;/code&gt; and &lt;code&gt;pred_delta&lt;/code&gt; columns. If you&amp;rsquo;ve got a model you want to test, we&amp;rsquo;d love to see it!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="code-and-links"&gt;Code and links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Al-Murphy/seq2func_crispri_eval" target="_blank" rel="noopener"
 &gt;Source code &amp;amp; evaluation scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://genomebiology.biomedcentral.com/articles/10.1186/s13059-023-02899-9" target="_blank" rel="noopener"
 &gt;Karollus et al., 2023 — the benchmark this extends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://zenodo.org/records/7613255" target="_blank" rel="noopener"
 &gt;SequenceModelBenchmark Zenodo (Karollus tables)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Models: &lt;a class="link" href="https://github.com/lucidrains/enformer-pytorch" target="_blank" rel="noopener"
 &gt;Enformer (PyTorch)&lt;/a&gt; · &lt;a class="link" href="https://github.com/calico/borzoi" target="_blank" rel="noopener"
 &gt;Borzoi&lt;/a&gt; (original) · &lt;a class="link" href="https://huggingface.co/johahi" target="_blank" rel="noopener"
 &gt;Flashzoi&lt;/a&gt; (Borzoi PyTorch port, 4-fold ensemble — used here) · &lt;a class="link" href="https://huggingface.co/InstaDeepAI/NTv3_650M_post" target="_blank" rel="noopener"
 &gt;NTv3&lt;/a&gt; · &lt;a class="link" href="https://github.com/genomicsxai/alphagenome-pytorch" target="_blank" rel="noopener"
 &gt;AlphaGenome PyTorch port&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Avsec, Ž. et al. Effective gene expression prediction from sequence by integrating long-range interactions. &lt;em&gt;Nature Methods&lt;/em&gt;, 18, 1196–1203 (2021). &lt;a class="link" href="https://doi.org/10.1038/s41592-021-01252-x" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41592-021-01252-x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linder, J. et al. Predicting RNA-seq coverage from DNA sequence as a unifying model of gene regulation. &lt;em&gt;Nature Genetics&lt;/em&gt;, 57, 949–961 (2025). &lt;a class="link" href="https://doi.org/10.1038/s41588-024-02053-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41588-024-02053-6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Boshar, S. et al. A foundational model for joint sequence-function multi-species modeling at scale for long-range genomic prediction. &lt;em&gt;bioRxiv&lt;/em&gt; (2025). &lt;a class="link" href="https://doi.org/10.64898/2025.12.22.695963" target="_blank" rel="noopener"
 &gt;https://doi.org/10.64898/2025.12.22.695963&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Avsec, Ž. et al. Advancing regulatory variant effect prediction with AlphaGenome. &lt;em&gt;Nature&lt;/em&gt;, 649, 1206–1218 (2026). &lt;a class="link" href="https://doi.org/10.1038/s41586-025-10014-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-025-10014-0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karollus, A., Mauermeier, T., Gagneur, J. Current sequence-based models capture gene expression determinants in promoters but mostly ignore distal enhancers. &lt;em&gt;Genome Biology&lt;/em&gt;, 24, 56 (2023). &lt;a class="link" href="https://doi.org/10.1186/s13059-023-02899-9" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s13059-023-02899-9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fulco, C. P. et al. Activity-by-contact model of enhancer–promoter regulation from thousands of CRISPR perturbations. &lt;em&gt;Nature Genetics&lt;/em&gt;, 51, 1664–1669 (2019). &lt;a class="link" href="https://doi.org/10.1038/s41588-019-0538-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41588-019-0538-0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gasperini, M. et al. A genome-wide framework for mapping gene regulation via cellular genetic screens. &lt;em&gt;Cell&lt;/em&gt;, 176, 377–390.e19 (2019). &lt;a class="link" href="https://doi.org/10.1016/j.cell.2018.11.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cell.2018.11.029&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tu, X. et al. A modality gap in personal-genome prediction by sequence-to-function models. &lt;em&gt;bioRxiv&lt;/em&gt; (2026). &lt;a class="link" href="https://doi.org/10.64898/2026.02.01.702969" target="_blank" rel="noopener"
 &gt;https://doi.org/10.64898/2026.02.01.702969&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shen, L. AlphaGenome enhances personal gene expression prediction but retains key limitations. &lt;em&gt;bioRxiv&lt;/em&gt; (2025). &lt;a class="link" href="https://doi.org/10.1101/2025.08.05.668750" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2025.08.05.668750&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sasse, A., Ng, B., Spiro, A.E. et al. Benchmarking of deep neural networks for predicting personal gene expression from DNA sequence highlights shortcomings. &lt;em&gt;Nature Genetics&lt;/em&gt;, 55, 2060–2064 (2023). &lt;a class="link" href="https://doi.org/10.1038/s41588-023-01524-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41588-023-01524-6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Koo, P.K., Majdandzic, A., Ploenzke, M., Anand, P., Paul, S.B. Global importance analysis: An interpretability method to quantify importance of genomic features in deep neural networks. &lt;em&gt;PLoS Computational Biology&lt;/em&gt;, 17(5), e1008925 (2021). &lt;a class="link" href="https://doi.org/10.1371/journal.pcbi.1008925" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pcbi.1008925&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Toneyan, S., Tang, Z., Koo, P.K. Evaluating deep learning for predicting epigenomic profiles. &lt;em&gt;Nature Machine Intelligence&lt;/em&gt;, 4, 1088–1100 (2022). &lt;a class="link" href="https://doi.org/10.1038/s42256-022-00570-9" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s42256-022-00570-9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gschwind, A.R. et al. An encyclopedia of enhancer-gene regulatory interactions in the human genome. &lt;em&gt;bioRxiv&lt;/em&gt; (2023). &lt;a class="link" href="https://doi.org/10.1101/2023.11.09.563812" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2023.11.09.563812&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cheng, W. et al. DNALONGBENCH: a benchmark suite for long-range DNA prediction tasks. &lt;em&gt;Nature Communications&lt;/em&gt;, 16, 10108 (2025). &lt;a class="link" href="https://doi.org/10.1038/s41467-025-65077-4" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41467-025-65077-4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Barry, T., Wang, X., Morris, J.A. et al. SCEPTRE improves calibration and sensitivity in single-cell CRISPR screen analysis. &lt;em&gt;Genome Biology&lt;/em&gt;, 22, 344 (2021). &lt;a class="link" href="https://doi.org/10.1186/s13059-021-02545-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s13059-021-02545-2&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Welcome to the Genomics × AI Blog</title><link>https://genomicsxai.github.io/blogs/2026-001/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://genomicsxai.github.io/blogs/2026-001/</guid><description>&lt;img src="https://genomicsxai.github.io/" alt="Featured image of post Welcome to the Genomics × AI Blog" /&gt;&lt;figure&gt;&lt;a href="https://genomicsxai.github.io/blogs/2026-001/genomics_x_ai_title.png" class="image-link" data-pswp-width="1536" data-pswp-height="1024"&gt;
		&lt;img src="https://genomicsxai.github.io/blogs/2026-001/genomics_x_ai_title.png" width="400px" height="266"loading="lazy"
			alt="Genomics × AI"
			&gt;
		&lt;/a&gt;&lt;/figure&gt;&lt;h2 id="welcome-to-the-genomics--ai-blog"&gt;Welcome to the &lt;strong&gt;Genomics × AI&lt;/strong&gt; blog.
&lt;/h2&gt;&lt;p&gt;We created this space for the community to use to share short, opinionated blog posts about how genomics and machine learning actually get done in real labs: what works, what doesn’t, and the ideas we’re still testing. Posts will be written in Git, reviewed internally within your lab, editorially reviewed in public, and published only when an editor is happy with them—so every article has a clear history and a clear home.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is to disseminate ideas, incremental results, negative results and tutorials quickly using blog posts as a more personalised, free-form format.&lt;/p&gt;
&lt;p&gt;If you’d like to contribute, start by reading the &lt;a class="link" href="https://genomicsxai.github.io/submission-guidelines/" &gt;Submission Guidelines&lt;/a&gt; and opening a discussion with us on &lt;a class="link" href="https://github.com/genomicsxai/genomicsxai.github.io/discussions" target="_blank" rel="noopener"
 &gt;GitHub Discussions&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>