私は、weight_regularizerがKerasで利用できなくなり、代わりにアクティビティとカーネル正則化が存在することに気づきました。私が知りたいのですが:
- カーネルとアクティビティレギュラライザーの主な違いは何ですか?
- 私は使用することができactivity_regularizerの代わりにweight_regularizer?
回答:
アクティビティ正則化はネットの出力の関数として機能し、主に非表示のユニットを正則化するために使用されますが、weight_regularizerは、その名前が示すように、重みを処理して減衰させます。基本的に、正則化損失は、出力(activity_regularizer
)または重み(weight_regularizer
)の関数として表すことができます。
ドキュメントからはあまり明確ではありませんが、新しいkernel_regularizer
ものが置き換えられweight_regularizer
ます。
の定義からkernel_regularizer
:
kernel_regularizer:
kernel
重み行列に適用される正則化関数(正則化を参照)。
そしてactivity_regularizer
:
activity_regularizer:レイヤーの出力(その「アクティブ化」)に適用されるRegularizer関数。(正則化を参照)。
重要な編集:activity_regularizerには、Kerasのバージョン2.1.4でのみ修正されたバグがあることに注意してください(少なくともTensorflowバックエンドでは)。実際、古いバージョンでは、アクティビティレギュラライザー関数は、出力(意図したとおりのレイヤーの実際のアクティブ化)に適用されるのではなく、レイヤーの入力に適用されます。したがって、古いバージョンのKeras(2.1.4より前)を使用している場合は、アクティビティの正規化が意図したとおりに機能しない可能性があることに注意してください。
5か月前、FrançoisCholletがアクティビティ正則化の修正を提供しました。これはKeras2.1.4に含まれていました。
この回答は少し遅れていますが、将来の読者には役立ちます。したがって、彼らが言うように、必要性は発明の母です。私はそれが必要なときにだけそれを理解しました。
上記の答えは、実際には違いを述べていません。両方が重みに影響を与える原因になるので、重み自体に対する罰とレイヤーの出力の違いは何ですか?
答えは次のとおりです。ネットの重みが小さくて、[-0.3]から[+0.3]の範囲である場合がありました。
だから、私は本当に彼らを罰することはできません、彼らには何の問題もありません。カーネル正則化は役に立たない。ただし、レイヤーの出力は100秒で巨大です。
レイヤーへの入力も小さく、常に1未満であることに注意してください。しかし、これらの小さな値は、それらの大規模な出力を生成するような方法で重みと相互作用します。ここで、必要なのはカーネル正則化ではなく、アクティビティ正則化であることに気付きました。これで、私はそれらの大きな出力のレイヤーを罰しています、重み自体が小さいかどうかは気にしません、私はそれがそのような状態に達するのを防ぎたいだけですこれは私のシグモイド活性化を飽和させ、消失のような他の多くの問題を引き起こします勾配と停滞。
kernel_regularizer
交換について完全に確信していweight_regularizer
ますか?