【问题标题】:How can I apply custom regularization in CNTK (using python)?如何在 CNTK 中应用自定义正则化(使用 python)?
【发布时间】:2017-11-28 13:59:00
【问题描述】:

您知道如何将自定义正则化函数应用于 CNTK?

特别是,我想将函数对输入的导数添加到损失中;像

newLoss = loss + lambda * gradient_F(inputs)

其中 F 是模型学习的函数,输入是模型的输入。

如何在 CNTK 中实现这一点?我不知道如何访问输入的梯度,以及如何将梯度 wrt 用于正则化器的权重。

【问题讨论】:

    标签: python machine-learning backpropagation cntk regularized


    【解决方案1】:

    首先,梯度不是一个标量,所以优化它没有多大意义。梯度范数可能会增加你的损失。为此,CNTK 必须采用梯度范数的梯度,在撰写本文时(2017 年 7 月)尚不支持该梯度。然而,这是我们希望在未来几个月内添加的一项重要功能。

    更新:一种解决方法是做这样的事情 noisy_inputs = x + C.random.normal_like(x, scale=0.01) noisy_model = model.clone('share', {x: noisy_inputs}) auxiliary_loss = C.squared_error(model, noisy_model) 但是您必须针对您的问题调整噪声的大小。

    【讨论】:

    • 感谢您的回答!是的,很明显,我的意思是梯度的范数(实际上是梯度差异的范数,如论文中所述......但我不会深入探讨)。我也想知道如何获得梯度范数的梯度,但由于它不受支持,我现在就等着吧。再次感谢你!你参与cntk开发吗?
    • 是的,我参与了 CNTK 的开发。一种近似您想要的方法是向您的数据添加少量随机噪声,将它们推过您的网络的克隆版本,并要求克隆的输出与原始输出之间存在微小差异。查看更新的答案。
    【解决方案2】:

    CNTK 学习器仅接受数字作为正则化器 (L1/L2) 值。如果您真的想添加自定义正则化器,您可以轻松实现自己的 Learner。您将可以访问所需的渐变。您将找到几个关于如何实现您自己的 Learner here 的示例。

    【讨论】:

      【解决方案3】:

      这是执行此操作的代码:

          def cross_entropy_with_softmax_plus_regularization(model, labels, l2_regularization_weight):
              w_norm = C.Constant(0);
              for p in (model.parameters):
                  w_norm = C.plus(w_norm, 0.5*C.reduce_sum(C.square(p)))
      
              return C.reduce_log_sum_exp(model.output) - 
      
      C.reduce_log_sum_exp(C.times_transpose(labels, model.output)) + l2_regularization_weight*w_norm
      

      还有我的 http://www.telesens.co/2017/09/29/spiral_cntk/ 博客文章

      【讨论】:

      • 嗨!我在寻找梯度的范数,而不是重量的范数:)
      • 好吧,抱歉,我没有正确阅读原始问题。您可以通过插入实现参数更新的自定义学习器函数来访问梯度(参见下面的代码)。不确定如何从您的损失函数中访问这些梯度..` def my_gradient_update(parameters, gradients): update_funcs = [];对于 p, g in zip(parameters, gradients): gradient_scale_factor = 0.001 update_funcs.append(C.assign(p, p - gradient_scale_factor * g)) return C.combine(update_funcs) `
      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多