如何在 CNTK 中应用自定义正则化(使用 python)?
How can I apply custom regularization in CNTK (using python)?
您知道如何将自定义正则化函数应用于 CNTK 吗?
特别是,我想将函数对输入的导数添加到损失中;像
newLoss = loss + lambda * gradient_F(inputs)
其中 F 是模型学习的函数,输入是模型的输入。
如何在 CNTK 中实现此目的?我不知道如何访问梯度 wrt 到输入,以及如何将梯度 wrt 到正则化器的权重。
CNTK 学习者只接受数字作为正则化器 (L1/L2) 值。如果你真的想添加你的自定义正则化器,你可以很容易地实现你自己的学习者。您将可以访问所需的渐变。您会找到几个关于如何实现您自己的 Learner 的示例 here。
首先,梯度不是标量,因此对其进行优化意义不大。梯度范数可能会增加你的损失。为此,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)
但是您必须针对您的问题调整噪音的大小。
这是执行此操作的代码:
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/ 博客 post 关于它
您知道如何将自定义正则化函数应用于 CNTK 吗?
特别是,我想将函数对输入的导数添加到损失中;像
newLoss = loss + lambda * gradient_F(inputs)
其中 F 是模型学习的函数,输入是模型的输入。
如何在 CNTK 中实现此目的?我不知道如何访问梯度 wrt 到输入,以及如何将梯度 wrt 到正则化器的权重。
CNTK 学习者只接受数字作为正则化器 (L1/L2) 值。如果你真的想添加你的自定义正则化器,你可以很容易地实现你自己的学习者。您将可以访问所需的渐变。您会找到几个关于如何实现您自己的 Learner 的示例 here。
首先,梯度不是标量,因此对其进行优化意义不大。梯度范数可能会增加你的损失。为此,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)
但是您必须针对您的问题调整噪音的大小。
这是执行此操作的代码:
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/ 博客 post 关于它