Haskell 哈斯克尔广告包

Haskell 哈斯克尔广告包,haskell,automatic-differentiation,Haskell,Automatic Differentiation,我想使用ad自动微分软件包在Haskell中学习神经网络权重。我已经找到了一些可能正好满足我需要的参数,但是我无法理解它们期望的第一个参数是什么。这一定是要优化的函数,但我不知道具体是什么形式。 他们有这样的签名: gradientDescent :: (Traversable f, Fractional a, Ord a) => (forall s. Mode s => f (AD s a) -> AD s a) -> f a -> [f a] 我发现对于所有的

我想使用ad自动微分软件包在Haskell中学习神经网络权重。我已经找到了一些可能正好满足我需要的参数,但是我无法理解它们期望的第一个参数是什么。这一定是要优化的函数,但我不知道具体是什么形式。 他们有这样的签名:

gradientDescent :: (Traversable f, Fractional a, Ord a) => (forall s. Mode s => f (AD s a) -> AD s a) -> f a -> [f a]
我发现
对于所有的s.
都意味着一个名为存在量词的东西,但仅此而已。
我的问题是,我如何将带有签名的代价函数(如
cost::[Double]->Double
(它获取权重列表)传递到此库?

因此第一个参数是一个函数,该函数位于
AD
的任何可遍历部分上,并传递给单个
AD
。对于可遍历的,我们可以从列表开始替换。该函数在模式中必须是多态的。所以,让我们忽略这一点,只是不要做一些指定模式的事情!这个函数显然是我们正在优化的。下一个参数是我们传入的初始值。我们现在也将其称为列表。结果是一个稳定的更优化的选择列表,以改进对目标的猜测

注意,只要
a
Num
fractive
的值,则
a
是所有模式
s
Num
fractive
的实例。所以只需编写一个从整数列表到单个整数的多态函数,以初始状态传递,您提供的函数将为您优化它

也就是说,不要将成本函数指定为两倍以上,而是将其指定为任何
Num
fractal
上的多态函数,并让库处理其余部分


您可能更愿意先尝试其他更基本的功能,如
diff
,以适应这种风格。

您的问题“所有s.在Haskell中的含义是什么?”?或者你的问题是“我如何使用广告包?”?我编辑了这篇文章,清楚地陈述了我的问题注:这里的“forall”实际上是一个“通用”量词,而不是存在主义。它只用于数据构造函数的存在主义目的。谢谢,我应该考虑重载,因为它是AD的基础。