在我的生成神经网络的最后一层中,我使用了l1活动正则化(activity_regularizer=l1):
outputs = Dense(200, activation='softmax', activity_regularizer=l1(1e-5))(x)
它使我的结果变得更好,但我不知道为什么它会对Softmax激活函数产生影响。因为输出的总和始终为1,且所有值都是正的,所以无论如何正则化器应该给出相同的损失。
activity_regularizer=l1(1e-5)
在我的训练中做了什么?
回答:
由于Softmax的存在,L1正则化对总成本的贡献实际上是恒定的。
然而,正则化项的梯度非零,并且等于非零激活的数量(abs的梯度是sign,所以我们有激活的sign之和,这些激活由于Softmax而为正)。
你可以尝试在有和没有L1项的情况下运行,并检查你最终得到多少非零元素。