【问题标题】:Understanding Regularization in Keras理解 Keras 中的正则化
【发布时间】:2018-06-01 19:18:45
【问题描述】:

我试图理解为什么 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)?

【问题讨论】:

  • 考虑查看here。它可能会给你一些初步的见解。
  • 我没有发现上面评论中的链接对这个问题有帮助。

标签: python keras


【解决方案1】:

让我们分解您的问题的组成部分:

  1. 您对正则化的期望可能与前馈网络一致,其中惩罚项应用于整个网络的权重。但是,当您将 RNN 与 CNN 等混合使用时,情况不一定如此,因此 Keras 选择提供细粒度控制。也许为了便于设置,可以在 API 中为所有权重添加模型级别的正则化。

  2. 当你使用层正则化时,Layer 基类实际上是 adds 的正则化项,它在训练时会惩罚相应层的权重等。

  3. 现在在 Keras 中,您通常可以将正则化应用于 3 个不同的事物,如 Dense 层。每个层都有不同的内核,例如循环等,所以对于这个问题,让我们看看您感兴趣的那些,但大致相同的内容适用于所有层:

    1. kernel:这适用于层的实际权重,在Dense中它是Wx+b的W。
    2. bias:这是权重的偏置向量,因此您可以为其应用不同的正则化器,即 Wx+b 中的 b。
    3. activity:应用于输出向量,y = f(Wx + b)中的y。

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2017-08-26
    • 2021-04-06
    • 1970-01-01
    • 2020-03-10
    • 2018-12-24
    • 1970-01-01
    • 2019-08-08
    • 2019-12-01
    相关资源
    最近更新 更多