kernel_size K, in_channels M, out_channels N, assume that you have no bias.
naive convolution has KKMN parameters.
separable convolution has KKM + MN parameters.
Let me try to caculate KKMN - (KKM + MN).
nn.Conv2d(1, 4, kernel_size=2, padding=1)

2x2x4x1 - 2x2x4 - 4x1 = -4
nn.Conv2d(4, 8, kernel_size=2, padding=1)

2x2x8x4 - 2x2x8 - 8x4 = 64
nn.Conv2d(8, 16, kernel_size=2, padding=1)

2x2x16x8 - 2x2x16 - 16x8 = 320
Finally… (-4 + 64 + 320) = 380, maybe I’m wrong, but the value is really small…