需要时,TensorFlow中的自动微分程序是否计算次梯度?如果有很多次梯度,那么将选择哪个作为输出?
我正在尝试在链接https://www.aclweb.org/anthology/P13-1045中实现该论文,该链接使用递归神经网络来执行有效的语言解析。目标函数使用铰链损失函数来选择最佳输出向量,这使函数不可微。我在急切的模式下使用TensorFlow(v1.12)对该模型进行编程,并使用自动微分计算梯度。每一批之后,我可以看到梯度值发生了变化,并且精度有所提高。片刻之后,它减少并且该过程继续。对于所有超参数配置,该模型根本不会收敛。
最小批量大小:256、512、1024;正则化参数-0.1、0.01、0.001;学习率-0.1,0.01,0.001;优化功能-梯度下降,阿达格勒,亚当;
在本文中,他们以非常抽象的方式描述了如何找到最佳函数的次梯度,这我还没有理解。一开始,我认为自动梯度计算会计算次梯度。但此刻,我开始怀疑,因为这似乎是唯一缺少的变量。
答案 0 :(得分:-1)
不幸的是,Tensorflow不计算子梯度,仅计算梯度。 如此处How does tensorflow handle non differentiable nodes during gradient calculation?所述。 总而言之,在计算偏导数时,如果存在可微性问题,Tensorflow只需将该导数设为零即可。
对于您在模型训练方面遇到的麻烦,没有通用规则说明如何调整超参数,因此,我建议对学习率(在几个时期内)进行网格搜索以找到良好的初始学习方法速率可为一种优化算法提供良好的结果。通常,当选择合适的初始学习率时,具有动量的ADAM或SGD会提供令人满意的结果。