你知道如何在CNTK中应用自定义的正则化函数吗?
特别是,我想在损失函数中加入模型函数对输入的导数,像这样
newLoss = loss + lambda * gradient_F(inputs)
其中F是模型学习到的函数,inputs是模型的输入。
我在CNTK中如何实现这个功能?我不知道如何访问输入的梯度,以及如何计算正则化器权重的梯度。
回答:
首先,梯度不是标量,因此优化它没有太大意义。梯度范数可能是一个有趣的添加到损失函数中的元素。要做到这一点,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)
但你需要根据你的问题调整噪声的尺度。