Paper · 2019-11-25 · cs.LG, cs.CV, stat.ML
Rigging the Lottery: Making All Tickets Winners
RigL trains a sparse network from a random start with fixed parameter count and fixed training FLOPs. Every 100 steps it drops the smallest-magnitude active weights and grows the same number where the dense gradient is largest, initialised to zero. Author-reported: 80% sparse ResNet-50 reaches 74.6% top-1 at 0.23x training FLOPs, against 76.8% dense.
Dynamic sparse trainingNetwork pruningsparse-trainingpruningimage-classificationlanguage-modeling
arXivPDFCodeMarkdown17 min read
AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Making a large neural network small usually means training it in full and then cutting it down. Sparse training tries to keep the network small from the start: most connections are switched off, and only the rest are trained. The hard part is choosing which connections stay on.
RigL changes that choice during training. At regular intervals it switches off the weakest active connections and switches on the same number of new ones, picked where the error signal (the gradient) suggests they would help most. New connections start at zero, so the network's output does not jump when they appear. The authors report that this gives better accuracy than earlier sparse-training methods at the same training cost, and that in several settings it is competitive with pruning a dense network.
TL;DR
RigL keeps a fixed number of weights active and rewires them during training: every ΔT steps it drops the smallest-magnitude active weights and grows as many new ones where the dense gradient is largest, starting them at zero §3. In the authors' ImageNet ResNet-50 experiments it beats the other sparse-training methods in the same uniform-sparsity setting, and with 5x longer training it is above the magnitude-pruning baselines it cites fig. 2. On CIFAR-10 it matches pruning at fewer training FLOPs §4.3; on character-level WikiText-103 it does not match pruning §4.2. Read the notation and warm-up notes under Pitfalls and Paper vs code before implementing.
Problem
Sparse networks save memory and inference FLOPs, but the most accurate sparse models have usually been obtained from dense networks, so training still costs at least as much as a dense model §1. Static sparse training, where the mask is fixed from the start, performs worse than dense-to-sparse methods; the paper cites several works for this, and its own ImageNet runs show it §4.1.1. Earlier dynamic methods either grow connections at random §2 or need dense gradients and momentum for every parameter at every step, which is costly in memory and compute §2. The paper asks whether a sparse network with a fixed size and fixed cost can keep its quality while its connections change during training §1, §3.
Assumptions: fixed sparsity per run (no change of layer budgets during training, so FLOPs can be fixed in advance §3 (1)); FLOP counts assume the training uses sparsity fig. 2 caption.
Method
Figure and table numbers below are counted from the order of the LaTeX source, not checked against the rendered PDF. Equations in §3 are unnumbered in the source, so they are cited by section.
RigL starts from a random sparse network with a per-layer sparsity. Every ΔT iterations, until T_end, it updates each layer's mask in two parts. First it drops a fraction of the active connections with the smallest weight magnitude. Then it grows the same number of connections at positions that are currently inactive, choosing those with the largest gradient magnitude. Between updates it trains the active weights as an ordinary sparse network alg. 1. The number of connections replaced in layer l is k = f_decay(t) · (1 − s^l) · N^l, where the fraction f_decay(t) starts at α and decays with a cosine schedule §3 (2)–(3).
The paper's building blocks, in the order it describes them §3:
-
Sparsity distribution §3 (1). The paper compares three ways of setting per-layer sparsity for a given total sparsity S: Uniform (every layer gets S, and the first layer is kept dense), Erdős–Rényi (ER, introduced by SET §3 (1)), and Erdős–Rényi-Kernel (ERK), which adds the kernel width and height to the scaling. For ER and ERK, the sparsity scales with 1 minus a ratio of layer dimensions; the paper's wording is ambiguous, see Pitfalls. Bias and batch-norm parameters are kept dense in all methods §3 (1). The distribution is fixed for the whole run, so the FLOP budget is known in advance §3 (1).
-
Update schedule §3 (2). Four parameters: ΔT (iterations between updates), T_end (last iteration with an update), α (initial fraction of connections updated) and f_decay (a function that may shrink the fraction over time). The paper uses cosine annealing, which it found slightly better than the alternatives §3 (2):
f_{decay}(t;~\alpha,~T_{end})=\frac{\alpha}{2}\left(1+\cos\left(\frac{t\pi}{T_{end}}\right)\right) §3 (2)
Constant and inverse-power schedules are reported in app. G.
-
Drop criterion §3 (3). Every ΔT steps, drop the connections given by the top-k of −|θ^l|, where k is the number of connections to replace. In words: drop the k active weights with the smallest magnitude.
-
Grow criterion §3 (4). Grow the k inactive positions with the largest magnitude of the current minibatch gradient. Positions that are still active after the drop are excluded, while dropped positions may be grown again. Newly activated connections are initialised to zero, so they do not change the output at the moment they appear. The paper says random values and small values along the gradient direction gave no better results §3 (4).
-
Cost §3, final paragraph; app. H. The dense gradient is needed only at update steps and can be computed layer by layer and discarded after the top-k selection. The extra cost is amortised when ΔT > 1/(1 − s), so the average work stays proportional to 1 − S §3. Per-sample training FLOPs are (3·f_S·ΔT + 2·f_S + f_D) / (ΔT + 1), where f_S and f_D are the sparse and dense forward FLOPs; the cost of the top-k selection is omitted app. H.
# RigL: drop and grow connections during training [alg. 1]
# Input: network, dataset D, per-layer sparsities s[l]
# Input: dT (update interval), T_end (last update), alpha (initial drop)
# Output: weights and masks of the sparse network
# Cosine decay of the fraction of connections replaced [§3 (2)]
def f_decay(step, alpha, T_end):
# alpha / 2 * (1 + cos(step * pi / T_end)) [§3 (2)]
return alpha / 2 * (1 + cos(step * pi / T_end))
def train_rigl(network, dataset, s, dT, T_end, alpha, lr):
# Random sparse start with the chosen per-layer sparsities [§3 (1)]
masks = random_masks(network, sparsities=s)
weights = network.initial_weights() * masks
for step in range(num_steps):
# Sample a minibatch B_t from D [alg. 1]
batch = sample_minibatch(dataset)
# Loss summed over the samples of the batch [alg. 1]
loss = sum_loss(network(weights * masks, batch))
if step % dT == 0 and step < T_end:
# Fraction of the active weights to replace now [§3 (2)]
fraction = f_decay(step, alpha, T_end)
for layer in network.layers:
# Gradient for every position, zeros included [§3 (4)]
dense_grad = grad_of_effective_weights(loss, layer)
# Number of connections to drop and to grow [§3 (2)]
k = fraction * (1 - s[layer]) * layer.size
# Drop the k smallest-magnitude active weights [§3 (3)]
dropped = smallest_k(abs(weights[layer]), k, masks[layer])
masks[layer][dropped] = 0
# Grow the k largest-gradient inactive positions [§3 (4)]
grown = largest_k(abs(dense_grad), k, masks[layer] == 0)
# New connections start at zero [§3 (4)] [alg. 1]
# Reference code differs for regrown positions, see Pitfalls
weights[layer][grown] = 0
masks[layer][grown] = 1
else:
# Ordinary sparse SGD step [alg. 1]
# Alg. 1 writes the step size as alpha; here it is lr
weights = weights - lr * grad(loss, weights * masks)Hyperparameters
Values as stated in the paper. "not stated" means the paper gives no value.
| Name | Value | Where | Notes |
|---|---|---|---|
| Update interval ΔT | 100 iterations | §4 §4.1.1 §4.3 | Sweep over 50, 100, 500, 1000 in fig. 5; ΔT = 100 is best in app. J |
| Initial drop fraction α | 0.3 | §4 | Sweep over 0.1, 0.3, 0.5 in fig. 5; 0.3 or 0.5 best at ΔT = 100 §4.4 |
| Drop schedule f_decay | cosine | §3 (2) | Constant and inverse-power schedules in app. G |
| Mask update end T_end | 25k iterations (ImageNet); 75k (CIFAR-10) | §4 | About 3/4 of training |
| Sparsity distribution | ERK by default for ResNet-50 and CIFAR-10; Uniform and ERK both for MobileNet | §4.1.1 §4.1.2 §4.3 | First layer dense for Uniform §3 (1); dense for MobileNet §4.1.2 |
| Sparsity levels, ImageNet ResNet-50 | 80% and 90% (main); 95% and 96.5% (high sparsity) | fig. 2 app. L | CIFAR-10 is shown at several levels, including 50% §4.3 |
| Optimizer, ImageNet | SGD with momentum 0.9 | §4.1 | Code uses Nesterov momentum; see Paper vs code |
| L2 regularisation, ImageNet | 1e-4 | §4.1 | |
| Label smoothing, ImageNet | 0.1 | §4.1 | |
| Batch size, ImageNet | 4096 | §4.1 | |
| Training length, ImageNet | 32000 steps (about 100 epochs) | §4.1 | RigL 5x uses 5 times the steps §4 |
| Learning rate, ImageNet | Linear warm-up to 1.6 at epoch 5; divided by 10 at epochs 30, 70 and 90 | §4.1 | Warm-up is not applied by the reference code for ResNet; see Paper vs code |
| Augmentation, ImageNet | Random flips and crops | §4.1 | |
| MobileNet training | 5x the original steps for all runs | §4.1.2 | MobileNet-v1 and -v2 §4.1.2; learning-rate schedule not stated in the paper |
| SNFS momentum (baseline) | 0.9 | §4.1 | 0.99 gives the best result in the sweep app. D |
| Char-level LM network | Embedding 128; vocabulary 256; GRU state 512; readout linear layers 256 and 128 | §4.2 app. I | |
| Char-level LM optimiser | Adam, learning rate 7e-4, L2 5e-4 | app. I | |
| Char-level LM data | Sequence length 512; batch size 32; gradient clipping at norm 10 | app. I | |
| Char-level LM run | 200,000 iterations; 75% sparsity; α = 0.1; ΔT = 100; cosine; updates until the end | app. I | Uniform distribution app. I |
| Char-level LM pruning baseline | Magnitude pruning between iterations 50,000 and 150,000, every 1,000 | app. I | Uses the TensorFlow Model Pruning library §4 |
| CIFAR-10 network | WideResNet-22-2 (22 layers, width multiplier 2) | §4.3 | |
| CIFAR-10 training | 250 epochs (97,656 steps); batch size 128; momentum 0.9; L2 5e-4 | §4.3 | |
| CIFAR-10 learning rate | 0.1, divided by 5 every 30,000 iterations | §4.3 | |
| MNIST MLP | LeNet 300-100 with ReLU, trained on MNIST | app. B | RigL removes 99% and 89% of first- and second-layer connections at start app. B |
| RigL+ MNIST | Restart from the RigL architecture 408-100-69 with 96% and 86% sparsity in the first two layers | app. B | |
| Repeats | 3 runs, mean and standard deviation | §4 |
Results
Author-reported. Setup: ImageNet-2012 with ResNet-50 (top-1 accuracy), MobileNet-v1 and -v2 on ImageNet, character-level WikiText-103 (validation bits per step; values only in fig. 4 left), WideResNet-22-2 on CIFAR-10 (test accuracy; dense 94.1% §4.3), and an MLP on MNIST app. B. Baselines marked * are numbers reported in the original papers, not rerun by the authors fig. 2 caption. FLOPs are normalised to the dense model fig. 2.
ImageNet-2012, ResNet-50 fig. 2 left
| Method | Top-1 at 80% | Train FLOPs | Test FLOPs | Top-1 at 90% | Train FLOPs | Test FLOPs |
|---|---|---|---|---|---|---|
| Dense | 76.8 ± 0.09 | 1x (3.2e18) | 1x (8.2e9) | |||
| Static | 70.6 ± 0.06 | 0.23x | 0.23x | 65.8 ± 0.04 | 0.10x | 0.10x |
| SNIP | 72.0 ± 0.10 | 0.23x | 0.23x | 67.2 ± 0.12 | 0.10x | 0.10x |
| Small-Dense | 72.1 ± 0.12 | 0.20x | 0.20x | 68.9 ± 0.10 | 0.12x | 0.12x |
| SET | 72.9 ± 0.39 | 0.23x | 0.23x | 69.6 ± 0.23 | 0.10x | 0.10x |
| RigL | 74.6 ± 0.06 | 0.23x | 0.23x | 72.0 ± 0.05 | 0.10x | 0.10x |
| Small-Dense 5x | 73.9 ± 0.07 | 1.01x | 0.20x | 71.3 ± 0.10 | 0.60x | 0.12x |
| RigL 5x | 76.6 ± 0.06 | 1.14x | 0.23x | 75.7 ± 0.06 | 0.52x | 0.10x |
| Static (ERK) | 72.1 ± 0.04 | 0.42x | 0.42x | 67.7 ± 0.12 | 0.24x | 0.24x |
| DSR* | 73.3 | 0.40x | 0.40x | 71.6 | 0.30x | 0.30x |
| RigL (ERK) | 75.1 ± 0.05 | 0.42x | 0.42x | 73.0 ± 0.04 | 0.25x | 0.24x |
| RigL 5x (ERK) | 77.1 ± 0.06 | 2.09x | 0.42x | 76.4 ± 0.05 | 1.23x | 0.24x |
| SNFS* | 74.2 | n/a | n/a | 72.3 | n/a | n/a |
| SNFS (ERK) | 75.2 ± 0.11 | 0.61x | 0.42x | 72.9 ± 0.06 | 0.50x | 0.24x |
| Pruning* | 75.6 | 0.56x | 0.23x | 73.9 | 0.51x | 0.10x |
| Pruning 1.5x* | 76.5 | 0.84x | 0.23x | 75.2 | 0.76x | 0.10x |
| DNW* | 76 | n/a | n/a | 74 | n/a | n/a |
Pruning* results come from Gale et al. (arXiv:1902.09574). The caption says the DNW* numbers come from Kusupati et al. (2020) fig. 2. Text: at 96.5% sparsity, ResNet-50 with ERK reaches 72.75% top-1, about 3.5 points above the extended magnitude-pruning result §4.1.1.
MobileNet on ImageNet fig. 3 right
| Sparsity | Method | Top-1 | FLOPs (inference) |
|---|---|---|---|
| 0.75 | Small-Dense 5x | 66.0 ± 0.11 | 0.23x |
| 0.75 | Pruning (Zhu) | 67.7 | 0.27x |
| 0.75 | RigL 5x | 71.5 ± 0.06 | 0.27x |
| 0.75 | RigL 5x (ERK) | 71.9 ± 0.01 | 0.52x |
| 0.9 | Small-Dense 5x | 57.7 ± 0.34 | 0.09x |
| 0.9 | Pruning (Zhu) | 61.8 | 0.12x |
| 0.9 | RigL 5x | 67.0 ± 0.17 | 0.12x |
| 0.9 | RigL 5x (ERK) | 68.1 ± 0.11 | 0.27x |
| dense | Dense | 72.1 ± 0.17 | 1x (1.1e9) |
| 0.75 | Big-Sparse 5x (width 1.98) | 76.4 ± 0.05 | 0.98x |
| 0.75 | Big-Sparse 5x (ERK, width 1.98) | 77.0 ± 0.08 | 1.91x |
Text: RigL trains 75% sparse MobileNets with no loss in performance §4.1.2. A MobileNet-v1 widened by a factor of 1.98 and kept 75% sparse matches the dense baseline's FLOPs and parameter count, and gains 4.3 points top-1 under RigL §4.1.2.
High sparsity, ResNet-50 app. L, table 4
| Method | Top-1 at 95% | Train FLOPs | Test FLOPs | Top-1 at 96.5% | Train FLOPs | Test FLOPs |
|---|---|---|---|---|---|---|
| Static | 59.5 ± 0.11 | 0.23x | 0.08x | 55.4 ± 0.06 | 0.13x | 0.07x |
| SNIP | 57.8 ± 0.40 | 0.23x | 0.08x | 52.0 ± 0.20 | 0.13x | 0.07x |
| SET | 64.4 ± 0.77 | 0.23x | 0.08x | 60.8 ± 0.45 | 0.13x | 0.07x |
| RigL | 67.5 ± 0.10 | 0.23x | 0.08x | 65.0 ± 0.28 | 0.13x | 0.07x |
| RigL 5x | 73.1 ± 0.12 | 1.14x | 0.08x | 71.1 ± 0.20 | 0.66x | 0.07x |
| Static (ERK) | 72.1 ± 0.04 | 0.42x | 0.42x | 67.7 ± 0.12 | 0.24x | 0.24x |
| RigL (ERK) | 69.7 ± 0.17 | 0.42x | 0.12x | 67.2 ± 0.06 | 0.25x | 0.11x |
| RigL 5x (ERK) | 74.5 ± 0.09 | 2.09x | 0.12x | 72.7 ± 0.02 | 1.23x | 0.11x |
| SNFS (ERK) | 70.0 ± 0.04 | 0.61x | 0.12x | 67.1 ± 0.72 | 0.50x | 0.11x |
| Pruning* (Gale) | 70.6 | 0.56x | 0.08x | n/a | 0.51x | 0.07x |
| Pruning 1.5x (Gale) | 72.7 | 0.84x | 0.08x | 69.26 | 0.76x | 0.07x |
The Static (ERK) row repeats the 80% and 90% values of fig. 2 under the 95% and 96.5% headers; see Pitfalls.
Character-level WikiText-103 §4.2; fig. 4 left
Final validation loss in bits per step is shown only in the figure; the text gives no numbers. RigL exceeds the other sparse-training methods and its results keep improving with more steps; it does not match magnitude pruning in this setting §4.2.
CIFAR-10, WideResNet-22-2 §4.3; fig. 4 right
Dense baseline 94.1% test accuracy. Some 50%-sparse networks generalise better than the dense baseline. RigL matches pruning with a fraction of the training resources, while static sparse networks fall behind pruning as sparsity grows §4.3. Per-sparsity values are shown only in the figure.
MNIST MLP, structured-pruning comparison app. B, table 2
| Method | Final architecture | Sparsity | Training cost GFLOPs (final net trained from scratch) | Inference KFLOPs | Size (bytes) | Error % (lowest; end of training) |
|---|---|---|---|---|---|---|
| SBP | 245-160-55 | 0.000 | 13521.6 (2554.8) | 97.1 | 195100 | 1.6 |
| L0 | 266-88-33 | 0.000 | 13521.6 (1356.4) | 53.3 | 107092 | 1.6 |
| VIB | 97-71-33 | 0.000 | 13521.6 (523) | 19.1 | 38696 | 1.6 |
| RigL | 408-100-69 | 0.870 | 482.0 | 12.6 | 31914 | 1.44 (1.48) |
| RigL+ | 375-62-51 | 0.886 | 206.3 | 6.2 | 16113 | 1.57 (1.69) |
The training costs of SBP, L0 and VIB are lower bounds computed by the authors from the reported accuracies, not measured app. B.
Restarting from the RigL network, with lottery-ticket initialisation app. E, table 3
The table does not state the network or sparsity used.
| Initialisation | Method | Test accuracy | Training FLOPs |
|---|---|---|---|
| Lottery | Static | 70.82 ± 0.07 | 0.46x |
| Lottery | RigL | 73.93 ± 0.09 | 0.46x |
| Random | RigL | 74.55 ± 0.06 | 0.23x |
| Random | RigL 2x | 76.06 ± 0.09 | 0.46x |
Paper vs code
Searched: the paper names github.com/google-research/rigl in the abstract,
footnote and §4. The authors are at Google Brain and DeepMind, and the
repository sits in the google-research organisation. Code cloned at commit
d39fc7d46505cb3196cb1edeb32ed0b6dd44c0f9. The TensorFlow 1 path
(rigl/sparse_optimizers*.py, rigl/sparse_utils.py,
rigl/imagenet_resnet/, rigl/cifar_resnet/) was read for the settings
above. rigl/rigl_tf2/ was not compared in detail. The character-level GRU
experiment has no code in the repository.
- Warm-up. The paper says the ImageNet learning rate warms up linearly to 1.6 at epoch 5 §4.1. In the reference script the ResNet schedule starts at epoch 0, so the warm-up term divides by zero and is overridden by the constant entry for every epoch imagenet_train_eval.py imagenet_train_eval.py. The MobileNet schedule starts at epoch 8, so its warm-up does apply imagenet_train_eval.py. For ResNet the learning rate is therefore 1.6 from the first step. The peak value agrees: 0.1 × 4096 / 256 = 1.6 imagenet_train_eval.py.
- Momentum. The paper says SGD with momentum §4.1. The code uses Nesterov momentum imagenet_train_eval.py.
- Drop schedule. The paper uses cosine annealing §3 (2). The ImageNet and CIFAR-10 scripts default to a constant drop fraction imagenet_train_eval.py resnet_train_eval.py. Cosine is the default only in the MNIST script mnist_train_eval.py. The repository does not show which setting produced the ImageNet and CIFAR-10 results. Launch flags are not given for them.
- First layer. The paper keeps the first layer dense only for Uniform
§3 (1). The ImageNet default is
first_layer_sparsity=0, so the first layer stays dense imagenet_train_eval.py. The README's ERK evaluation command passes--first_layer_sparsity=-1, which prunes the first layer at the default sparsity README.md. The paper gives no first-layer rule for ERK. - Architecture defaults. The CIFAR-10 script defaults to depth 16 and
width 4 resnet_train_eval.py. The paper's
WideResNet-22-2 needs
resnet_depth=22andresnet_width=2passed explicitly; depth 22 satisfies the script's 6n+4 check resnet_train_eval.py. - Dropped-and-regrown connections. The paper says newly activated
connections are initialised to zero §3 (4). The code initialises only
positions that were inactive before the update. A position dropped and
regrown in the same update keeps its old value, because RigL calls the
update with
reinit_when_same=Falsesparse_optimizers_base.py sparse_optimizers_base.py. - Momentum of new connections. The paper says nothing about optimizer state.
In the code, the momentum slot of a newly grown connection is reset to the
value
rigl_acc_scale × masked gradient, which is zero by default sparse_optimizers_base.py imagenet_train_eval.py. - ERK sparsities. The paper says ER and ERK scale sparsity with 1 minus a ratio of dimensions §3 (1). The code solves for a global constant that scales the ratio so that total parameters match the budget; a layer whose density would exceed 1 is made dense and the solve repeats sparse_utils.py. The sparsity of each layer is 1 − constant × ratio sparse_utils.py. The paper does not describe the dense-layer rule.
- Grow and drop scores. The drop score is |θ| plus Gaussian noise with standard deviation 1e-5, used only for tie-breaking sparse_optimizers_base.py. Growth uses the absolute gradient of the masked weights from the current minibatch sparse_optimizers_base.py sparse_optimizers_base.py.
- Checkpoint numbers. The README's ResNet-50 checkpoint table matches the paper to rounding at 1x (for example uniform 80%: 74.60 in the README, 74.6 in fig. 2) README.md. At 5x the differences are larger: uniform 80% is 76.71 in the README and 76.6 in fig. 2; ERK 80% is 77.17 against 77.1 README.md. The README also lists 99% sparse ERK checkpoints from 1x to 100x training, which the paper does not report README.md.
- Mask update stop. The code's first update happens at step 0 because the last-update counter starts at minus the interval sparse_optimizers_base.py. This matches Algorithm 1 at t = 0 alg. 1.
Pitfalls
- Overloaded notation. α is the initial drop fraction §3 (2), but Algorithm 1 uses α as the learning rate in its update step alg. 1. Use your optimizer's learning rate there.
- The set I_active. Algorithm 1 defines I_active = ArgTopK(−|θ|, k), which by the drop rule §3 (3) is the set of connections to drop. The "Changes since publishing" list says I_active means the connections kept app. N. The code drops the smallest magnitudes and keeps the largest sparse_optimizers_base.py. Implement the drop rule, not the changelog's reading.
- ER/ERK wording. The paper says sparsity "scales with 1 minus a ratio" §3 (1). The reference code makes density proportional to the ratio, so sparsity is 1 minus a scaled ratio. Use the code's behaviour: solve a single constant so that the total number of parameters meets the budget, and make oversized layers dense. See Paper vs code.
- Growth budget. Each update grows as many connections as it drops, so the parameter count and per-layer sparsity stay fixed §3 (2)–(4). Keep the count equal per layer; a global count would move parameters between layers.
- Gradient cost. The dense gradient is needed at update steps only. Its cost is amortised only if ΔT > 1/(1 − s) §3. At 99% sparsity this is ΔT > 100; at lower sparsity the condition holds easily. Check this when you pick ΔT.
- Batch-size sensitivity. Growth uses the current minibatch gradient. The paper uses batch size 4096 on ImageNet and 128 on CIFAR-10 and does not report the effect of a different batch size §4.1 §4.3.
- MobileNet sparsity labels. Sparsities in the MobileNet experiments are computed over pruned layers only. Real sparsities, counting the first layer and the depthwise convolutions, are 74.2, 84.1, 89 and 94 for the labels 75, 85, 90 and 95 §4.1.2. Report the real value when you compare.
- FLOP accounting. The FLOP counts assume the top-k selection and the random growth in SET are free app. H. Pruning is charged for its average density over training. The counts are estimates and do not measure wall-clock time.
- Replica consistency. Random drop and grow decisions must agree across data-parallel replicas, and the masked gradients must be all-reduced across replicas. The authors' own early bugs were fixed in these ways; the fixes raised SET by 0.1–0.3 points and RigL and SNFS by about 0.5–1 point at default lengths app. M.
- Table 4 duplicate row. The Static (ERK) row in the 95% and 96.5% table matches the 80% and 90% values of fig. 2 exactly, including its FLOPs (0.42x and 0.24x). Those FLOPs cannot be right for two different sparsities. Check against a run before using that row app. L.
- Test-set selection in the MNIST table. The authors note that the baselines' code reports the lowest test error seen during training as the final error. They report that lowest value in the table and the end-of-training error in parentheses app. B. Compare the parenthesised values if you want end-of-training numbers.
- Char-level LM is not reproducible from this repository. The GRU and WikiText-103 code is not in the repository, so the settings in app. I can only be checked against the paper.
- Figure and table numbers are counted from the LaTeX source order (see Method).
Lineage
- Builds on: Dynamic sparse training with random growth (SET, Mocanu et al. 2018) §2; §3 (1), which RigL replaces with gradient-based growth; SET's Erdős–Rényi sparsity distribution is used §3 (1). Also magnitude pruning and gradual pruning, as in "To Prune, or Not to Prune" [arXiv:1710.01878] §2; §4.1.
- Compared against: Static sparse training, SNIP §4.1.1, SET §4.1.1, DSR §2, SNFS (arXiv:1907.04840) §2, magnitude pruning (Gale et al., arXiv:1902.09574) §4.1, DNW fig. 2 caption, and structured pruning methods SBP, L0 and VIB on MNIST app. B.
- Related: The lottery ticket hypothesis (Frankle et al.); this paper finds that rewiring beats restarting from the original initialisation app. E (see also arXiv:1903.01611 on lottery tickets at scale, cited in §2).
- Superseded by: not stated.
Source and license
Adapted from “Rigging the Lottery: Making All Tickets Winners” by Utku Evci, Trevor Gale, Jacob Menick, Pablo Samuel Castro, Erich Elsen (arXiv:1911.11134), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/google-research/rigl at commit d39fc7d46505 (Apache-2.0). Any quoted code is shown under that license.