V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX  ›  机器学习

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

  •  
  •   LeeReamond · 2023-11-27 01:57:05 +08:00 · 1372 次点击
    这是一个创建于 393 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    如果你是说自己用 C++ 写新的函数,那么你可以在 C++ 里实现函数和它的微分,并注册在一起,这样 PyTorch 计算微分的时候就知道怎么算了。我在微软的时候做过一个 TensorFlow 的扩展(三重线性插值),不过他们没有开源(提供了一个编译好的包可以下载),但似乎新版的 TF 已经有这个功能了所以现在已经没必要了。
    dayeye2006199
        2
    dayeye2006199  
       2023-11-27 07:41:32 +08:00 via Android   ❤️ 1
    你自定义损失函数的时候,如果就是组合基本算子,自动微分自然知道方向函数的形式是什么。
    如果你完全自定义,则同时需要定义函数的反向形式。对框架来说,就是个黑盒。
    框架不在乎 Analytical form ,它需要的就是两个函数 forward and backward
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5204 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:18 · PVG 09:18 · LAX 17:18 · JFK 20:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.