LeeReamond

深度学习任务中要求损失函数必须是可导的吗?

  •  
  •   LeeReamond · Nov 27, 2023 · 2070 views
    This topic created in 898 days ago, the information mentioned may be changed or developed.

    重看了一遍深度学习教程,有点疑惑,理论上来说必须可导才能反向传播对吧?

    不过 torch 很显然能自定义损失函数,这又是怎么回事,用户也没法保证自己定义出来的计算方法是可导的吧。

    以前学习属于是不求甚解了,这么多年说实话也就用过那些经典损失函数,没细相过这个问题。。

    2 replies    2023-11-27 07:41:32 +08:00
    geelaw
        1
    geelaw  
       Nov 27, 2023 via iPhone   ❤️ 2
    通常来说只需要几乎处处可微,比如 ReLU 在 0 不可微(但是作为凸函数又有次梯度),这里就不展开了。

    如果你是用 PyTorch 提供的函数自己设置损失函数,那么可微函数复合依然可微,就是链式法则、反向传播,实际上损失函数不过是计算图普通的一部分,计算微分的方法无甚差别。

    如果你是说自己用 C++ 写新的函数,那么你可以在 C++ 里实现函数和它的微分,并注册在一起,这样 PyTorch 计算微分的时候就知道怎么算了。我在微软的时候做过一个 TensorFlow 的扩展(三重线性插值),不过他们没有开源(提供了一个编译好的包可以下载),但似乎新版的 TF 已经有这个功能了所以现在已经没必要了。
    dayeye2006199
        2
    dayeye2006199  
       Nov 27, 2023 via Android   ❤️ 1
    你自定义损失函数的时候,如果就是组合基本算子,自动微分自然知道方向函数的形式是什么。
    如果你完全自定义,则同时需要定义函数的反向形式。对框架来说,就是个黑盒。
    框架不在乎 Analytical form ,它需要的就是两个函数 forward and backward
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
    ♥ Do have faith in what you're doing.