- One neuron in layer 3 is outlined teal. Tracing its dependency down one layer reveals the 3 layer-2 cells it reads —
RF 3. - Those 3 cells each depend on a 3-cell window one layer further down, so the cone widens to 5 layer-1 cells —
RF 5— and again to 7 input cells —RF 7. - Pulses converge from all 7 highlighted input cells up to the layer-3 neuron: every one of those pixels, and only those, can change its value.
- Takeaway: the neuron is a function of exactly that 7-pixel patch — nothing outside the cone reaches it, no matter how the network is trained.
The essence: every neuron is a function of a patch
Pick any single value in any feature map, at any depth in a network. Trace backward through every convolution that produced it: which input pixels could possibly change that value if you edited them? That set of pixels is the neuron's receptive field (RF) — the region of the original image it is a function of. Everything outside that region is invisible to it, structurally, before a single weight is trained.
In the first convolutional layer this is trivial: a 3×3 kernel produces an output value from a 3×3 patch, so . The interesting part is what happens one layer later. A second-layer neuron reads a 3×3 patch of layer-1 outputs — but each of those layer-1 outputs already summarised its own 3×3 patch of the input. The layer-2 neuron's dependency doesn't stay at 3×3; it widens to cover every input pixel that fed any of the nine layer-1 cells it reads, which is a 5×5 patch. Stack a third layer and it widens again, to 7×7. This is the cone in the clip above: depth doesn't just add layers, it compounds the patch each neuron answers for.
Two receptive fields are worth keeping distinct. The theoretical RF is the geometric region this page computes — every pixel that could influence the output through some path of nonzero weights. The effective RF (§5) is the smaller region that influence is actually concentrated in once you account for how much each path contributes. The theoretical RF is a hard ceiling; the effective RF is where the signal-to-noise ratio is high enough to matter. Both grow with depth, but not at the same rate, and the gap between them is itself something architects budget for.
The theoretical RF gives a hard design law, and it is worth stating plainly because no amount of training escapes it: if the object you need to recognise is larger than the network's final receptive field, the network is structurally blind to it. A neuron that has never seen a pixel cannot use it — not with more epochs, not with more data, not with a better loss function. Receptive field is decided at architecture time, by the sequence of kernel sizes, strides, and dilations a designer writes down before training starts. Get the RF budget wrong and no amount of optimisation fixes it; get it right and the rest of the network's job is to learn what to do with what it can already see.
The arithmetic: a recurrence in two numbers
Computing the RF layer by layer needs exactly two running numbers. is the receptive field at layer — the side length of the input patch one output neuron depends on, exactly the quantity the cone traces. is the jump: the spacing, in input pixels, between the windows of two adjacent output neurons at layer . At the input, (one pixel depends on itself) and (adjacent input pixels are one apart, trivially). Every layer updates both numbers from the layer below:
The receptive-field recurrence (Araujo et al., Distill 2019). and are layer 's kernel size and stride.
Read the first equation as: the new patch equals the old patch, plus extra steps, each step worth input pixels — because a window reaches positions beyond its centre, and on the input grid each of those positions is pixels apart, not 1. The second equation says the jump itself only changes when a layer subsamples: a stride- convolution makes adjacent output neurons times further apart on the input than adjacent neurons were at the previous layer. A stride-1 layer leaves untouched — it widens the patch ( grows) without changing how finely the output samples the input.
Here is a 4-layer stack worked row by row, all stride 1 except layer 2 (stride 2), all kernels. Watch stay at 1 through layer 1, double at layer 2, and then make every subsequent step in count for twice as many input pixels:
| Layer | k | s | r (in) | r (out) | j (in) | j (out) |
|---|---|---|---|---|---|---|
| input | — | — | — | 1 | — | 1 |
| conv 1 | 3 | 1 | 1 | 1 | ||
| conv 2 | 3 | 2 | 3 | 1 | ||
| conv 3 | 3 | 1 | 5 | 2 | ||
| conv 4 | 3 | 2 | 9 | 2 |
Dilation folds in as a change to , not a new formula. A dilated kernel with rate spaces its taps pixels apart instead of 1, so it spans the same area as a larger ordinary kernel of size — but with the same weights. Substitute for in the recurrence above and dilation drops straight in: a kernel at behaves, for RF purposes, like a kernel; at , like ; at , like . The weight count never changes — only the reach does.
The calculator below runs exactly this recurrence. Add layers, edit / / , or toggle a row to pool (pooling follows the same recurrence with its own window size and stride), and watch and update live. The preset buttons load the real layer stacks of four models in this site's gallery — including the 65-pixel stack from §6.
RF calculator
| Layer | Type | k | s | d | k_eff | r (out) | j (out) | |
|---|---|---|---|---|---|---|---|---|
| 1 | 3 | 3 | 1 | |||||
| 2 | 3 | 5 | 1 | |||||
| 3 | 5 | 9 | 1 | |||||
| 4 | 9 | 17 | 1 | |||||
| 5 | 17 | 33 | 1 | |||||
| 6 | 33 | 65 | 1 |
Try this: load the CIFAR-10 dilated preset and watch stay at 1 through all six layers — every layer is stride 1, so the RF growth comes entirely from widening with .
Three accelerators: stride, pooling, dilation
Stacking plain , stride-1 convolutions grows the RF by exactly 2 per layer — — because each layer adds . To cover a image this way would take well over a hundred layers. Three mechanisms accelerate the climb, and the recurrence says exactly how much each one buys — and what it costs.
Stride multiplies the jump for every layer that follows. A single stride-2 layer doubles permanently downstream, so every later layer's RF contribution is worth twice as many input pixels — conv 4 in the table above gained 4 pixels of RF from the same kernel that gave conv 1 only 2. Pooling (max- or average-pool with stride ) does the same arithmetic — it has its own and and obeys the identical recurrence — while adding zero parameters. Both buy RF by literally throwing away resolution: a stride-2 or pool-2 layer halves the spatial size of every feature map after it, permanently. Dilation is the odd one out — it widens without touching or the output resolution at all, buying RF “for free” in both parameters and resolution.
Free is not quite free, though. A dilated kernel only samples of the positions it spans — at a kernel reads 9 of the 81 cells in its footprint, and the other 72 are gaps. Stack dilated layers at the same rate and those gaps line up: a checkerboard of input pixels never gets read by anything, a failure mode called gridding. The CIFAR-10 case study in §6 avoids it by using a different dilation rate at every layer (2, 4, 8, 16), so each layer's gaps fall on positions a previous layer already covered.
- Three 3-layer stacks sit side by side over identical 17-cell inputs: plain stride 1, stride 2 every layer, and dilated at rates .
- All three cones grow one layer at a time. The plain stack's cone widens steadily; the stride-2 stack's rows visibly shrink — 17 → 9 → 5 → 3 cells — as resolution is spent to buy reach; the dilated stack's cone develops visible gaps between touched cells even as it spans the widest area.
- The final RF counters land at 7, 15, and 17 — same depth, three layers each, nearly a 2.5× spread in reach.
- Takeaway: stride and dilation both outrun the plain stack, but stride paid in resolution (the rows got narrower) and dilation paid in coverage density (the cone has holes) — neither is free, they're just different currencies.
The effective receptive field
Everything above computes the theoretical RF: the full set of input pixels connected to an output by some path of nonzero weights. Luo et al. (2016) asked a sharper question — if you measure how much the output actually changes per unit change in each input pixel (the gradient magnitude, averaged over many inputs), how is that influence distributed across the theoretical RF?
The answer is not “uniformly.” Influence is approximately Gaussian: pixels near the centre of the theoretical RF dominate, and influence falls off — often steeply — toward the edges. Two consequences follow directly. First, the effective receptive field (ERF) — the region carrying most of the influence — is reliably smaller than the theoretical RF, sometimes drastically so in very deep networks where the theoretical RF has grown to cover the entire input but the ERF covers only a fraction of it. Second, the ERF grows roughly with rather than linearly — so simply stacking more layers gives diminishing returns on effective reach, even though the theoretical RF keeps growing additively or multiplicatively per §3-4.
This is precisely why very deep networks still reach for stride, pooling, and dilation rather than relying on depth alone: each of those mechanisms widens the theoretical RF and helps counteract the falloff by changing how quickly the Gaussian itself spreads, instead of just adding more thin layers whose marginal contribution to the effective footprint keeps shrinking.
Case study: receptive field 65, zero pooling
The CIFAR-10 dilated model in this site's gallery is the cleanest demonstration of this page's arithmetic, because every one of its layers is stride 1 — stays at 1 throughout, so the entire RF story is the column. The assignment constraint was RF on a input with no max-pooling and no stride-2 convolution anywhere — every pixel of resolution had to be preserved end to end. The model hits RF 65 with six layers, comfortably covering the full input with margin to spare:
| Layer | k | d | k_eff | r (in) | r (out) |
|---|---|---|---|---|---|
| ConvBlock 1 | 3 | 1 | 3 | 1 | 3 |
| Depthwise block | 3 | 1 | 3 | 3 | 5 |
| Dilated ConvBlock | 3 | 2 | 5 | 5 | 9 |
| Dilated ConvBlock | 3 | 4 | 9 | 9 | 17 |
| Dilated ConvBlock | 3 | 8 | 17 | 17 | 33 |
| Dilated ConvBlock | 3 | 16 | 33 | 33 | 65 |
c1c4-rf44-gap). Each row applies with throughout — never changes because nothing here strides or pools.Two design choices make this stack work. First, why dilation suits a input: on a small image, stride or pooling would shrink the feature map to almost nothing after a few layers — three stride-2 steps already takes , leaving little spatial structure for later layers to refine. Dilation grows the reach of each layer without shrinking it at all, so all six layers operate on full-resolution feature maps. The escalating rates are deliberate, not arbitrary: each rate is double the last, so each layer's sampling gaps fall where an earlier layer's taps already landed — the gridding failure mode from §4, designed around by construction.
Second, the depthwise-separable assist. Layer 2 is a depthwise-separable block: a filter applied per-channel (the spatial RF contribution, to , identical to a plain ) followed by a pointwise convolution that mixes channels and contributes nothing to the RF (). Splitting the spatial and channel-mixing work this way is what keeps the whole six-layer stack under the parameter budget — the convolution page's factorisation sidebar covers the parameter saving in full. Here, the only point that matters is that it doesn't cost anything in the RF column: depthwise-separable convolutions grow the RF exactly like the spatial filter they contain, for free on the channel-mixing side.
The growth chart below plots this table. Toggle between the actual stack (dilated, throughout) and a plain-equivalent stack (six ordinary , stride-1 layers, which would only reach RF 13) to see the gap dilation buys — without spending a single stride step.
RF growth: actual vs plain-equivalent
Hover any point for that layer's , , and the resulting . The actual stack reaches 65 in six layers; six plain layers at the same depth would reach only 13 — dilation alone accounts for the remaining 52 pixels of reach.
Sources & further reading
- linkStanford CS231n — Spatial arrangement (receptive field)
- linkAraujo, Norris & Sim — Computing Receptive Fields of Convolutional Neural Networks (Distill, 2019)
- linkLuo et al. — Understanding the Effective Receptive Field in Deep Convolutional Neural Networks (2016)
- linkYu & Koltun — Multi-Scale Context Aggregation by Dilated Convolutions (2015)