OCR用にNNを実装しました。私のプログラムは、認識の成功率が非常に高かったのですが、最近 (2 か月前)、パフォーマンスが 23% まで低下しました。データを分析した後、画像にいくつかの新しい不規則性が現れていることに気付きました (追加のねじれ、ノイズ)。つまり、私の nn は新しいデータを学習する必要がありましたが、古いデータを忘れないようにする必要もありました。それを達成するために、古いデータと新しいデータの混合で NN をトレーニングしました。私が試した非常にトリッキーな機能は、重みが大きく変化しないようにすることでした (最初は変更を 3% 以下に制限しましたが、後で 15% を受け入れました)。NN が古いデータを「忘れる」ことがないようにするには、他に何ができるでしょうか?
1 に答える
1
これは、現在活発に研究されている大きな問題です。
元の実装が元のデータセットから過剰に学習したため、新しいデータを効果的に一般化できないように思えます。これを防ぐために利用できる多くのテクニックがあります。
- ネットワークが問題を解決できる最小のサイズであることを確認してください。
- 何らかの形式の正則化手法を使用します。私のお気に入り (そして現在の研究者のお気に入り) の 1 つは、ドロップアウト手法です。基本的に、フィード フォワードを行うたびに、すべてのニューロンが通常の活性化ではなく、0 を返す可能性が 1 パーセントあります。他の一般的な手法には、L1、L2、および重量減衰が含まれます。
- 学習定数で遊んでください。おそらくあなたの定数は高すぎます。
- 最後に、説明した方法でトレーニングを続けます。すべてのデータポイント (新しいものと古いもの) のバッファーを作成し、ランダムに選択されたポイントでランダムな順序でトレーニングします。これにより、ネットワークが極小値に陥らないようにすることができます。
個人的には、反復ごとにニューロンが学習する方法を制限する前に、これらの手法を試してみます。Sigmoid または Tanh 活性化を使用している場合、.5 (sigmoid) または 0 (tanh) 付近の値は導関数が大きく、急速に変化します。これは、これらの活性化の利点の 1 つです。同様の効果を達成するには、目立たないようにします: 学習定数で遊んでください。ネットのサイズやサンプルの量はわかりませんが、学習定数を ~.01 にしてみてください。
于 2015-12-02T17:54:33.410 に答える