我们给每一个参数添加一个Mask。这个Mask可以和参数进行点乘,从而得到被Mask过滤后的参数。如果Mask上的值为1,那么对应位置的参数将被保留,如果Mask上的值为0,那么对应位置的参数将被清除。
有了Mask,我们问题又来了,每一个参数应该设置成什么值呢?一个直观的方案是根据参数数值的大小来判断,一般来说数值越大,它所起到的作用也越大。所以柿子要捡软的捏,我们可以设定一个阈值,把比阈值小的参数关闭掉,只保留大数值的参数(参数的绝对值小于threshold1这个参数将被关闭)。
但是这又带来了一个新的问题。虽然这些被关闭的参数数值都很小,但是累积起来也是一个很可观的数字,我们这样把它们关闭掉,还是有可能造成精度损失的。于是,当我们把一些参数关闭后,我们还需要重新训练,让参数在新的环境适应——也许会有新的参数变得很小,从而被关闭,当然也有可能有些被关闭的参数死灰复燃(参数的绝对值大于threshold2),变得重要起来。所以设置Mask的值和重新训练两个步骤需要交替进行。
右边是Han等人的方法,The drawback of Han et al.’