【问题标题】:How do I calculate subgradients in TensorFlow?如何在 TensorFlow 中计算次梯度?
【发布时间】:2019-04-01 19:45:31
【问题描述】:

TensorFlow 中的自动微分过程是否在需要时计算次梯度?如果有很多次梯度,那么选择哪一个作为输出?

我正在尝试实现链接https://www.aclweb.org/anthology/P13-1045 中的论文,它使用递归神经网络来执行有效的语言解析。目标函数使用铰链损失函数来选择最佳输出向量,这使得函数不可微。我在 Eager 模式下使用 TensorFlow (v1.12) 对模型进行编程,并使用自动微分来计算梯度。每批后,我可以看到梯度值发生变化,并且精度略有提高。一段时间后,它会减少,这个过程会继续。对于所有超参数配置,该模型根本不会收敛。

小批量大小:256、512、1024;正则化参数 - 0.1、0.01、0.001;学习率 - 0.1、0.01、0.001;优化函数——梯度下降、adagrad、adam;

在论文中,他们以非常抽象的方式描述了如何为最优函数找到次梯度,我还没有理解。一开始我的观点是自动梯度计算计算次梯度。但此刻,我开始怀疑,因为这似乎是唯一缺少的变量。

【问题讨论】:

    标签: tensorflow tensorflow-gradient


    【解决方案1】:

    不幸的是,Tensorflow 不计算次梯度,只计算梯度。 正如这里所解释的 How does tensorflow handle non differentiable nodes during gradient calculation? 。 总而言之,在计算偏导数时,如果存在可微性问题,Tensorflow 只是简单地将这个导数设为零。

    至于您在训练模型时遇到问题,没有一般规则说明如何调整超参数,因此,我建议对学习率(在几个时期)进行网格搜索,以找到良好的初始学习率,它为优化算法之一提供了良好的结果。通常,在选择正确的初始学习率时,具有动量的 ADAM 或 SGD 会提供令人满意的结果。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2019-11-16
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多