バックプロパゲーション手法の違い


17

楽しみのためだけに、ニューラルネットワークを開発しようとしています。

さて、逆伝播のために2つのテクニックを見ました。

最初のものは、ここと他の多くの場所でも使用されてます。

それは何ですか:

  • 各出力ニューロンのエラーを計算します。
  • それをネットワークに逆伝播します(各内部ニューロンのエラーを計算します)。
  • 次の式で重みを更新します(ここで、重みの変化、学習速度、シナプスから入力を受信し、シナプスで送信される出力であるニューロンのエラー)。
  • データセットの各エントリに対して、必要な回数だけ繰り返します。

ただし、このチュートリアルで提案されているニューラルネットワーク(GitHubでも入手可能)は、異なる手法を使用しています。

  • エラー関数を使用します(他の方法にはエラー関数がありますが、トレーニングには使用しません)。
  • 重みから開始して最終エラーを計算できる別の関数があります。
  • (勾配降下による)その関数を最小化します。

さて、どのメソッドを使用する必要がありますか?

最初の1つが最も使用されていると思います(それを使用して別の例を見ていたため)

特に、私は知りません:

  • (二次関数を使用していないため)局所的最小値の影響を受けにくいですか?
  • 各重みの変動はその出力ニューロンの出力値の影響を受けるため、データセットのエントリは、出力ニューロンだけでなくニューロンでより高い値を生成するだけで、他のエントリよりも重みに影響しませんか?

今、私は最初の手法を好むのです。なぜなら、実装がより簡単になり、考えやすくなるからです。

しかし、もしそれが私が言及した問題を持っているなら(そうしないことを望みます)、2番目の方法でそれを使用する実際の理由はありますか?

回答:


6

2つの例は、基本的に同じ操作を示しています。

  • どちらの場合も、ネットワークは、出力で計算された逆伝播二乗誤差を使用して勾配降下法で学習されます。
  • 両方の例では、ノードのアクティブ化にロジスティック関数を使用しています(ロジスティック関数の導関数は、明らかに非常に簡単sですs(1 - s)。この導関数は、非常に広く使用された理由の一部です(最近では、ReLUアクティベーション関数、特に畳み込みネットワークで)。
  • 最初の方法も運動量を使用します。

私が見ることができる主な違いは、最初のケースでは逆伝播が反復的であるのに対して、2番目の例ではバッチモードで実行されることです。

Welch Labsによるシリーズの最後のビデオでは、ヘッシアン(重みに関する誤差の2次導関数の行列)を計算することにより、コスト関数の最小値を見つけるという利点を提供する準ニュートン法を紹介しています。ただし、これはリンゴとオレンジを比較するような感じです。バニラグラデーション降下では2次情報は使用されません。

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