什么是maxnorm约束?在卷积神经网络中有什么用?


Answers:



8

我发现麦克劳伦斯另一个问题中给出答案非常有帮助。转载如下:

权重约束是max_norm做什么的?

maxnorm(m)如果您的重量的L2范数超过m,将按比例缩小整个体重矩阵,使范数降低到m。您可以在keras代码中找到class MaxNorm(Constraint)

def __call__(self, w):
    norms = K.sqrt(K.sum(K.square(w), axis=self.axis, keepdims=True))
    desired = K.clip(norms, 0, self.max_value)
    w *= (desired / (K.epsilon() + norms))
    return w

另外,maxnorm有一个axis参数,根据该参数计算范数。在您的示例中,您没有指定轴,因此范数是在整个权重矩阵上计算的。例如,如果您想约束每个卷积过滤器的范数(假设您使用tf尺寸排序),则权重矩阵将具有shape (rows, cols, input_depth, output_depth)。计算超出范数axis = [0, 1, 2]会将每个过滤器约束到给定的范数。

为什么要这样做?

直接约束权重矩阵是另一种正则化。如果使用简单的L2正则化项,则损失函数将对高权重进行惩罚。有了这个约束,您就可以直接进行正则化。正如keras代码中也链接的那样,这与dropout图层结合使用似乎效果特别好。更多信息,请参见本文第5.1章


答案很不错,但是请注意:“在您的示例中,您没有指定轴,因此范数是在整个权重矩阵上计算的。” -这似乎不是真的(至少到目前为止)。而是根据default来计算范数axis=0
Bobson Dugnutt

我同意,将max-norm视为扇入隐藏层中节点的权重的长度,即 。另外,您是否注意到,对于辍学正则化,所有运行都使用max-norm(请参阅cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf第1934页的最后一段)。||w||
wrktsj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.