時折、一部のモデルがSpatialDropout1D
の代わりにDropout
。たとえば、品詞タグ付けニューラルネットワークでは、以下を使用します。
model = Sequential()
model.add(Embedding(s_vocabsize, EMBED_SIZE,
input_length=MAX_SEQLEN))
model.add(SpatialDropout1D(0.2)) ##This
model.add(GRU(HIDDEN_SIZE, dropout=0.2, recurrent_dropout=0.2))
model.add(RepeatVector(MAX_SEQLEN))
model.add(GRU(HIDDEN_SIZE, return_sequences=True))
model.add(TimeDistributed(Dense(t_vocabsize)))
model.add(Activation("softmax"))
Kerasのドキュメントによると、次のように書かれています。
このバージョンはDropoutと同じ機能を実行しますが、個々の要素ではなく1Dフィーチャマップ全体をドロップします。
ただし、1Dフィーチャのエントリの意味を理解できません。具体的には、SpatialDropout1D
quora で説明した同じモデル内。 Quoraと同じモデルを使用して、誰かがこの概念を説明できますか?
また、どのような状況でSpatialDropout1D
の代わりにDropout
?
_SpatialDropout1D
_を理解するには、ノイズシェイプの概念に慣れる必要があります。プレーンバニラドロップアウトでは、各要素は個別に保持またはドロップされます。たとえば、テンソルが_[2, 2, 2]
_の場合、ランダムなコインフリップ(特定の「ヘッド」確率)に応じて、8つの要素のそれぞれをゼロにすることができます。合計で、8つの独立したコインフリップがあり、_0
_から_8
_までの任意の数の値がゼロになる場合があります。
時にはそれ以上のことをする必要があります。たとえば、whole sliceを_0
_軸に沿ってドロップする必要があるかもしれません。この場合の_noise_shape
_は_[1, 2, 2]
_であり、ドロップアウトには4つの独立したランダムコインフリップのみが含まれます。最初のコンポーネントは一緒に保持されるか、一緒にドロップされます。ゼロ要素の数は、_0
_、_2
_、_4
_、_6
_、または_8
_です。 _1
_または_5
_にはできません。
これを表示する別の方法は、入力テンソルが実際には_[2, 2]
_であるが、各値が倍精度(または多精度)であると想像することです。レイヤーは、途中でバイトをドロップする代わりに、マルチバイト値全体をドロップします。
上記の例は説明のためだけのものであり、実際のアプリケーションでは一般的ではありません。より現実的な例は次のとおりです:shape(x) = [k, l, m, n]
and _noise_shape = [k, 1, 1, n]
_。この場合、各バッチとチャネルコンポーネントは独立して保持されますが、各行と列は一緒に保持されるか、保持されません。つまり、whole_[l, m]
_feature mapは保持または削除されます。
これは、特に初期畳み込み層で、隣接するピクセルの相関を考慮するために行うことができます。効果的には、ピクセルがフィーチャマップ全体で隣接ピクセルと共適応するのを防ぎ、他のフィーチャマップが存在しないかのように学習させる必要があります。これはまさに_SpatialDropout2D
_が行っていることです。機能マップ間の独立性を促進します。
_SpatialDropout1D
_は非常によく似ています:shape(x) = [k, l, m]
を指定すると、_noise_shape = [k, 1, m]
_を使用し、1次元の機能マップ全体をドロップします。
参照: Convolutional Networksを使用した効率的なオブジェクトのローカリゼーション Jonathan Tompson at al。
簡単にするために、まず、いわゆる機能マップ(1D、2Dなど)が通常のチャネルであることに注意してください。例を見てみましょう:
Dropout()
:2D入力を定義してみましょう:[[1、1、1]、[2、2、2]]。ドロップアウトはすべての要素を独立して考慮し、[[1、0、1]、[0、2、2]]のようなものになる可能性があります
SpatialDropout1D()
:この場合、結果は[[1、0、1]、[2、0、2]]のようになります。 2番目の要素がallチャネルに沿ってゼロになっていることに注意してください。