Skip to content
Mighten's Blog

Deep Crossing: The Dawn of Deep Learning in Recommender Systems

Discover Deep Crossing model that pioneered deep learning for CTR prediction. Learn its four-layer architecture — Embedding, Stacking, Residual Units, and Scoring — and why it was a revolutionary milestone.

Recommender System 9 min read

Hi, continuing our recommender systems journey, today we take a pivotal step forward. In the last post, we saw how FM and FFM solved the sparsity and complexity problems of feature crossing — but they remained fundamentally constrained to second-order interactions. What if three features interact? What if five? What if the true signal requires deep, hierarchical combinations that pairwise models cannot express?

Theoretically, FM can be extended to third-order or even higher-order feature crossing. But due to combinatorial explosion, the number of parameters and training complexity become prohibitive — making higher-order FM variants impractical for real-world engineering.

This is where deep learning enters the picture. With their nearly unlimited capacity for hierarchical feature combination, neural networks naturally became the next frontier for recommendation models. And the model that opened this door was Microsoft’s Deep Crossing — one of the first complete, end-to-end deep learning architectures for CTR prediction.


Deep Crossing was developed at Microsoft for a high-stakes industrial problem: predicting click-through rates on search ads in the Bing search engine. When a user types a search query, Bing returns both organic search results and sponsored advertisements. Maximizing ad click probability — and accurately predicting it — is central to the search engine’s revenue model.

The features used in this scenario are diverse, spanning three categories:

CategoryFeaturesEncoding
Categorical (one-hot/multi-hot)Query, Ad Keyword, Ad Title, Landing Page, Match TypeOne-hot or multi-hot encoding → sparse high-dimensional vectors
NumericalHistorical CTR, Predicted CTR (from another model)Used directly as scalar values
Feature Groups (need further processing)Campaign (budget, targeting), Impression samples, Click samplesExtracted into sub-features: numerical fields (budget) and categorical fields (campaign ID)

Categorical features — like the user’s search query, the advertiser’s keyword, the ad title, and the landing page URL — are encoded as one-hot or multi-hot vectors. These are enormous and extremely sparse: a query vocabulary can contain millions of unique terms, but each sample activates only a handful.

Numerical features — like an ad’s historical click-through rate or a CTR estimate from another model — are continuous values that can be directly fed into the network.

Feature groups — like “Campaign” or “Impression samples” — are not single features but composite entities. For example, a campaign contains a budget (numerical) and a campaign ID (categorical), each requiring different treatment.

Once all features are encoded into vector representations, Deep Crossing processes them through four architectural layers to produce the final CTR prediction.


Before diving into the architecture, let’s frame the three problems that Deep Crossing must solve internally — these are the same challenges that any deep learning recommendation model faces:

  1. Sparse feature densification: Categorical features encoded via one-hot are too sparse for direct neural network training. The model must convert these sparse vectors into compact, dense representations.

  2. Automatic feature crossing: Unlike FM/FFM, which are limited to second-order interactions, the model should learn arbitrary-order feature combinations — including third-order, fourth-order, and beyond — without manual specification.

  3. Optimization target fitting: The output layer must produce a well-calibrated probability that aligns with the training objective (binary classification for CTR).

Deep Crossing addresses each challenge with a dedicated architectural component, forming a clean four-layer pipeline.


As shown in the diagram below, Deep Crossing consists of four layers stacked from bottom to top: Embedding, Stacking, Multiple Residual Units, and Scoring.

