1
ニューラルネットワークのトレーニングで非常に小さい値またはNaN値が表示される
Haskellでニューラルネットワークアーキテクチャを実装し、MNISTで使用しようとしています。 hmatrix線形代数のパッケージを使用しています。私のトレーニングフレームワークは、pipesパッケージを使用して構築されています。 私のコードはコンパイルされ、クラッシュしません。ただし、問題は、レイヤーサイズ(たとえば、1000)、ミニバッチサイズ、および学習率の特定の組み合わせによってNaN、計算に値が生じることです。いくつかの検査の後、非常に小さな値(次数1e-100)が最終的にアクティベーションに表示されることがわかります。しかし、それが起こらなくても、トレーニングはまだ機能しません。その損失や精度に改善はありません。 私は自分のコードをチェックして再チェックしましたが、問題の根本が何であるかについて途方に暮れています。 各レイヤーのデルタを計算するバックプロパゲーショントレーニングは次のとおりです。 backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) …