VerifiedarXiv:1803.0363534 min
Training · Sparsity

The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks

A random dense network contains a subnetwork one tenth its size that trains as well on its own, provided it keeps its original initial weights.

Frankle and Carbin train a network, delete the 20% of weights with the smallest magnitudes in each layer, set the rest back to their values at iteration 0, and repeat. Down to 3.6% of the weights on MNIST, the subnetworks this finds reach their best validation loss no later than the full network and score at least as high on the test set; at 21% they get there 38% sooner.

Explaining the paperThe Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural NetworksFrankle, Carbin · MIT CSAIL · ICLR 2019 · arXiv:1803.03635 ↗

Give the same subnetworks freshly drawn starting values and they learn slower and score lower. The result depends on which random number each surviving connection started from.

Why pruned networks were trained dense first

Pruning removes weights from a trained network. The standard recipe in 2018 came from Han et al. (2015) and has three steps: train the dense network, delete every connection whose weight has magnitude below a threshold (a quality parameter times the standard deviation of that layer's weights), then keep training the survivors from their trained values. On Lenet-300-100, a fully connected MNIST classifier with hidden layers of 300 and 100 units, the recipe takes the weight count from 267K to 22K, 12× fewer, with no loss of accuracy. On AlexNet it removes 9× (61M to 6.7M, about 89% of the weights, 8 of every 9), and on VGG-16 13× (138M to 10.3M, 12 of every 13).

If a 22K-weight network classifies MNIST as well as the 267K-weight one, it needs about a twelfth of the multiply-adds per training step, and training it directly would be cheaper. The pruning literature reported that this does not work. Han et al. write that it is better to retain the weights from the initial training phase than to re-initialize the pruned layers, and Li et al. (2016) that training a pruned model from scratch performs worse than retraining a pruned model.

Frankle and Carbin change one step of the recipe. They train the dense network and prune its smallest-magnitude weights as before. Then, instead of keeping the survivors' trained values, they set every surviving weight back to the value it had at iteration 0, before training started, and train that sparse network with the pruned weights held at zero. On the paper's networks this pruned-and-reset network trains at least as fast as the dense one and reaches at least its test accuracy down to 10% to 20% of the original weight count (on Lenet down to 3.6%), although the two deepest networks, VGG-19 and Resnet-18, need a lower learning rate or learning-rate warmup for it to work. Give the same sparse network new values drawn from the same random distribution and it learns slower and scores lower.

The sections below state the claim formally, walk through the procedure that finds these subnetworks with the Lenet numbers, read the results and the control experiments (including a small run of the same experiment you can step through), and then cover where the procedure breaks on deeper networks and what the paper claims versus conjectures.

The hypothesis, stated precisely

Take a dense feed-forward network f(x;θ)f(x;\theta) with parameters θ\theta. Its initial values are a random draw θ0∼Dθ\theta_0 \sim \mathcal{D}_\theta. In every experiment in the paper Dθ\mathcal{D}_\theta is the Gaussian Glorot initialization: zero mean and variance 2/(nin+nout)2/(n_{\text{in}} + n_{\text{out}}) for each layer, the scale at which activations and gradients keep roughly the same variance from layer to layer. Train the network with stochastic gradient descent. Its validation loss falls, bottoms out and rises again as the network starts to overfit. Call the iteration of that minimum jj (an iteration is one minibatch gradient step) and the test accuracy at that iteration aa.

A subnetwork is the same function with a fixed binary mask over the parameters:

f(x; m⊙θ),m∈{0,1}∣θ∣,Pm=∥m∥0∣θ∣f(x;\, m \odot \theta), \qquad m \in \{0,1\}^{|\theta|}, \qquad P_m = \frac{\lVert m \rVert_0}{|\theta|}f(x; m⊙θ),m∈{0,1}∣θ∣,Pm=∥m∥0∣θ∣\begin{gathered} f(x;\, m \odot \theta), \qquad m \in \{0,1\}^{|\theta|}, \\ P_m = \frac{\lVert m \rVert_0}{|\theta|} \end{gathered}
(1)

⊙\odot is elementwise multiplication, so a 0 in mm zeroes that weight permanently, and ∥m∥0\lVert m \rVert_0 counts the ones. PmP_m is therefore the fraction of weights that remain. The paper calls PmP_m the "sparsity" of the mask, the reverse of the usual meaning, and gives the example Pm=25%P_m = 25\% when 75% of the weights are pruned. Every PmP_m on this page means fraction kept.

Now train the subnetwork from the masked initialization m⊙θ0m \odot \theta_0, with mm held fixed, and record its own minimum-validation-loss iteration j′j' and its test accuracy a′a' there. The hypothesis says a mask exists that satisfies three conditions together:

∃ m:j′≤j  (no slower),a′≥a  (as accurate),∥m∥0≪∣θ∣  (far fewer weights)\exists\, m:\quad j' \le j \;\text{(no slower)},\qquad a' \ge a \;\text{(as accurate)},\qquad \lVert m \rVert_0 \ll |\theta| \;\text{(far fewer weights)}∃ m:j′≤j  (no slower),a′≥a  (as accurate),∥m∥0≪∣θ∣  (far fewer weights)\begin{gathered} \exists\, m:\quad j' \le j \;\text{(no slower)}, \\ a' \ge a \;\text{(as accurate)}, \\ \lVert m \rVert_0 \ll |\theta| \;\text{(far fewer weights)} \end{gathered}
(2)

All three hold for one mask at once, and the subnetwork starts from the same θ0\theta_0 the dense network started from. The paper calls such a subnetwork a winning ticket. The name comes from an analogy: a large random initialization is like buying many lottery tickets, and some small combination of connections and starting values in it happens to be one that trains well. The analogy stops at the draw. The values were fixed at iteration 0, before any data was seen, and nothing is redrawn later.

A worked case on Lenet. Its three weight matrices are 784×300784 \times 300, 300×100300 \times 100 and 100×10100 \times 10, so ∣θ∣=266,200|\theta| = 266{,}200. A mask with Pm=21.1%P_m = 21.1\% keeps 56,095 weights and zeroes 210,105. The hypothesis predicts that for some such mask the 56,095 surviving weights, started from their own Glorot draws in θ0\theta_0, reach minimum validation loss no later than the full network does and score no worse on the 10,000 MNIST test images. Section 2 of the paper finds a mask of that size that reaches minimum validation loss 38% earlier than the dense network, which is 1.61× faster.

How to find a winning ticket: train, prune, reset

Equation (2) says a good mask exists and gives no way to find one. The paper uses the trained dense network as the search: the connections whose weights end training with small magnitudes are the ones to drop. One round has four steps:

  1. Randomly initialize f(x;θ0)f(x;\theta_0) with θ0∼Dθ\theta_0 \sim \mathcal{D}_\theta, and save θ0\theta_0.
  2. Train for jj iterations, reaching θj\theta_j.
  3. Prune p%p\% of the weights of θj\theta_j by magnitude, producing the mask mm.
  4. Reset the surviving weights to their values in θ0\theta_0. The ticket is f(x; m⊙θ0)f(x;\, m \odot \theta_0).

Steps 3 and 4 on one row of ten weights, with p=20%p = 20\% and these initial and trained values:

θ0=[ 0.31, −0.12, 0.05, −0.44, 0.20, 0.09, −0.27, 0.15, −0.06, 0.38 ]θj=[ 0.52, −0.03, 0.27, −0.61, 0.02, 0.11, −0.35, 0.24, −0.19, 0.47 ]\begin{aligned} \theta_0 &= [\,0.31,\ {-0.12},\ 0.05,\ {-0.44},\ 0.20,\ 0.09,\ {-0.27},\ 0.15,\ {-0.06},\ 0.38\,] \\ \theta_j &= [\,0.52,\ {-0.03},\ 0.27,\ {-0.61},\ 0.02,\ 0.11,\ {-0.35},\ 0.24,\ {-0.19},\ 0.47\,] \end{aligned}θ0=[ 0.31, −0.12, 0.05, −0.44, 0.20,0.09, −0.27, 0.15, −0.06, 0.38 ]θj=[ 0.52, −0.03, 0.27, −0.61, 0.02,0.11, −0.35, 0.24, −0.19, 0.47 ]\begin{aligned} \theta_0 = [\,&0.31,\ {-0.12},\ 0.05,\ {-0.44},\ 0.20, \\ &0.09,\ {-0.27},\ 0.15,\ {-0.06},\ 0.38\,] \\ \theta_j = [\,&0.52,\ {-0.03},\ 0.27,\ {-0.61},\ 0.02, \\ &0.11,\ {-0.35},\ 0.24,\ {-0.19},\ 0.47\,] \end{aligned}

The two smallest trained magnitudes are 0.02 (position 5) and 0.03 (position 2), so the mask is m=[1,0,1,1,0,1,1,1,1,1]m = [1,0,1,1,0,1,1,1,1,1], and the ticket starts from

m⊙θ0=[ 0.31, 0, 0.05, −0.44, 0, 0.09, −0.27, 0.15, −0.06, 0.38 ]m \odot \theta_0 = [\,0.31,\ 0,\ 0.05,\ {-0.44},\ 0,\ 0.09,\ {-0.27},\ 0.15,\ {-0.06},\ 0.38\,]m⊙θ0=[ 0.31, 0, 0.05, −0.44, 0,0.09, −0.27, 0.15, −0.06, 0.38 ]\begin{aligned} m \odot \theta_0 = [\,&0.31,\ 0,\ 0.05,\ {-0.44},\ 0, \\ &0.09,\ {-0.27},\ 0.15,\ {-0.06},\ 0.38\,] \end{aligned}

Position 5 started at 0.20, one of the larger initial values, and is pruned because training shrank it to 0.02. Position 3 started at 0.05, the smallest, and survives because training grew it to 0.27. Han et al.'s fine-tuning would continue from θj\theta_j instead, and the paper's control experiment would replace the eight surviving values with eight new draws from the same Gaussian.

The official code prunes per layer. It sorts abs(final_weight[mask == 1]), takes the value at index round(percent * size) as the cutoff, and zeroes every mask entry whose weight has magnitude at or below the cutoff. Because the comparison is <=, it removes one weight more than round(percent * size): in the ten-weight row above it would also drop position 6 (0.11), and on Lenet's first layer in round 1 it removes 47,041 weights instead of 47,040. Because the sort runs over the currently unmasked weights only, the percentage is always a percentage of the survivors, which matters once the procedure repeats. Connections into the 10 output units are pruned at half the rate, 10% per round instead of 20%, because the output layer holds only 1,000 of the 266,200 weights. At 20% it would be down to 35 connections for 10 output units after 15 rounds; at 10% it keeps 206.

"Reset" means the exact floating-point values of iteration 0, not a new draw from the same distribution. In the code the training function reads the weights back immediately after the variable initializer runs, before the first gradient step, and every later round passes that same dictionary in as the preset initializer. A masked layer multiplies its weight matrix by a non-trainable mask in the forward pass:

# masked dense layer (foundations/model_base.py, lines 93-116)
W = get_variable([fan_in, units], init=constant(preset))   # preset = theta_0
m = get_variable(W.shape, init=constant(mask), trainable=False)
y = matmul(x, W * m) + b
# dL/dW = (x^T dL/dy) * m : a pruned entry gets gradient 0 and never moves

The gradient with respect to W is the dense gradient multiplied elementwise by the mask, so a pruned entry receives zero gradient and contributes nothing to the output. With Adam a zero gradient leaves both moment estimates at zero and the update at zero, so the same holds. Biases are not masked and start at zero in every round, which is also their initialization. Nothing else about training changes: same optimizer, learning rate, batch size and number of iterations as the dense run.

Figure 1 runs one round on a synthetic 8×12 layer with Glorot standard deviation 2/20=0.316\sqrt{2/20} = 0.316. The middle panel crosses out the weights the cutoff removes. The third panel shows what the pruned layer starts from under the three protocols above: reset to θ0\theta_0, a fresh draw θ0′\theta_0' under the same mask, or the trained θj\theta_j. Click cells in the first two panels to find large initial values that were pruned and small ones that survived.

Figure 1 · one round of train, prune, reset
60%
A synthetic 8×12 layer: positive weights teal, negative amber, opacity by magnitude. Drag p to prune the smallest |θj| (crossed out in the middle panel). The buttons pick what the survivors start from: θ0 (the winning ticket), a fresh draw θ0′ (the control), or the trained θj (fine-tuning). Click a cell for its initial value, trained value and rank. At p = 95% a handful of large trained weights survive, and their initial values are mostly small.

With reset selected and then redraw, the third panel changes values but not its statistics: both are samples from the same Gaussian on the same set of connections. Any difference in how the two train has to come from which value sits on which connection, and the control experiments later on this page measure that difference at every size.

Iterative pruning, 20% per round

Pruning 80% of the weights in one shot finds tickets, but pruning 20% and repeating finds smaller ones. Iterative pruning runs the four steps as a loop: train, prune 20% of the survivors in each layer, reset to θ0\theta_0, train again with the smaller mask, prune again. The mask only ever loses ones. Every round starts from the same saved θ0\theta_0, so the ticket after round rr is the pair (mask after rr prunings, θ0\theta_0), and each round's trained weights are used only to choose the next mask.

# iterative magnitude pruning with resetting (Appendix B, Strategy 1)
theta0 = glorot_normal(shapes)            # sampled once, kept for every round
mask   = {k: ones_like(v) for k, v in theta0.items()}
thetaj = train(theta0, mask, iters=50_000)          # round 0: the dense net
for r in range(1, n_rounds + 1):
    for k in mask:                        # per layer, survivors only
        alive  = sort(abs(thetaj[k])[mask[k] == 1])
        cutoff = alive[round(rate[k] * alive.size)]  # rate: 0.2 (0.1 output)
        mask[k] = where(abs(thetaj[k]) <= cutoff, 0, mask[k])
    thetaj = train(theta0, mask, iters=50_000)      # reset, then retrain
# the ticket after round r is (mask, theta0); thetaj only picks the next mask

Each round removes a fraction of the survivors, so the fraction remaining compounds. A hidden layer keeps 0.8n0.8^n of its weights after nn rounds and the output layer keeps 0.9n0.9^n. On Lenet, whose two hidden layers hold 265,200 of the weights and whose output layer holds 1,000:

Pm(n)=265,200⋅0.8 n+1,000⋅0.9 n266,200P_m(n) = \frac{265{,}200 \cdot 0.8^{\,n} + 1{,}000 \cdot 0.9^{\,n}}{266{,}200}
(3)

This gives 51.3% at n=3n = 3, 21.1% at n=7n = 7, 13.5% at n=9n = 9 and 3.6% at n=15n = 15, the four sizes labeled in the paper's Figure 3. Reaching 3.6% takes 16 full trainings of 50,000 iterations (one dense, fifteen pruned), and the paper runs five trials of each, 80 trainings in all. That cost is the reason Section 6 gives for leaving ImageNet out. Drag the round count in Figure 2 and read the count per layer.

Figure 2 · the iterative pruning schedule on Lenet
7
Top: fraction of weights remaining after n rounds, log scale, with the four rounds the paper labels in amber. Bottom: weights left in each layer; the output layer (amber bar) is pruned at 10% per round instead of 20%. At n = 25 the two hidden layers are down to 0.4% while the output layer still keeps 7% of its 1,000 weights.

Section 2 compares this with one-shot pruning. One-shot tickets reach minimum validation loss earlier than the dense network only while 67.5%≥Pm≥17.6%67.5\% \ge P_m \ge 17.6\% and beat its test accuracy only while 95.0%≥Pm≥5.17%95.0\% \ge P_m \ge 5.17\%. Iterative tickets keep both advantages down to 3.6%. Appendix G.4 varies the per-round rate: 10% and 20% keep accuracy and speed to the smallest sizes, 40% and above lose them earlier, and the paper uses 20% because it keeps most of what 10% gives with fewer trainings.

Appendix B tests a second way to loop. In Strategy 2 each round continues training from the previous round's trained weights, and only the final pruned network is reset to θ0\theta_0. Resetting every round (Strategy 1, the loop above) holds accuracy and learning speed to smaller networks on Lenet and on all three convolutional networks. A plausible reason, which the paper does not test: under Strategy 1 each new mask is chosen by training the previous ticket itself (the previous mask applied to θ0\theta_0), so the magnitudes that pick the next mask come from the same starting values the next ticket will use.

Measuring learning speed

Condition j′≤jj' \le j in (2) needs a definition of how fast a network learns. The paper uses the iteration at which an early-stopping rule would halt, the iteration of minimum validation loss. On MNIST the 60,000 training images are split into 55,000 for training and 5,000 for validation, and the 10,000 test images are kept separate. Validation and test performance are evaluated every 100 iterations.

Training never actually stops early. Every run goes the full 50,000 iterations (20,000 to 30,000 for the convolutional networks), and the early-stopping iteration is read off the saved validation curve afterwards. A network whose validation loss bottoms out at iteration 6,000 instead of 10,000 counts as learning 1.67× faster, or 40% earlier. Accuracy is always reported at the early-stopping iteration, so a fast network is not credited with the accuracy of a longer run.

Appendix C checks this proxy against the obvious alternative: the order in which the pruned networks reach their early-stopping iteration is the same order in which they first cross a fixed test-accuracy threshold. For VGG-19 and Resnet-18 the criterion is dropped, because their learning rates step down at fixed iterations and the validation minimum lands wherever the schedule puts it. Section 4 reports their accuracy at fixed points in training instead.

What the tickets do

On Lenet, trained with Adam at learning rate 0.0012 and batch size 60, tickets learn faster as they shrink from 100% to 21% of the weights, where early stopping comes 38% earlier than for the dense network. Below 21% learning slows again, and at 3.6% the early-stopping iteration is back at the dense network's. Test accuracy at early stopping rises with pruning to a peak more than 0.3 percentage points above the dense network at 13.5%, then falls back to the dense level, again at 3.6%. Every curve is the average of five trials, with error bars at the minimum and maximum trial.

The convolutional networks show the same pattern with larger gains. Conv-2, Conv-4 and Conv-6 are scaled-down VGG-style stacks of two, four or six 3×3 convolutional layers (64, 128 and 256 channels, max-pooling after every pair) followed by fully connected layers of 256, 256 and 10 units, trained on CIFAR10 with Adam for 20K, 25K and 30K iterations at batch size 60. Their tickets reach minimum validation loss at best 3.5× sooner than dense at Pm=8.8%P_m = 8.8\% (Conv-2), 3.5× at 9.2% (Conv-4) and 2.5× at 15.1% (Conv-6). Their best test accuracies are 3.4, 3.5 and 3.3 points above dense, at 4.6%, 11.1% and 26.4%. All three stay above the dense accuracy while more than 2% of the weights remain. Figure 3 puts every network on one axis; hover a mark for its number.

Figure 3 · every headline number, on one axis
hover a mark
One row per network, weights remaining on a log axis. The teal bar spans the sizes at which the pruned-and-reset network matches or beats the dense network's test accuracy. The amber dot is the best learning-speed gain or, with the other button, the best accuracy gain. The violet tick on the Lenet row is where the randomly reinitialized control first falls below dense accuracy. VGG-19 and Resnet-18 have no speed measurement because their learning-rate schedules fix when the validation minimum happens.

At early stopping, training accuracy rises along with test accuracy, which by itself would say only that tickets optimize faster. The paper also reports the end of training. At iteration 50,000 nearly every Lenet network, dense or heavily pruned, has 100% training accuracy, and the iteratively pruned tickets are still up to 0.35 points more accurate on the test set. Equal training accuracy and higher test accuracy means a smaller gap between the two: the tickets generalize better, and the convolutional networks show the same at their final iterations.

Test accuracy plotted against size goes up from the dense network, peaks somewhere between about 5% and 30%, and comes down as the network runs out of capacity. Section 5 borrows Rasmussen and Ghahramani's name for this shape, Occam's hill, with the dense network on the too-complex side and the smallest networks on the too-simple side. The paper leaves open why a subnetwork with a tenth of the weights generalizes better than the network it came from, and offers two candidates: the mask, which was chosen using the training data, may encode an inductive bias suited to the task, and the initialization may land in a region of the loss landscape the optimizer handles well.

Dropout also trains a random subnetwork at every step, by disabling each unit with probability 0.5. On Conv-2/4/6 it raises the dense accuracy by 2.1, 3.0 and 2.4 points, and iterative pruning on top of dropout adds up to 2.3, 4.6 and 4.7 more, so in these experiments the two gains stack. The speed gain shrinks under dropout: Appendix H.5, which measures speed on the validation set at its own learning rate, reports 1.58× for Conv-4 with dropout against 4.27× without. The 4.27× is a different measurement from the main text's 3.5×.

Separating the mask from the initial values

A pruned-and-reset network differs from the dense one in which weights it has and in what those weights start from. The paper separates the two with one control: keep the mask, redraw the surviving values from Dθ\mathcal{D}_\theta, train, and compare. Each ticket is redrawn three times, so every point on a control curve averages 15 runs.

On Lenet the redrawn networks learn slower with each round of pruning instead of faster. Their test accuracy falls below the dense network's once PmP_m reaches 21.1%, the size where the reset ticket is at its fastest, while the reset ticket holds dense accuracy down to 2.9%. At Pm=21%P_m = 21\% the ticket reaches minimum validation loss 2.51× sooner than its redrawn twin and is half a point more accurate. All networks have 100% training accuracy for every Pm≥5%P_m \ge 5\%, so the accuracy gap is in generalization.

Figure 4 is the same experiment on a network small enough to plot. We trained a 2–50–50–3 ReLU network (2,750 weights) to classify points from three interleaved spiral arms, with 300 training points of which 20% carry a wrong label. A network this size can memorize wrong labels (the effect studied in Zhang et al., 2017), so the dense network overfits and early stopping has a minimum to find. The protocol is the paper's: Glorot Gaussian initialization, Adam, 4,000 iterations at batch size 50, validation every 100 iterations, 20% pruned per round (10% in the output layer), reset to θ0\theta_0, and a control that redraws the values once per round under the same mask. Five seeds. The two maps show what each network learned at the chosen round; the plot below them is test accuracy at the minimum-validation-loss iteration for every round.

Figure 4 · reset versus redraw, on a network you can watch
10 (P_m 11.5%)
Our run, not the paper's data. Drag the round to prune further. Each map is the class the network predicts at each point of the plane (seed 0), with the 300 training points on top; faded colour marks predictions below 80% confidence. Bottom: test accuracy at early stopping, mean of five seeds with min–max bars, for the reset ticket and the redrawn control; the dashed line is the dense network.

The dense network scores 94.5% (mean of five seeds). Through the first four rounds the two arms stay within a point of each other and both improve on dense, peaking near 96% between 65% and 34% of the weights. A sparser network has less capacity to fit the wrong labels whatever its starting values, and the redrawn Conv-2 and Conv-4 in the paper also improve at moderate pruning. Below 34% the arms separate: the redrawn control falls below dense at 27.2% of the weights, the reset ticket only at 17.7%. At 17.7% the ticket scores 93.6% against 86.6%, at 11.5% it scores 81.7% against 72.7%, and at 9.2% it scores 69.2% against 55.8%.

The run does not reproduce the speed result. Only the first-round ticket, at 80.4% of the weights, reaches its validation minimum sooner than the dense network (iteration 2,460 against 2,740); every smaller ticket reaches it later. Two redrawn controls also beat dense, at 80.4% (iteration 2,600) and 64.7% (iteration 2,620). Below about 20% most runs are still improving at iteration 4,000. By condition (2) this toy has no small winning tickets, only the gap between reset and redraw.

Below about 15% both arms also lose most of the first layer, which has only 100 weights (2 inputs × 50 units). Pruning 20% per layer per round, plus the one extra weight the code's cutoff rule removes each round, leaves it 9 weights after round 9 and a single weight after round 13. At round 13 each network reads only one input coordinate, and both maps split the plane into vertical bands. Global pruning, used on VGG-19 further down the page, avoids this kind of bottleneck.

On the paper's convolutional networks the picture is mixed in the same way. The redrawn controls of Conv-2, Conv-4 and Conv-6 also slow down with pruning and lose accuracy sooner than the tickets, but at moderate pruning the redrawn Conv-2 and Conv-4 hold or even improve their early-stopping accuracy, so a sparse network with fresh values beats the dense one for a while. Appendix E adds a third arm, a random mask of the same size with random values. On Lenet the pruned mask with redrawn values beats the random mask; on all the convolutional networks the two are indistinguishable. The paper's hypothesis for the Lenet case is that only some parts of an MNIST image carry information, so a mask found by training can encode where they are, while a convolutional filter is applied at every location.

Appendix F narrows down, on Lenet, what about the values matters:

VGG-19 and Resnet-18: global pruning and warmup

Section 4 moves to two CIFAR10 networks with the ingredients of a practical model: VGG-19 with 20.0 million parameters and the 20-layer Resnet-18 with 271,000, both trained with batch normalization, weight decay 0.0001, random flips and crops, SGD with momentum 0.9, and a learning rate that drops by 10× twice. VGG-19 trains for 160 epochs, 112,480 iterations at batch size 64, with drops after epochs 80 and 120 (iterations 56,240 and 84,360). Resnet-18 trains for 30,000 iterations at batch size 128 with drops at 20,000 and 25,000, a schedule shortened from He et al.'s 64,000 because each experiment trains the network 15 to 30 times in a row.

Pruning on these networks is global. Instead of removing the smallest 20% within each layer, the procedure pools every convolutional weight, finds one magnitude cutoff, and removes the smallest 20% of the pool. Three groups are never pruned: VGG-19's 5,120 output-layer weights, Resnet-18's 640 output-layer weights, and the 2,560 weights in Resnet-18's downsampling shortcuts. Layer sizes span three orders of magnitude: the first convolutional layer of VGG-19 has 1,728 weights and the last 2,359,296, so at Pm=1.5%P_m = 1.5\% a layer-wise rule leaves the first layer 26 weights to carry all of the image into the network. Under one global cutoff a layer keeps as many weights as clear the shared threshold. Appendix I.1 measures the difference on VGG-19 at learning rate 0.1 with warmup: global pruning finds winning tickets while Pm≥1.5%P_m \ge 1.5\%, layer-wise only while Pm≥6.9%P_m \ge 6.9\%. In Figure 5, drag the round count to 19, where PmP_m is 1.4%, and compare the first layer under the two rules.

Figure 5 · layer-wise versus global pruning on VGG-19
19 (P_m 1.4%)
Sixteen convolutional layers of the CIFAR10 VGG-19, each bar the fraction of the layer kept (log scale) with the count alongside. Layer-wise keeps the same fraction everywhere. Global shares one magnitude cutoff; the paper reports only the outcome of global pruning, so the split drawn here is a model in which each layer's weights stay Gaussian at their Glorot scale, which makes the narrow early layers' weights larger and more likely to survive one shared cutoff. The layer-wise counts are exact.

The second change responds to a failure at the standard learning rate. At 0.1, iterative pruning finds no winning tickets in either network: the pruned-and-reset subnetworks do no better than their redrawn controls. At learning rate 0.01 the pattern from the small networks returns, partly. VGG-19 subnetworks stay within one point of the dense network while Pm≥3.5%P_m \ge 3.5\% but never match it, so they are not winning tickets. Resnet-18 tickets reach 89.5% for 41.7%≥Pm≥21.9%41.7\% \ge P_m \ge 21.9\%, short of the 90.5% the dense network reaches at 0.1. Appendix I.4 tries the rates in between and finds tickets at none above 0.01.

Linear learning-rate warmup recovers the tickets. The rate climbs from 0 to its base value over the first kk iterations and then follows the usual schedule. With k=10,000k = 10{,}000 at rate 0.1, the dense VGG-19 gains about one point and iterative pruning finds winning tickets down to Pm=1.5%P_m = 1.5\%. With k=20,000k = 20{,}000 at rate 0.03, Resnet-18 tickets reach 90.5% at Pm=27.1%P_m = 27.1\%, matching the dense network at 0.1, and remain winning tickets down to 11.8%. No warmup length the paper tried produces Resnet-18 tickets at rate 0.1 itself; warmup raised the usable rate from 0.01 to 0.03 and no further. Appendix I.5 sweeps kk: accuracy improves quickly up to about 5,000 iterations and with diminishing returns after. In Figure 6, pick a network, a base rate and a warmup length; the readout quotes the paper's result for that combination.

Figure 6 · learning-rate schedules and what each one found
lr10,000
The learning rate over training, log scale, with the two ÷10 drops as dashed lines and the warmup window shaded. VGG-19: 112,480 iterations, drops at 56,240 and 84,360. Resnet-18: 30,000 iterations, drops at 20,000 and 25,000. The readout is the paper's reported outcome for the chosen network, base rate and k; combinations the paper does not report say so.

The paper does not explain why warmup is needed and lists it as future work. The follow-up by Frankle, Dziugaite, Roy and Carbin (2020) proposes a mechanism. Take the network at some iteration tt, train two copies from there with different random minibatch orders, and check whether the error stays low along the straight line between the two final weight vectors. When it does, training is stable to SGD noise from iteration tt. They find that iterative pruning reaches full accuracy only when training is stable in this sense, which on MNIST holds at iteration 0 and on larger networks only a little way into training. Resetting to an early iteration instead of 0 uses that directly. The original paper's warmup and lower learning rate plausibly work by making the first iterations gentle enough that iteration 0 is already close to the stable point; this reading is ours, not the paper's.

Liu et al. (2019), the source of the VGG-19 training setup, report that a pruned VGG-19 redrawn from scratch matches the dense network down to 20% of the weights, and that with the optimal learning rate the winning-ticket initialization brings no improvement over random initialization. Frankle and Carbin agree where the two papers overlap: at rate 0.1 their redrawn networks also match dense down to 20%, and their tickets do no better there. They differ below 20%, where Liu et al. present no data and the lottery ticket experiment with warmup keeps finding tickets down to 1.5% while the redrawn networks lose accuracy. Section 5 states its reconciliation as a hypothesis: a heavily overparameterized network can be pruned, redrawn and retrained down to some sparsity, and past that sparsity only the original initialization keeps the accuracy.

What the lottery ticket hypothesis claims and what it conjectures

The hypothesis is an existence claim about dense, randomly initialized, feed-forward networks, and the evidence for it is the set of tickets the procedure found on six architectures and two datasets. The abstract's "less than 10-20% of the size" is the range every tested network reaches; Lenet goes to 3.6%, VGG-19 with warmup to 1.5%, and Resnet-18 with warmup only to 11.8%. A second claim is labeled a conjecture and not tested: that SGD seeks out and trains a well-initialized subset of the weights, and that dense networks are easier to train than sparse ones because a dense initialization contains more candidate subnetworks.

The results do not yet make training cheaper. Finding a ticket costs 15 to 30 dense-sized trainings, and the unstructured sparse networks it produces run no faster on a GPU than dense ones, because dense matrix kernels do not skip individual zero weights. Section 6 lists both limitations, along with the restriction to small vision datasets (MNIST and CIFAR10) and the open question of why warmup is needed.

To reproduce the Lenet result: the loop in the second code listing, with the per-round sizes of (3), 20% per round (10% for the output layer), reset to the saved θ0\theta_0, 50,000 iterations of Adam at 0.0012 and batch size 60, five trials, and the early-stopping iteration read off the validation curve afterwards. The questions below cover what later work changed: resetting to an early iteration instead of iteration 0 extends the result to ImageNet, the signs of the initial values carry much of the effect on small networks, and a stronger form was proven for sufficiently wide random networks.

Provenance Verified against primary literatureHow we verify
Frankle & Carbin (2019)The paper (arXiv v5): hypothesis and formal statement (Section 1), Figure 2 architectures and hyperparameters, Section 2 Lenet numbers, Section 3 Conv-2/4/6, Section 4 VGG-19 and Resnet-18, Appendix B strategies, Appendix C early stopping, Appendix E random sparsity, Appendix F noise / redraw / iteration-0 pruning / weight movement, Appendices G to I hyperparameters and warmup.
google-research/lottery-ticket-hypothesisfoundations/pruning.py 39-48: per-layer sort of |w| over unmasked weights, cutoff = sorted[round(percent * size)], mask zeroed where |w| <= cutoff (so round(percent * size) + 1 weights go when there are no ties). foundations/trainer.py 51-52 and experiment.py 61-74: initial weights read once after the initializer, masks start at ones, every round trains from presets = initial with the new mask. foundations/model_base.py 93-121: preset constant initializer, non-trainable mask multiplied into W in the forward pass, biases zero-initialized and unmasked. mnist_fc/constants.py 27-37 and lottery_experiment.py 35: 300/100/10 layers, prune 0.2/0.2/0.1, 50,000 iterations, 30 rounds.
Han, Pool, Tran & Dally (2015)Three-step train / prune / retrain; threshold = a quality parameter times the layer's weight standard deviation; retraining keeps the surviving weights rather than re-initializing. Lenet-300-100 267K to 22K (12x), AlexNet 61M to 6.7M (9x), VGG-16 138M to 10.3M (13x).
Glorot & Bengio (2010)Var[W] = 2/(n_in + n_out), equation (12). The paper and code use the Gaussian form (xavier_initializer with uniform=False).
Liu, Sun, Zhou, Huang & Darrell (2019)The CIFAR10 VGG-19 training regime; the claim that with the optimal learning rate the winning-ticket initialization does not improve on random initialization.
Frankle, Dziugaite, Roy & Carbin (2019, 2020)Resetting to an early iteration (0.1% to 7% of training) instead of 0, matching subnetworks for Resnet-50 on ImageNet at 80% sparsity; full accuracy only once training is stable to SGD noise (linear mode connectivity).
Zhou, Lan, Liu & Yosinski (2019); Malach et al. (2020)Signs of the initialization suffice to retrain; supermasks at 86% on MNIST without training; the strong form proven for sufficiently overparameterized random networks.
Figure 4 toy run (this page)Our experiment, not the paper's: 2-50-50-3 ReLU MLP, three-arm spiral, 300 training points with 20% flipped labels, 600 validation and 600 test points, Glorot Gaussian init, Adam lr 0.003, batch 50, 4,000 iterations, layer-wise pruning 0.2/0.2/0.1 with the official code's cutoff rule, one redraw per round, five seeds.
correctionAppendix B writes the mask after a round as P_m' = (P_m − s)%, and Section 1 says each round prunes p^(1/n)% of the weights that survive. Both are notational slips: the code prunes a fraction s of the currently surviving weights, so the fraction remaining compounds, P_m' = P_m(1 − s), and the paper's own labels (51.3% after 3 rounds, 21.1% after 7, 13.5% after 9, 3.6% after 15) are the multiplicative values of (3); subtraction would give 40% after 3 rounds and nothing after 5. P_m is called the sparsity of the mask but is the fraction of weights kept. The released code is a re-implementation by Frankle and Bieber whose Lenet defaults are SGD at learning rate 0.1, not the Adam at 0.0012 of the paper's Figure 2; the pruning and reset semantics match the paper.

Questions you might still have

?

Is a winning ticket a sparse network I can train from scratch without ever training the dense one?
No. The paper finds tickets only by training the dense network, pruning it and resetting it, and iterative pruning trains the network 15 to 30 times in a row. The ticket is a subset of the dense initialization, but the only way the paper has to locate it runs through the dense training runs. Cheaper ways to find tickets are listed as future work.

?

Are the winning ticket weights already close to their trained values?
No. Appendix F.5 measures how far each weight of the dense network moves during training: the weights that end up in the ticket move further than the weights that get pruned, and more often away from zero. The paper does not identify which property of the initial values makes the ticket train well.

?

Does the hypothesis say every network has a ticket?
It is stated for dense, randomly initialized, feed-forward networks, and tested on Lenet, three small convolutional networks, VGG-19 and Resnet-18, on MNIST and CIFAR10. For VGG-19 and Resnet-18 the procedure finds tickets only at a lower learning rate or with learning-rate warmup, and never for Resnet-18 at the standard rate 0.1. The broader claim, that SGD trains a well-initialized subset of the network, is labeled a conjecture and left untested.

?

How is this different from ordinary pruning followed by fine-tuning?
Han et al. (2015) prune a trained network and keep training the surviving weights from their trained values. The lottery ticket procedure keeps only the trained magnitudes, to choose the mask, and restarts the surviving connections from their values at iteration 0. The paper does not benchmark Han-style fine-tuning against the reset. Its Appendix B compares two ways of looping: resetting to the initial values after every round, or continuing from the trained values between rounds and resetting only at the end. Resetting every round keeps accuracy and learning speed to smaller sizes.

?

Why does the random reinitialization control keep the mask?
A pruned-and-reset network differs from the dense network in two ways: which weights exist, and what values they start from. Redrawing the values while keeping the mask isolates the second. On Lenet the redrawn network falls below dense accuracy once 21.1% of the weights remain, while the reset network holds dense accuracy down to 2.9%, so the initial values carry most of the effect. On Conv-2 and Conv-4 the redrawn networks keep or even improve their accuracy at moderate pruning, so the mask carries part of it there.

?

Can I reproduce the effect on a laptop?
The toy run in Figure 4 takes a few minutes in single-threaded JavaScript: a 2,750-weight network on a noisy three-arm spiral, 13 pruning rounds, five seeds, reset against redraw; the script is in the site repository under scripts/figure-data. The paper’s Lenet experiment is larger: 16 trainings of 50,000 iterations to reach 3.6% of the weights, times five trials. The official code (google-research/lottery-ticket-hypothesis) is a re-implementation whose Lenet defaults are SGD at learning rate 0.1 rather than the paper’s Adam at 0.0012, so set the optimizer before comparing numbers.

?

What did later work change?
Frankle et al. (2019, 2020) reset to the weights of an early iteration, 0.1% to 7% of the way through training, instead of iteration 0, which finds matching subnetworks for Resnet-50 on ImageNet at 80% sparsity, and they tie the need for this to the network becoming stable to the random order of minibatches. Zhou et al. (2019) found that on the small networks keeping only the signs of the original initialization is enough to retrain, and found masks that score 86% on MNIST with no training. Malach et al. (2020) proved a stronger version: a sufficiently overparameterized random network contains a subnetwork that matches a target network without any training.

Footnotes & further reading

  1. The paper: Frankle and Carbin, The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks (ICLR 2019, one of the conference's two best paper awards). Code, a re-implementation of the Lenet experiments by Frankle and Bieber; line numbers in the Provenance panel refer to its master branch.
  2. Magnitude pruning with retraining: Han, Pool, Tran and Dally, Learning both Weights and Connections for Efficient Neural Networks (NeurIPS 2015). The earlier second-order criterion: LeCun, Denker and Solla, Optimal Brain Damage (NeurIPS 1989). The quoted difficulty of training pruned networks from scratch: Li, Kadav, Durdanovic, Samet and Graf, Pruning Filters for Efficient ConvNets (ICLR 2017).
  3. The initialization: Glorot and Bengio, Understanding the difficulty of training deep feedforward neural networks (AISTATS 2010).
  4. The contrary result and the shared VGG-19 setup: Liu, Sun, Zhou, Huang and Darrell, Rethinking the Value of Network Pruning (ICLR 2019). The architectures: Simonyan and Zisserman, Very Deep Convolutional Networks (explainer) and He, Zhang, Ren and Sun, Deep Residual Learning (explainer).
  5. Follow-ups by the same group: Frankle, Dziugaite, Roy and Carbin, Stabilizing the Lottery Ticket Hypothesis (2019) and Linear Mode Connectivity and the Lottery Ticket Hypothesis (ICML 2020).
  6. What in the initialization matters: Zhou, Lan, Liu and Yosinski, Deconstructing Lottery Tickets: Zeros, Signs, and the Supermask (NeurIPS 2019). The proof of the strong form: Malach, Yehudai, Shalev-Shwartz and Shamir, Proving the Lottery Ticket Hypothesis: Pruning is All You Need (ICML 2020).
  7. Occam's hill: Rasmussen and Ghahramani, Occam's Razor (NeurIPS 2000).