Julia Flux梯度中空元组中的函数的语法是什么



我找不到Julia Flux的gradient函数的参考文档,只有几个教程示例。

我了解gradient是如何用于计算函数的梯度的,例如语法

f(x, y) = x^2 + y^2
df(x, y) = gradient(f, x, y)

将基本上产生CCD_ 3。然而,稍后教程使用了以下语法,没有任何解释:

gs = gradient(() -> loss(x, y), Flux.params(W, b))

我认为有一些方法可以从数学的角度解释() -> loss(x, y)的梯度,但我不确定这是否就是这里发生的事情。那么这个匿名函数是什么呢?为什么gradient是这样设计的呢?请提供gradient完整文档的链接。

首先,指向gradient文档的链接:https://fluxml.ai/Zygote.jl/dev/#Zygote.gradient

gradient知道返回函数中引用但未作为参数传递的变量的导数。问题中的例子就是这样。它在手册中被称为隐式。要区分的参数以Params类型的值传递。在该示例中,Params是由辅助函数Flux.params创建的。当使用隐式样式时,函数将作为零参数函数传递(请参阅手册(。

关于语法本身(与gradient一起使用无关(:

() -> loss(x, y)是一个匿名函数(有时在函数式编程上下文中称为lambda函数(。本质上类似于一个常规函数,但可一次性使用,无需为选择名称而烦恼。

关于这些的Julia手册链接是https://docs.julialang.org/en/v1/manual/functions/#man-匿名函数

以下是更多示例:

带1个参数:map(x -> x^2 + 2x - 1, [1, 3, -1])

有两个参数:(x,y) -> 2*x + y

无参数:() -> time()

最新更新