2013-02-03 73 views
4

我想使用廣告自動分化包來學習Haskell中的神經網絡權重。我發現一些functions可能只是我需要的,但我無法弄清楚他們期望作爲第一個參數。它必須是優化的功能,但我不知道確切的形式。 他們的簽名是這樣的:Haskell廣告包

gradientDescent :: (Traversable f, Fractional a, Ord a) => (forall s. Mode s => f (AD s a) -> AD s a) -> f a -> [f a] 

我發現forall s.指名爲存在量詞,但沒有更多的東西。 我的問題是,我怎麼能通過我的成本函數與cost :: [Double] -> Double(它需要權重列表)到這個庫的簽名?

+1

那麼你的問題「Haskell中的'forall s.'是什麼意思?」?或者是您的問題「我如何使用廣告包?」?當你在SO上發帖時,實際陳述這個問題是很好的。 –

+0

我編輯了帖子,以清楚地說明我的問題 – laci37

+0

注意:這裏'forall'實際上是一個「通用」量詞,而不是存在。它僅用於數據構造函數的存在目的。 –

回答

4

因此,第一個參數是任何可穿越AD到單個AD的函數。對於遍歷來說,我們可以用類似於列表的東西來替代。該函數在模式中必須是多態的。所以讓我們忽略它,只是不做一些指定模式的東西!這個功能顯然是我們正在優化的東西。下一個參數是我們傳入的初始值。我們現在還將這個列表稱爲一個列表。結果是一系列穩定更優化的選擇,以改善我們目標的猜測。

注意AD s a是所有模式sNumFractional一個實例,只要aNumFractional。因此,只需從整數列表中將多態函數寫入一個整數,然後傳遞一個初始狀態,並且您提供的函數將爲您優化它。

I.e.請勿將您的成本函數指定爲超過雙精度,但在任何NumFractional中將其指定爲多態,並讓圖書館負責其餘部分!

您可能更願意先嚐試其他更基本的功能,例如diff,以便習慣這種風格。

+0

謝謝,我應該考慮過載,因爲它是AD的基礎。 – laci37