Answers:
我发现麦克劳伦斯在另一个问题中给出的答案非常有帮助。转载如下:
权重约束是
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章
axis=0
。