如何在 TensorFlow 中计算子梯度?

How do I calculate subgradients in TensorFlow?

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

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

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

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

不幸的是,Tensorflow 不计算子梯度,只计算梯度。 如此处所述 。 总结一下,当计算偏导数时,如果存在可微性问题,Tensorflow 只是简单地将这个导数置为零。

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