gpt4 book ai didi

neural-network - 如何像 Caffe 一样在 tensorflow 中实现权重衰减

转载 作者:行者123 更新时间:2023-12-02 19:12:37 24 4
gpt4 key购买 nike

在Caffe中,我们有一个decay_ratio,通常设置为0.0005。然后所有可训练参数,例如 FC6 中的 W 矩阵将通过以下方式衰减:W = W * (1 - 0.0005)在我们对其应用渐变之后。

我浏览了许多 tensorflow 教程代码,但没有看到人们如何实现这种权重衰减以防止数值问题(绝对值非常大)

根据我的经验,在训练过程中经过 100k 次迭代后,我经常会遇到数值问题。

我还在 stackoverflow 上浏览了相关问题,例如, How to set weight cost strength in TensorFlow?然而,该解决方案似乎与 Caffe 中实现的有点不同。

有人有类似的担忧吗?谢谢。

最佳答案

当前的答案是错误的,因为它没有为您提供适当的“cuda-convnet/caffe 中的权重衰减”,而是 L2 正则化,这是不同的。

当使用纯 SGD(无动量)作为优化器时,权重衰减与在损失中添加 L2 正则化项是一样的。 当使用任何其他优化器时,情况并非如此。

权重衰减(不知道如何在这里 TeX,所以请原谅我的伪符号):

w[t+1] = w[t] - learning_rate * dw - weight_decay * w

L2 正则化:

loss = actual_loss + lambda * 1/2 sum(||w||_2 for w in network_params)

计算 L2 正则化中额外项的梯度给出 lambda * w从而将其插入到 SGD 更新方程中

dloss_dw = dactual_loss_dw + lambda * w
w[t+1] = w[t] - learning_rate * dw

与权重衰减相同,但混合了 lambdalearning_rate 。任何其他优化器,甚至是具有动量的 SGD,都会为权重衰减提供与 L2 正则化不同的更新规则!参见论文Fixing weight decay in Adam更多细节。 (编辑:据我所知,this 1987 Hinton paper 在第 10 页引入了“权重衰减”,字面意思是“每次权重更新时,它们的大小也会减少 0.4%”)

话虽如此,TensorFlow 中似乎还不支持“适当的”权重衰减。有几个问题正在讨论,特别是由于上述论文。

实现它的一种可能方法是编写一个操作,在每个优化器步骤之后手动执行衰减步骤。我目前正在做的另一种方法是使用额外的 SGD 优化器来进行权重衰减,并将其“附加”到您的 train_op 上。 。不过,这两种方法都只是粗略的解决方法。我当前的代码:

# In the network definition:
with arg_scope([layers.conv2d, layers.dense],
weights_regularizer=layers.l2_regularizer(weight_decay)):
# define the network.

loss = # compute the actual loss of your problem.
train_op = optimizer.minimize(loss, global_step=global_step)
if args.weight_decay not in (None, 0):
with tf.control_dependencies([train_op]):
sgd = tf.train.GradientDescentOptimizer(learning_rate=1.0)
train_op = sgd.minimize(tf.add_n(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)))

这在某种程度上利用了 TensorFlow 提供的簿记功能。请注意 arg_scope负责将每一层的 L2 正则化项附加到 REGULARIZATION_LOSSES graph-key,然后我使用 SGD 进行总结和优化,如上所示,它对应于实际的权重衰减。

希望有所帮助,如果有人为此获得了更好的代码片段,或者 TensorFlow 更好地实现了它(即在优化器中),请分享。

编辑:另请参阅 this PR刚刚合并到 TF 中。

关于neural-network - 如何像 Caffe 一样在 tensorflow 中实现权重衰减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38882629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com