0

到目前为止,我只通过使用预定义的损失函数、优化器、数据集等来使用 Keras/Tensorflow 来接触深度学习。

我现在有兴趣在 Keras/Tensorflow 中为分类模型创建自定义损失函数(尽管我的问题也与回归模型相关)。我在书籍和stackoverflow上看到了几个自定义损失函数的例子,创建这样的函数不是问题。

(我对损失函数有一些想法,但我的问题并不针对其中任何一个。)

但是,我知道要执行反向传播,需要计算我的损失函数相对于模型参数的梯度。所以反向传播需要计算损失与softmax输出的导数,softmax输出与前一层的导数,等等(通过链式法则)。

问题

  1. 用户/建模者是否需要在纸上计算第一组导数(损失函数与 softmax),然后将其显式实现为函数,以便它可以“插入”Keras/TF?我见过的所有示例都使用了 autodiff,我相信它在数值上近似于所有这些,并且消除了用户实现任何梯度计算的需要。我正在考虑的方法是指定损失与输出的梯度,然后让 autodiff 担心早期级别的所有其他梯度。我的猜测是这个问题的答案是否定的,因为我从未见过它记录在案。我想这正是 autodiff 所做的:自动区分而不用担心损失函数的函数形式。
  2. 即使不需要指定任何渐变,它甚至可能吗?
  3. 假设有可能,这样做是否可以通过提高输出层梯度的准确性来加速反向传播?

我得到的印象是您只需提供损失函数(自定义或预定义)。您让 autodiff 处理所有梯度计算,而不必担心函数形式。

4

0 回答 0