我试图理解为什么Keras中的正则化语法看起来是这样的。
粗略地说,正则化是通过向损失函数添加一个惩罚项,该惩罚项与模型权重的某个函数成比例,以减少过拟合的一种方式。因此,我希望在模型的损失函数规范的一部分中定义正则化。
然而,在Keras中,正则化是根据每层定义的。例如,考虑这个带有正则化的DNN模型:
input = Input(name='the_input', shape=(None, input_shape))
x = Dense(units = 250, activation='tanh', name='dense_1', kernel_regularizer=l2, bias_regularizer=l2, activity_regularizer=l2)(x)
x = Dense(units = 28, name='dense_2',kernel_regularizer=l2, bias_regularizer=l2, activity_regularizer=l2)(x)
y_pred = Activation('softmax', name='softmax')(x)
mymodel= Model(inputs=input, outputs=y_pred)
mymodel.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
我本以为在Dense层中的正则化参数是不必要的,因此我认为可以将最后一行写得更加简洁:
mymodel.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'], regularization='l2')
这显然是错误的语法,但我希望有人能为我详细解释一下为什么要这样定义规则化,并且在我使用层级规则化时实际上发生了什么。
我还不明白在什么情况下我会使用三种规则化选项中的每一种或所有选项:(kernel_regularizer, activity_regularizer, bias_regularizer)
?