\section{ESM-2 Language Model Head Decoder} \label{sec:decoder} Our decoder leverages the pre-trained ESM-2 language model head to convert generated embeddings back to amino acid sequences, avoiding traditional cosine similarity approaches in favor of a principled probabilistic decoding strategy that maintains the semantic structure of the protein embedding space. \subsection{Decoder Architecture} The decoding process consists of three main stages: (1) decompression from the flow-generated compressed space back to full ESM-2 embedding space, (2) projection through ESM-2's language model head, and (3) probabilistic sequence sampling. \subsubsection{Embedding Decompression} \label{sec:decompression} The flow matching model generates embeddings in a compressed 80-dimensional space (16× compression from ESM-2's native 1280 dimensions). The decompressor $\mathcal{D}: \mathbb{R}^{L \times 80} \rightarrow \mathbb{R}^{L \times 1280}$ reconstructs full-dimensional embeddings: \begin{align} \mathbf{z}^{(dec)} &= \text{LayerNorm}(\mathbf{z}^{(comp)}) \mathbf{W}^{(proj)} \label{eq:proj}\\ \mathbf{x}^{(unpool)} &= \text{Unpool}(\mathbf{z}^{(dec)}) \label{eq:unpool}\\ \mathbf{h}^{(full)} &= \text{TransformerEncoder}(\mathbf{x}^{(unpool)}) \label{eq:decoder_transformer} \end{align} where $\mathbf{W}^{(proj)} \in \mathbb{R}^{80 \times 1280}$ is the learned projection matrix, and the unpooling operation restores the original sequence length through interpolation. The transformer encoder consists of 2 layers with 8 attention heads and 5120-dimensional feedforward networks. \subsubsection{ESM-2 Language Model Head Projection} \label{sec:lm_head} Unlike approaches that use cosine similarity between generated embeddings and amino acid token embeddings, our method directly utilizes ESM-2's pre-trained language model head $\text{LM}_{\text{ESM-2}}$. This head was trained to predict amino acids from contextual embeddings during ESM-2's pre-training on evolutionary sequences, ensuring optimal alignment between embedding space and amino acid probabilities. The language model head applies layer normalization followed by a linear projection: \begin{align} \mathbf{h}^{(norm)} &= \text{LayerNorm}_{\text{ESM-2}}(\mathbf{h}^{(full)}) \label{eq:esm_norm}\\ \mathbf{L}^{(full)} &= \mathbf{h}^{(norm)} \mathbf{W}^{(lm)} + \mathbf{b}^{(lm)} \label{eq:lm_projection}\\ \mathbf{L}^{(aa)} &= \mathbf{L}^{(full)}[:, :, \mathcal{I}_{\text{AA}}] \label{eq:aa_selection} \end{align} where $\mathbf{W}^{(lm)} \in \mathbb{R}^{1280 \times |\mathcal{V}|}$ and $\mathbf{b}^{(lm)} \in \mathbb{R}^{|\mathcal{V}|}$ are ESM-2's pre-trained language model parameters, $|\mathcal{V}|$ is ESM-2's full vocabulary size, and $\mathcal{I}_{\text{AA}} = \{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23\}$ are the indices corresponding to the 20 canonical amino acids in ESM-2's vocabulary. \subsubsection{Probabilistic Sequence Sampling} \label{sec:sampling} The logits $\mathbf{L}^{(aa)} \in \mathbb{R}^{L \times 20}$ are converted to amino acid probability distributions and sampled using nucleus sampling (top-p) for controlled stochasticity: \begin{align} \mathbf{P}_{i,j} &= \frac{\exp(\mathbf{L}^{(aa)}_{i,j} / \tau)}{\sum_{k=1}^{20} \exp(\mathbf{L}^{(aa)}_{i,k} / \tau)} \label{eq:softmax_temp}\\ \mathbf{P}^{(sorted)}_{i}, \mathbf{I}^{(sorted)}_{i} &= \text{sort}(\mathbf{P}_{i}, \text{descending}=\text{True}) \label{eq:sort_probs}\\ \mathbf{C}_{i} &= \text{cumsum}(\mathbf{P}^{(sorted)}_{i}) \label{eq:cumsum}\\ \mathbf{M}_{i} &= \mathbf{C}_{i} \leq p \label{eq:nucleus_mask}\\ a_i &\sim \text{Categorical}(\mathbf{P}^{(filtered)}_{i}) \label{eq:sample} \end{align} where $\tau = 0.8$ is the temperature parameter, $p = 0.9$ is the nucleus sampling threshold, and $\mathbf{P}^{(filtered)}_{i}$ contains only the probability mass within the top-p nucleus, renormalized to sum to 1. \subsection{Advantages Over Cosine Similarity Approaches} Our ESM-2 language model head approach offers several key advantages over traditional cosine similarity-based decoders: \begin{enumerate} \item \textbf{Contextual Awareness}: The language model head was trained to predict amino acids from contextual embeddings, incorporating sequence context and evolutionary patterns that pure cosine similarity cannot capture. \item \textbf{Probability Calibration}: The pre-trained head provides well-calibrated probability distributions over amino acids, enabling principled uncertainty quantification and controlled sampling strategies. \item \textbf{Evolutionary Consistency}: ESM-2's training on evolutionary sequences ensures that the embedding-to-sequence mapping respects biological constraints and evolutionary relationships. \item \textbf{Reduced Bias}: Cosine similarity approaches can be biased toward high-frequency amino acids in the embedding space. The language model head learned to balance frequency with contextual appropriateness during pre-training. \end{enumerate} \subsection{Decoding Performance} The decoder successfully converts flow-generated embeddings to valid amino acid sequences with high fidelity. For the 80 sequences generated with different CFG scales, we observe: \begin{itemize} \item \textbf{Sequence Validity}: 100\% of decoded sequences contain only canonical amino acids \item \textbf{Length Consistency}: All sequences maintain the target length of 50 residues \item \textbf{Diversity}: Strong CFG (scale 7.5) produces the highest diversity while maintaining biological plausibility \item \textbf{AMP Classification}: 8.8\% of decoded sequences are classified as antimicrobial peptides by HMD-AMP, with Strong CFG achieving 20\% AMP rate \end{itemize} \subsection{Implementation Details} The decoder is implemented using PyTorch and leverages the pre-trained ESM-2 model (esm2\_t33\_650M\_UR50D) from Facebook's ESM repository. Key implementation considerations include: \begin{itemize} \item \textbf{Memory Efficiency}: Batch processing with automatic chunking to prevent out-of-memory errors \item \textbf{Numerical Stability}: Careful handling of temperature scaling and probability renormalization \item \textbf{Deterministic Sampling}: Optional seed control for reproducible sequence generation \item \textbf{Confidence Estimation}: Per-position maximum probability averaging for sequence confidence scoring \end{itemize} The complete decoding pipeline from compressed flow embeddings to amino acid sequences takes approximately 0.1 seconds per sequence on GPU hardware, enabling efficient large-scale sequence generation and analysis. \begin{algorithm}[h] \caption{ESM-2 Language Model Head Decoder} \label{alg:decoder} \begin{algorithmic}[1] \REQUIRE Flow-generated compressed embeddings $\mathbf{Z}^{(comp)} \in \mathbb{R}^{B \times L \times 80}$ \REQUIRE Pre-trained ESM-2 model with language model head \REQUIRE Temperature $\tau = 0.8$, nucleus threshold $p = 0.9$ \ENSURE Amino acid sequences $\mathbf{S} = \{s_1, s_2, \ldots, s_B\}$ \STATE $\mathbf{H}^{(full)} \leftarrow \text{Decompressor}(\mathbf{Z}^{(comp)})$ \COMMENT{Decompress to ESM-2 space} \STATE $\mathbf{H}^{(norm)} \leftarrow \text{LayerNorm}_{\text{ESM-2}}(\mathbf{H}^{(full)})$ \COMMENT{Apply ESM-2 normalization} \STATE $\mathbf{L}^{(full)} \leftarrow \mathbf{H}^{(norm)} \mathbf{W}^{(lm)} + \mathbf{b}^{(lm)}$ \COMMENT{Language model head projection} \STATE $\mathbf{L}^{(aa)} \leftarrow \mathbf{L}^{(full)}[:, :, \mathcal{I}_{\text{AA}}]$ \COMMENT{Extract amino acid logits} \STATE $\mathbf{P} \leftarrow \text{softmax}(\mathbf{L}^{(aa)} / \tau)$ \COMMENT{Temperature-scaled probabilities} \FOR{$i = 1$ to $B$} \FOR{$j = 1$ to $L$} \STATE $\mathbf{p}^{(sorted)}, \mathbf{idx} \leftarrow \text{sort}(\mathbf{P}_{i,j}, \text{desc})$ \COMMENT{Sort probabilities} \STATE $\mathbf{c} \leftarrow \text{cumsum}(\mathbf{p}^{(sorted)})$ \COMMENT{Cumulative probabilities} \STATE $\mathbf{mask} \leftarrow \mathbf{c} \leq p$ \COMMENT{Nucleus mask} \STATE $\mathbf{p}^{(filtered)} \leftarrow \text{renormalize}(\mathbf{p}^{(sorted)}[\mathbf{mask}])$ \COMMENT{Filter and renormalize} \STATE $a_{i,j} \leftarrow \text{sample}(\mathbf{p}^{(filtered)})$ \COMMENT{Sample amino acid} \ENDFOR \STATE $s_i \leftarrow \text{decode\_indices}(\mathbf{a}_i)$ \COMMENT{Convert to sequence string} \ENDFOR \RETURN $\mathbf{S}$ \end{algorithmic} \end{algorithm}