web-dev-qa-db-ja.com

RNN / lstm RNNでバッチ正規化を使用することは正常ですか?

私はディープラーニングの初心者です。通常のニューラルネットでは、アクティブ化する前にバッチノルムを使用しているため、適切な重みの初期化への依存度が低くなります。私がそれを使用すると、RNN/lstm RNNにも同じように機能するでしょうか。誰かそれを使った経験はありますか?ありがとうございました。

14
Peter Deng

RNNに適用されるバッチ正規化は、CNNに適用されるバッチ正規化に似ています。BNが適用された後も、レイヤーの反復/畳み込みプロパティが保持されるように統計を計算します。

CNNの場合、これは、ミニバッチだけでなく、2つの空間次元についても関連する統計を計算することを意味します。言い換えると、正規化はチャンネルの次元全体に適用されます。

RNNの場合、これは、ミニバッチと時間/ステップディメンションに関する関連統計を計算することを意味します。したがって、正規化はベクトルの深さに対してのみ適用されます。また、これは、変換された入力(つまりBN(W_x * x)などの垂直方向)のみをバッチ正規化することを意味します。

9
velocirabbit

いいえ、統計はバッチごとに計算されるため、リカレントニューラルネットワークでバッチ正規化を使用することはできません。これは、ネットワークのリカレント部分を考慮していません。重みはRNNで共有され、各「繰り返しループ」のアクティブ化応答は、完全に異なる統計特性を持つ場合があります。

これらの制限を考慮に入れるバッチ正規化に似た他の手法が開発されました。たとえば、 レイヤー正規化 などです。 LSTMレイヤーの再パラメーター化もあり、たとえば Coijmaans et al。2016による再帰バッチ正規化 で説明されているように、バッチ正規化を使用できます。

8

非回帰ネットワーク(convnetまたはnot)でBNを実行すると、各レイヤーは入力スケールと平均を調整し、各レイヤーの入力分布が変化し続けないようにします(これは、BNペーパーの著者が主張していることです) BNの利点)。

RNNの繰り返し出力に対してこれを行うことの問題は、着信分布のパラメーターがすべてのタイムステップ(時間を介した逆伝播、つまりBPTTの効果的なレイヤー)間で共有されることです。したがって、分布はBPTTの時間レイヤー全体で固定されます。時系列全体で(ランダムではない方法で)変化するデータの構造がある可能性があるため、これは意味をなさない場合があります。たとえば、時系列が文の場合、特定の単語が最初または最後に現れる可能性がはるかに高くなります。したがって、ディストリビューションを修正すると、BNの効果が低下する可能性があります。

3
DankMasterDan

これは一般的には使用されていませんが、 この論文 2017から、入力から非表示への変換と非表示から非表示への変換でバッチ正規化を使用する方法が示され、いくつかの問題でより速く一般化されます。

また、より多くの機械学習指向のQ&Aについては、Stack Exchange Cross Validated を確認してください。

2
David Taub

答えは「はい」と「いいえ」です。

なぜそうなのか、論文 layer normalization によると、セクションでは、RNNでのBNの使用法を明確に示しています。

なんでだめなの?各タイムステップでの出力の分布は、BNを実施するために保存および計算する必要があります。すべての例が同じ長さになるようにシーケンス入力をパディングすることを想像してください。したがって、予測ケースがすべてのトレーニングケースよりも長い場合、あるタイムステップで、SGDトレーニングプロシージャから要約された出力分布の平均/標準がありません。

一方、少なくともKerasでは、BNレイヤーは垂直方向の正規化、つまりシーケンス出力のみを考慮すると思います。水平方向、つまり、hidden_​​status、cell_statusは正規化されていません。私がここで間違っていたら訂正してください。

複数層のRNNでは、層の正規化トリックの使用を検討できます。

0
Bs He