flowchart TD
classDef plain fill:none,stroke:none;
classDef objective fill:#2563EB,stroke:#1E40AF,color:#fff,stroke-width:2px;
classDef scoring fill:#60A5FA,stroke:#2563EB,color:#fff;
classDef residual fill:#2CB67D,stroke:#15803D,color:#fff;
classDef stacking fill:#A7F3D0,stroke:#2CB67D,color:#111827;
classDef embedding fill:#FEF3C7,stroke:#F59E0B,color:#111827;
classDef feature fill:#F3F4F6,stroke:#9CA3AF,color:#111827;
Obj((Objective)):::objective
SL[Scoring Layer]:::scoring
MRU[Multiple Residual Units Layer]:::residual
ST[Stacking Layer]:::stacking
E1[Embedding #1]:::embedding
F1[Feature #1]:::feature
F2[Feature #2]:::feature
XX["......"]:::plain
En[Embedding #n]:::embedding
Fn[Feature #n]:::feature
Obj --- SL
SL --- MRU
MRU --- ST
ST --- E1
ST --- F2
ST -.- XX
ST --- En
E1 --- F1
En --- Fn
linkStyle default stroke:#6B7280,stroke-width:2px

Let’s walk through each layer from bottom to top.


flowchart LR
classDef sparse fill:#f9f2f4,stroke:#d9534f,stroke-width:2px,color:#333
classDef dense fill:#dff0d8,stroke:#5cb85c,stroke-width:2px,color:#333
classDef layer fill:#2b5c8f,stroke:#1d3d63,stroke-width:2px,color:#fff
direction LR
Sparse["<b>Feature Vector</b><br>(❌ Sparse)<br>0<br><b>*1*</b><br>0<br>0<br><b>*1*</b><br>0<br>0<br>0<br>0<br>0<br>0<br>...<br>0"]:::sparse
FC("🧠 <b>Embedding Layer</b>"):::layer
Dense["<b>Embedding Vector</b><br>(✅ Dense)<br>0.14415964957352<br>0.72123631973606<br>0.94805644829256<br>0.56128078600054<br>0.38488913844046"]:::dense
Sparse .-> FC
FC -.-> Dense

The Embedding layer converts sparse categorical features into dense embedding vectors.

KEY INSIGHT:

  • the Embedding layer can be viewed mathematically as a fully connected layer without bias whose input is one-hot encoded (although in practice it is implemented as an embedding lookup rather than an actual matrix multiplication.)
  • the original input feature vectors are sparse, while the converted embedding vectors are dense
  • the embedding vectors have far fewer dimensions than the feature vectors

The function of the Stacking layer is simple: it concatenates different embedding vectors and numerical features to form a new feature vector containing all features. It is also commonly referred to as the Concatenate layer.


Multiple Residual Units Layer is the heart of Deep Crossing.

The Stacking layer’s output is fed into a Multi-Layer Perceptron (MLP), but rather than a standard neural network built from plain perceptrons, Deep Crossing implements this MLP as a multilayer residual network of stacked residual units.

Why Residual Connections?

In a standard deep neural network, as more layers are added, two problems emerge:

  1. Vanishing gradients: During backpropagation, gradients shrink exponentially as they propagate backward through layers, making early layers nearly impossible to train
  2. Degradation problem: Counterintuitively, adding more layers can actually increase training error — a deeper network performs worse than a shallower one, even though the deeper network could theoretically learn the identity mapping by setting the added layers to identity

Residual connections largely alleviate these optimization difficulties by introducing skip connections:

graph LR
classDef plain fill:none,stroke:none;
Xi["x<sup>i</sup>"]:::plain
W0["w<sub>0</sub>, b<sub>0</sub>"]
W1["w<sub>1</sub>, b<sub>1</sub>"]
Sum((+))
Xo["x<sup>o</sup>"]:::plain
Xi --> W0
Xi --> Sum
W0 -- "ReLU" --> W1
W1 --> Sum
Sum -- "ReLU" --> Xo

Mathematically, a single residual unit computes:

xout=ReLU(F(xin)+xin)(3-1)\boxed{\boldsymbol{x}_{\text{out}} = \text{ReLU}(\mathcal{F}(\boldsymbol{x}_{\text{in}}) + \boldsymbol{x}_{\text{in}})} \tag{3-1}

Where F()\mathcal{F}(\cdot) is the residual function.

The shortcut path adds the input directly back to the residual branch. Rather than directly approximating the mapping H(x)H(x), the residual branch learns the residual function F(x)=H(x)x\mathcal{F}(x) = H(x) - x.

KEY INSIGHT: Fitting the residual F(x)=H(x)x\mathcal{F}(x) = H(x) - x is easier than fitting H(x)H(x), for the following reasons:

  • “Doing nothing” is very easy — to pass xx through unchanged (“identity”), the residual unit can learn a residual function close to zero, far simpler than a MLP layer learning to copy its input xx
  • gradients get a shortcut — the chain rule gives the following term, so the +1+1 carries the gradient back even when F(x)x0\frac{\partial \mathcal{F}(x)}{\partial x} \to 0. This is ResNet’s trick for depth — and why Deep Crossing builds its MLP from residual units:
Ex=EH(F(x)x+1)\frac{\partial \mathcal{E}}{\partial x} = \frac{\partial \mathcal{E}}{\partial H}\left(\frac{\partial \mathcal{F}(x)}{\partial x} + 1\right)

Stacking these residual units enables arbitrary-order feature interactions to be learned, allowing the model to capture much richer nonlinear feature combinations.


The final layer converts the deeply crossed feature representation into a click probability.

For binary classification problems (such as CTR prediction), the scoring layer often uses a fully connected output layer followed by a sigmoid activation, which is mathematically equivalent to logistic regression.

None of Deep Crossing’s ingredients were new:

  • FM had already represented sparse features as latent vectors (later commonly interpreted as embeddings).
  • MLP was decades old
  • residual connections were popularized by ResNet

The revolution of Deep Crossing was not a new mechanism but a relocation of labor: the feature engineering that data scientists once did by hand - crafting crosses, guessing which interactions matter - was moved off the human and onto the gradient. Raw features enter, a probability leaves, and everything in between is learned.

Unlike earlier neural-network approaches that relied primarily on dense engineered inputs, Deep Crossing demonstrated that heterogeneous sparse industrial features could be learned directly in an end-to-end framework.

FM and FFM answer “which features interact?” by listing them - second-order pairs, and higher orders only at a combinatorial cost that makes the extension impractical.

Deep Crossing asks a different question: “how many times should features recombine?” - and answers it with depth, not enumeration. Each residual unit mixes the full feature vector and composes it one level higher, so arbitrary-order interactions emerge from stacking layers rather than from a growing list of terms.

This is what the name encodes: a “deep crossover” controlled by network depth. The phrase is a bridge to the FM worldview - it tells that audience “this is your crossing, only deeper” - even though mechanically a residual MLP mixes and transforms rather than listing discrete crosses. Discrete enumeration gives way to continuous composition.

FM / FFMDeep Crossing
Max Crossing OrderSecond-orderArbitrary (via network depth)
Feature EngineeringNot requiredNot required
Training ParadigmConvex optimizationEnd-to-end backpropagation
ArchitectureShallow (1 layer)Deep (multiple layers)

FM already represented features as vectors and crossed them with a fixed operator - the inner product.

Deep Crossing’s subtler move was to decouple representation from interaction:

  • the embeddings handle representation
  • the residual MLP — a learned deep network — handles feature crossing, replacing FM’s fixed bilinear form with a generic, trainable function.

Once crossing is just “a network on top of shared embeddings,” it can be deepened, augmented with attention, or swapped for a specialized cross layer.

That decoupling - not the residual trick itself - is what every later model (Wide & Deep, DeepFM, DCN, DIN) actually inherits.

Depth buys arbitrary-order interactions without combinatorial blow-up, but it pays in interpretability:

  • FM hands you inspectable pairwise weights - you can point at a specific feature pair and its effect.
  • Deep Crossing dissolves high-order interactions into distributed, implicit transformations; the model crosses features but cannot tell you which ones.

Deep Crossing was more than a single model — it was a proof of concept that end-to-end deep learning could scale to industrial recommender systems.

Key Takeaways:

  1. First complete deep CTR model: Deep Crossing was one of the first complete end-to-end deep learning architectures for industrial CTR prediction — from feature encoding to embedding to deep network training, all trained end-to-end.
  2. The four-layer architecture: Embedding (sparse → dense), Stacking (concatenation), Multiple Residual Units (deep feature crossing), and Scoring (probability output) form a clean, modular pipeline that remains the conceptual template for modern recommendation models.
  3. Residual connections enable depth: By using residual units instead of plain fully connected layers, Deep Crossing could train deeper networks while mitigating the vanishing-gradient problem, enabling richer feature crossing than shallow alternatives.
  4. The “Embedding + MLP” paradigm: This design pattern — sparse features → embeddings → neural network → prediction — has become one of the dominant design patterns of deep learning recommendation systems. Modern architectures like DeepFM, DCN, and DIN are all variations on this theme.
  5. End-to-end feature learning: Deep Crossing demonstrated that neural networks could largely replace manual feature crossing, learning feature interactions automatically from data — a principle that has only grown more important as models have become larger and datasets more complex.

While Deep Crossing itself may appear simple by today’s standards, its historical significance cannot be overstated. It proved that deep learning belonged in recommender systems — and the field has never looked back.


Comments