2

それらのより良い理解/直感を得るために、PythonでいくつかのタイプのANNアルゴリズムをコーディングしようとしています。私の目標は実用的ではなく教育的なものであるため、Scikit-learn やその他のすぐに使用できるパッケージは使用していません。問題の例として、MNIST データベース ( http://yann.lecun.com/exdb/mnist/ ) を使用します。

単純な 1 隠れ層 NN と畳み込み NN を実行しましたが、2 次の最適化方法を回避することに成功したため、ヘッセ行列を計算しませんでした。ただし、その後、ハイパーパラメーターを最適化するために、ヘッシアンの計算が必須であるベイジアン NN に行き着きました。

私の完全に接続されたネットワークには、784 の入力、300 の隠れユニット、および 10 の出力ユニットがあります。これらはすべて、238200 の重み (+ バイアス) になります。Hessian (勾配の外積による) を計算または概算しようとすると、Python は "MemoryError" を通知します。重みの数を 40000 まで減らしてエラー メッセージが表示されなくても、数分後にコンピューターが動かなくなります。私が理解しているように、問題は望ましい行列が非常に巨大であることです。ベイジアン NN に関するいくつかの記事を調べたところ、作成者は通常、10 または 20 以下の入力と隠れユニットのネットワーク アーキテクチャを使用しているため、パラメーターが私よりもはるかに少ないことに気付きました。しかし、私はそのような制限の明確な声明を見たことがありません.

MNIST の NN にベイジアン アプローチを適用するにはどうすればよいですか?

より一般的に: この (238200 の重み) またはさらに大きなアーキテクチャでベイジアン アプローチを適用することは可能ですか? それとも、比較的小規模なネットワークに適しているのでしょうか?

4

1 に答える 1

2

Hessian を近似し、(かなりの) メモリを節約する傾向がある勾配上昇の BFGS アルゴリズムを試すことができます。Scipyに実装があります。

于 2015-11-06T16:27:40.830 に答える