10

私の大学のプロジェクトでは、クレジット カード取引が不正であるかどうかを分類できるニューラル ネットワークを作成しています。バックプロパゲーションでトレーニングしています。私はJavaでこれを書いています。私のコンピューターはクアッドコア i7 であるため、マルチスレッドを適用したいと考えています。トレーニングに何時間も費やし、ほとんどのコアがアイドル状態になっているのを見るのは私を悩ませます。

しかし、バックプロパゲーションにマルチスレッドを適用するにはどうすればよいでしょうか? Backprop は、ネットワークを介して誤差を後方に調整することによって機能します。もう一方のレイヤーを続行する前に、1 つのレイヤーを完了する必要があります。プログラムを変更してマルチコア バックグラウンドを実行する方法はありますか?

4

2 に答える 2

12

まず、バックプロパゲーションを使用しないでください。他にも多くのオプションがあります。RPROP (回復力のある伝播) を試すことをお勧めします。バックプロパゲーション アルゴリズムをそれほど大きく変更する必要はありません。学習率や運動量を指定する必要はありません。それはまるで、ニューラル ネットワーク内のすべての接続に対して個別の変数の学習率があるかのようです。

バックプロパゲーションにマルチスレッドを適用することについて。このトピックに関する記事を書きました。

http://www.heatonresearch.com/encog/mprop/compare.html

基本的には、多数のスレッドを作成し、トレーニング データを分割して、各スレッドの量がほぼ同じになるようにします。各スレッドの勾配を計算していますが、それらは削減ステップで合計されます。勾配が重みにどのように適用されるかは、使用される伝播トレーニング アルゴリズムによって異なりますが、重みの更新はクリティカル セクションで行われます。

重みよりもかなり多くのトレーニング サンプルがある場合、コードはクリティカル セクションの重みの更新よりもマルチスレッドの勾配計算に多くの時間を費やします。

上記のリンクでパフォーマンス結果の一部を提供します。それは本当に物事をスピードアップします!

于 2009-12-02T02:46:03.163 に答える
0

Java でより多くの CPU コアを使用するには、コードを変更せずに JVM のより多くのオプションを試すことができます。

  • -サーバ
  • -d64
  • -XX:-UseParallelGC

http://java.sun.com/javase/technologies/hotspot/vmoptions.jspのその他のオプション

于 2009-12-02T03:15:55.570 に答える