ニューラルネットワーク構造[非公開]
-
19-08-2019 - |
質問
現在、ニューラルネットワークライブラリを構築しています。簡単にするために、オブジェクトグラフとして作成しました。アレイベースのアプローチに移行することのパフォーマンス上のメリットを誰もが定量化できるかどうか疑問に思っています。私が今持っているものは、任意の複雑さに近いネットワークを構築するのに非常にうまく機能します。通常の(バックプロップされた)ネットワークとリカレントネットワークがサポートされています。トレーニング済みのネットワーク<!> quot; compile <!> quot;を検討しています。いくつかの<!> quot; simpler <!> quot;配列などの形式。
私は、実稼働環境にうまく展開するニューラルネットワークを構築する実践的なアドバイスや経験があるかどうかを確認したかっただけです。最終製品をオブジェクトグラフベースではなく配列ベースにすることに利点はありますか?
P.Sメモリフットプリントは速度よりも重要度が低くなります。
解決
これはすべて、使用している言語に依存します-C派生語を使用していると思います。
実装では、オブジェクトグラフアプローチがはるかに優れていることがわかりました。速度には多少のトレードオフがありますが、オブジェクトのルックアップコールよりもメンテナンスの容易さが重要です。これはすべて、トレーニング速度を求めるか、スピードを解くかによって異なります...トレーニング速度を最も心配していると思いますか
必要に応じて、オブジェクト呼び出しの問題の一部をいつでもマイクロ最適化することができます。
ネットワークをサブネット化する二次的な動機を考えると、オブジェクトベースであることはさらに重要だと思います。作業の一部を取り出すのがずっと簡単になります。
他のヒント
人々はAIでGPGPU技術の使用を開始し、ニューラルネットワークをマトリックス形式にすることで、一般的なグラフィックスカードのはるかに高速なマトリックス演算を活用できます。
しばらく経ちましたが、通常、速度はニューラルネットワークのトレーニング中にのみ問題になることを思い出します。
このようなライブラリを書く個人的な経験はありませんが、おそらくあなたが学ぶことができる人気のあるオープンソースプロジェクトにリンクできます。 (個人的には、これらの既存のライブラリのいずれかを使用します。)