在Tensorflow中实现重量噪声的最佳方法是什么?我应该提取所有权重并施加噪声吗?还是应该将噪声应用于渐变?
权重噪声和梯度噪声是不一样的。
以下权重更新会产生权重噪声:
和梯度噪声(有时称为朗之万噪声)应用如下梯度:
后者是 Stochastic Gradient Langevin Dynamics 优化器的更新。
无论如何,在 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |