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

2023-11-27 01:57:05 +08:00
 LeeReamond

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

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

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

1371 次点击
所在节点    机器学习
2 条回复
geelaw
2023-11-27 02:15:25 +08:00
通常来说只需要几乎处处可微,比如 ReLU 在 0 不可微(但是作为凸函数又有次梯度),这里就不展开了。

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

如果你是说自己用 C++ 写新的函数,那么你可以在 C++ 里实现函数和它的微分,并注册在一起,这样 PyTorch 计算微分的时候就知道怎么算了。我在微软的时候做过一个 TensorFlow 的扩展(三重线性插值),不过他们没有开源(提供了一个编译好的包可以下载),但似乎新版的 TF 已经有这个功能了所以现在已经没必要了。
dayeye2006199
2023-11-27 07:41:32 +08:00
你自定义损失函数的时候,如果就是组合基本算子,自动微分自然知道方向函数的形式是什么。
如果你完全自定义,则同时需要定义函数的反向形式。对框架来说,就是个黑盒。
框架不在乎 Analytical form ,它需要的就是两个函数 forward and backward

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/995394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX