ニューラルネットワークの重みの収束


10

500回繰り返してもニューラルネットワークの重みが収束しない状況になりました。ニューラルネットワークには、1つの入力レイヤー、1つの非表示レイヤー、および1つの出力レイヤーが含まれています。それらは、入力層に約230ノード、非表示層に9ノード、出力層に1出力ノードです。早期停止条件(たとえば、100回の反復後にニューラルネットワークのトレーニングを停止する)を実行する場合、これはモデルにどのような影響を与えますか?

また、ニューラルネットワークの重みが収束していない場合の業界標準の作業標準について教えてください。


データは適切に正規化されていますか?これは通常、そのような動作の理由です。
サシケロ2013

通常、非表示層のニューロンの数は、入力層と同じサイズでなければなりません。9ニューロンは小さすぎると思います。200〜300個のニューロンに増やしようとしましたか?
2013

@sashkelloはいデータは適切に正規化されます。
学習者2013

1
@juampa非表示層に9つのノードがある理由はありません。非表示層にノードを追加すると、ネットワークが複雑になり、データが過剰になると感じました。
学習者2013

3
あなたはもう少し説明をする必要があります。あなたが解決している問題は何ですか?トレーニングデータポイントはいくつありますか?収束しないとはどういう意味ですか?-(トレーニングセットの)パフォーマンスが悪い、または重みが収束していないということですか?重みが収束している場合は、低い学習率または漸減する学習率を使用する必要があります。また、ベースラインとしてロジスティック/線形回帰を使用することもできます。最後に、入力はどの程度相関していますか?それらが非常に相関している場合、正規化では不十分であり、対角化(別名PCA)を検討する必要があります。
seanv507 2013

回答:


13

尋ねるべき多くの質問があります:

  • 各層に適切な数のニューロンがありますか
  • 適切なタイプの伝達関数を使用していますか?
  • 適切なタイプの学習アルゴリズムを使用していますか
  • 十分なサンプルサイズがありますか
  • 参考になるように、サンプルが互いに適切な関係にあることを確認できますか?(冗長ではない、関連する次元などの...)

エフェメリスの方法で何を与えることができますか?データの性質について教えてください。

ニューラルネットワークの勾配ブーストツリーを作成できます。

あなたが早く止まったらどうなるかと尋ねました。

あなたは自分で試すことができます。ランダムに初期化された重みで開始し、指定された反復回数で停止する300xを実行します。100としましょう。その時点で、アンサンブルエラー、トレーニングサブセットエラー、およびテストセットエラーを計算します。繰り返す。エラーが何であるかを示す300個の値を取得したら、100回の学習の反復が与えられた場合のエラー分布のアイデアを得ることができます。必要に応じて、他のいくつかの学習値でその分布をサンプリングできます。200、500、および1000回の反復をお勧めします。これにより、SNRが時間とともにどのように変化するかがわかります。SNR対反復回数のプロットは、「崖」または「十分に良い」についてのアイデアを提供します。時々エラーが崩壊する断崖があります。その時点でエラーは許容できる場合があります。

システムが100回未満の反復で一貫して収束するには、「比較的単純な」データまたは「かなり良い」運が必要です。どちらも再現性に関するものではなく、一般化もできません。

重みが収束していて、エラーが特定のしきい値を下回っていないのではないかと考えているのはなぜですか。投票のパラドックスについて聞いたことがありますか?(リンク)システムに周期的な相互作用がある場合(ニューラルネットワークでのフィードバックなど)、投票のパラドックス(結合された変更)を持つことができます。重みだけでネットワークの収束の十分な指標になるかどうかはわかりません。

ウェイトはスペースと考えることができます。3次元以上ですが、それでも空間です。その空間の「重心」には、「最適な」領域があります。重心から離れていると、フィット感が低下します。ウェイトの現在の設定は、その空間の1つのポイントと考えることができます。

今、あなたは「良い」が実際にどこにあるのか分かりません。あなたが持っているのは地元の「斜面」です。あなたのポイントが今ある場所で与えられた局所的な「より良い」に向かって勾配降下を行うことができます。それはあなたに「普遍的」をよりよく伝えませんが、ローカルは何もないよりはましです。

それで、あなたは反復を開始し、より良い谷に向かって下り坂を歩きます。完了したと思うまで繰り返します。多分あなたの重みの値は大きいです。多分彼らはあちこちで跳ねています。コンピューティングが「時間がかかりすぎている」かもしれません。あなたはやりたいです。

では、自分の居場所が「十分」であるかどうかをどのようにして知るのでしょうか。

以下は、実行できる簡単なテストです。

データの30個の均一なランダムサブセット(それぞれ数パーセントのデータなど)を取得し、それらのネットワークを再トレーニングします。それははるかに速いはずです。それらが収束するのにかかる時間を観察し、それを大きなセットの収束履歴と比較します。これらのサブセットのデータ全体についてネットワークのエラーをテストし、そのエラーの分布が大きなエラーとどのように比較されるかを確認します。次に、サブセットサイズをデータの最大5%まで増やして繰り返します。これがあなたに教えることを見てください。

これは、ミツバチが偵察に基づいて決定を行う方法をモデル化した、粒子群最適化のバリエーションです(参照を参照)。

重みが収束しないとどうなるかを尋ねました。

ニューラルネットワークは1つのツールです。それらは唯一のツールではありません。他にもあります。それらの1つを使用することを検討します。

私は情報基準の観点から作業しているので、重み(パラメーター数)とエラーの両方を調べます。あなたはそれらの1つを試すかもしれません。

便利な前処理にはいくつかの種類があります。センターとスケール。主成分を使用して回転します。主成分の固有値を調べる場合は、スクリープロットルールを使用してデータの次元を推定できます。次元を小さくすると、収束が向上します。「基礎となる物理学」について何か知っている場合は、データを平滑化またはフィルタリングしてノイズを除去できます。収束は、システムのノイズに関する場合があります。

圧縮センシングのアイデアは興味深いと思います。一般化を失うことなく、一部のシステムの根本的なサブサンプリングを可能にします。ブートストラップの再サンプリングされた統計とデータの分布を調べて、トレーニングセットがサブサンプリングのどのレベルでサブサンプリングされるかを判断します。これにより、データの「健全性」をある程度測定できます。

時には彼らが収束しないのは良いことです

投票のパラドックスについて聞いたことがありますか?あなたはそれを双方向の行き詰まりのより高い数のいとこと考えるかもしれません。ループです。2人投票のパラドックスでは、最初の人は候補者「A」を望み、2番目の人は候補者「B」を望んでいます(またはAではないなど)。重要な部分は、それをループと考えることができるということです。

ループはニューラルネットワークで重要です。フィードバック。再帰。これにより、パーセプトロンはXORのような問題を解決できるようになりました。これはループを作成します。ループは投票のパラドックスのように機能する場合があり、無限の反復があった場合、ループは重みを変更し続けます。重要なのは個々の重みではなく、ループ内の重みの相互作用であるため、これらは収束することを意図していません。

注意:

500回の反復のみを使用すると問題になることがあります。私はNNを持っていて、10,000回の反復でやっと十分でした。「十分」になる反復回数は、すでに示したように、データ、NNトポロジー、ノード伝達関数、学習/トレーニング関数、さらにはコンピューターハードウェアにも依存します。「十分」または「多すぎる」反復があると言う前に、それらすべてが反復数とどのように相互作用するかを十分に理解する必要があります。時間、予算、トレーニングが終了したときにNNで何をしたいかなど、他の考慮事項も考慮する必要があります。

Chen、RB、Chang、SP、Wang、W.、&Wong、WK、(2011、September)。Particle Swarm Optimization Methods(preprint)による最適な実験計画、2012年3月25日、http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdfから取得


2

私にとってあなたの問題が何であるかを言うのは難しいです。考慮すべき1つのポイントは、使用する具体的な実装です。具体的には、どのような最適化アルゴリズム。ネットワークの収束に本当に時間がかかり、何らかの形の確率的勾配降下法(またはミニバッチ)を使用している場合、ネットワークがプラトー(エネルギー/エラー関数が非常に平坦な領域)にある可能性があります。そのため、勾配は非常に低くなり、収束します)。

その場合は、勾配の大きさをチェックして、これが当てはまるかどうかを確認してください。この問題に対処するには、勾配に運動量を加えるなど、さまざまな手法があります。

取引のテクニックとトリックの詳細な概要については、Yann LeCunによるこの(必ずお読みください)ペーパーをご覧ください


1

勾配が限界を超えていないことを確認してください。勾配がゼロになっている可能性もあります。これは、グラデーションの爆発とグラデーションの消失の問題として広く知られています。

1つの可能な解決策は、AdaGradやAdamなどの適応オプティマイザを使用することです。

単純なニューラルネットワークをトレーニングしているときに、ニューラルネットワークを使い始めたときに、同様の問題に直面していました。

いくつかの参照:https : //en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA


0

入力が非常に相関していたためか、収束が遅い多くのデータセットを使用しました。

私は自分のC ++ NNアナライザーを作成しました。それを使用して、各重みの学習率を変えることができます。各エッジの各重量に対して、私はいくつかを助ける2つのことをします。

まず、各学習率に[0,1]から均一に分布した乱数を掛けます。それが相関の問題に役立つと思います。

もう1つのトリックは、各エッジで現在の勾配を前の勾配と比較することです。勾配がパーセンテージでかろうじて低下した場合、そのエッジの学習率に最大5を掛けます。

私はこれらのトリックのどちらにも特別な理由はありませんが、かなりうまくいくようです。

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.