4

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私の質問は、 (重みのリストを取得する)のような署名を使用してコスト関数をこのライブラリに渡すにはどうすればよいかということです。

4

1 に答える 1

4

したがって、最初の引数はAD、単一のへのトラバース可能な関数ADです。トラバース可能なものについては、最初にリストのようなものに置き換えることができます。その関数はモードで多形でなければなりません。それでは、それを無視して、モードを指定するようなことはしないでください。この関数は明らかに私たちが最適化しているものです。次の引数は、渡す初期値です。ここでは、これをリストと呼びます。その結果、ターゲットの推測を改善するための、着実に最適化された選択肢のリストが作成されます。

は、およびである限り、すべてのモードAD s aのインスタンスであることに注意してください。したがって、整数のリストから単一の整数にポリモーフィック関数を記述し、初期状態を渡すだけで、提供した関数がそれを最適化します。NumFractionalsaNumFractional

つまり、コスト関数をdouble以上として指定するのではなく、anyNumおよびFractional、に対して多型として指定し、残りはライブラリに任せてください。

最初のような他のより基本的な機能を試して、このスタイルに慣れることをお勧めしますdiff

于 2013-02-03T19:10:45.763 に答える