TensorflowのResNetの実装では、分散スケーリングイニシャライザーを使用していることがわかります。xavierイニシャライザーも一般的です。私はこれについてあまり経験がありませんが、実際にはどちらが良いですか?
TensorflowのResNetの実装では、分散スケーリングイニシャライザーを使用していることがわかります。xavierイニシャライザーも一般的です。私はこれについてあまり経験がありませんが、実際にはどちらが良いですか?
回答:
Xavier GlorotとYoshua Bengioが「ディープフィードフォワードニューラルネットワークのトレーニングの難しさを理解する」で最初に提案したXavier 初期化は、レイヤーの出力の分散をその入力の分散と等しくしようとする重み初期化手法です。 。このアイデアは実際には非常に有用であることが判明しました。当然、この初期化はレイヤーのアクティベーション機能に依存します。GlorotとBengioは、彼らの論文で、ロジスティックS字型アクティベーション関数を検討しました。これは、現時点ではデフォルトの選択でした。
その後、シグモイド活性化はReLuを上回りました。これは、勾配の消失/爆発の問題を解決できるためです。その結果、この新しいアクティベーション関数に同じアイデア(アクティベーションの分散のバランス)を適用した新しい初期化手法が登場しました。Kaiming Heにより「整流器の奥深くへの探求:ImageNet分類での人間レベルのパフォーマンスの向上」で提案され、現在ではHe初期化と呼ばれています。
テンソルフローでは、Heの初期化はvariance_scaling_initializer()
関数(実際にはより一般的な初期化子ですが、デフォルトではHeの初期化を実行します)で実装されますが、Xavierの初期化子は論理的にxavier_initializer()
です。
要約すると、機械学習の実践者の主な違いは次のとおりです。
tanh()
アクティベーション機能については、どの初期化機能を使用する必要があります。
分散スケーリングは、Xavierの一般化です:http : //tflearn.org/initializations/。どちらも、グラデーションのスケールがすべてのレイヤーで類似しているという原則に基づいて動作します。Xavierは、時間の実験的テストに耐えているため、おそらくより安全に使用できます。分散スケーリング用の独自のパラメーターを選択しようとすると、トレーニングが阻害されたり、ネットワークがまったく収益を得られなくなる可能性があります。