Zeroing individual weights: unstructured pruning
Unstructured pruning works at the level of individual weights. Given some importance criterion, most commonly the magnitude of each weight (the reasoning being that a weight close to zero contributes little to the layer's output), the smallest-magnitude weights across a layer or the whole network are set to exactly zero. Repeated over training or applied in one pass, this can push a large fraction of a network's weights to zero, sometimes the majority of them, while leaving the accuracy surprisingly intact, because a well-trained network tends to have substantial redundancy.
The catch is that a mostly-zero weight matrix stored in the ordinary dense format still takes the same memory and the same multiply-accumulate operations as before, because a multiplication by zero still gets computed unless something explicitly skips it. Getting real speed or memory benefit out of unstructured sparsity requires sparse-matrix formats and hardware or kernels that know how to skip the zeros, and that support is uneven: some accelerators handle sparse matrix multiplication efficiently, and a great deal of general-purpose hardware does not. So unstructured pruning can produce an impressively sparse model on paper that runs no faster at all on the hardware it's actually deployed to.
