私は進化的ニューラルネットワークを研究しており、HNNを使っています。私の最初の疑問は、ハスケルに進化的アルゴリズムのフレームワークが既に存在するかどうかです。haskellでfmapにランダムジェネレータを使う関数を使う方法は?
私は現在、一般的な方法でニューラルネットワークの重みを変更する方法を見つけるのに苦労しています。現時点では、HMatrix
以上の重みのランダム関数(形式:(RandomGen g) => g -> a -> (b,g)
)をマップしようとしています。
既存のfmap(またはfold?)を修正して、できるだけ無作為な関数を利用できるようにしたいと思います。たとえば、入力にガウス雑音を追加したり追加したりしない機能があり、それをネットワーク全体に適用することができます。私が抱えている問題は、乱数ジェネレータを使用する方法です。
マップについては、私は現在やっている以下:
rmap :: (StdGen -> a -> (b,StdGen)) -> StdGen -> [a] -> ([b],StdGen)
rmap _ g [] = ([],g)
rmap f g (x:xs) = let (mapped, g') = rmap f g xs
(rVal, g'') = f g' x
in (rVal:mapped, g'')
これは私にはハックのように思える、と私はより多くのこのランダム性に対処する方法についていくつかのアドバイスがあるかもしれないより良いhaskellersのいくつかを期待していました効果的に?