如何在Tensorflow中实现重量噪声

时间:2016-08-02 18:11:03

标签: tensorflow

在Tensorflow中实施重量噪音的最佳方法是什么?我应该提取所有重量并应用噪音吗?或者我应该对渐变应用噪声?

1 个答案:

答案 0 :(得分:2)

重量噪声和梯度噪声不同。

有体重噪声,体重更新如下:

以及应用如下渐变的渐变噪声(有时称为Langevin噪声):

后者是随机梯度Langevin动态优化器的更新。

无论如何,在tensorflow中实现这两者都是相当简单的。

# Assuming you defined a graph and loss function `loss` and noise
# is drawn from normal distribution

# Weight noise:
optimizer = tf.train.GradientDescentOptimizer(lr)
grads_and_vars = optimizer.compute_gradients(loss, tf.trainable_variables())
train_ops = [tf.assign(v, 
                       v - lr*g + tf.random_normal(v.shape, stddev=0.1))
             for g, v in grads_and_vars]
train_op = tf.group(train_ops)

# Langevin noise:
optimizer = tf.train.GradientDescentOptimizer(lr)
grads_and_vars = optimizer.compute_gradients(loss, tf.trainable_variables())
train_ops = [tf.assign(v, 
                       v - lr*g - tf.sqrt(lr*T)*tf.random_normal(v.shape, stddev=1))
             for g, v in grads_and_vars]
train_op = tf.group(train_ops)