最大プール層を介したバックプロップ?


62

これは、しばらくの間私を悩ませてきた小さな概念的な質問です。ニューラルネットワークの最大プール層をどのように逆伝播できますか?

Torch 7のnnライブラリに関するこのチュートリアルを実行しているときに、最大プール層に遭遇しました。このライブラリは、深層ネットワークの各レイヤーの勾配計算とフォワードパスを抽象化します。max-poolingレイヤーの勾配計算がどのように行われるかわかりません。

入力がレイヤーニューロンに入る場合、(として定義される): zililδilδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

そのため、最大プール層は、通常どおり次の層のを受け取ります。ただし、最大プーリングニューロンの活性化関数は値のベクトル(最大値)を入力として受け取るため、はもう1つの数値ではなく、ベクトル(はます。さらに、最大関数である、その入力に関して微分可能ではありません。δjl+1δilθ(zjl)θ({zjl})θ

だから....それは正確にどのように機能するのですか?

回答:


58

非最大値に関する勾配はありません。値をわずかに変更しても出力に影響しないからです。さらに、最大値は、実際に最大値を達成する入力に対して、勾配1で局所的に線形です。したがって、次の層からの勾配は、最大値を達成したニューロンのみに戻されます。他のすべてのニューロンは勾配がゼロになります。

したがって、例では、はすべてゼロのベクトルになりますが、番目の位置の値はただし、δili{δjl+1}i=argmaxi(zil)


7
そうそう、非最大ニューロンを逆伝播するポイントはありません-それは重要な洞察でした。そのため、これを正しく理解していれば、max-poolingレイヤーを逆方向に伝播しても、単にmaxが選択されます。前の層(最大プーリングが行われた)からのニューロン。それを介してのみ逆伝播を継続します。
-shinvu

しかし、アクティベーション関数の微分で乗算する必要はありませんか?
ジェイソン

1
@Jason:max関数は、maxを取得したアクティベーションに対して局所的に線形であるため、その導関数は定数1です。成功しなかったアクティベーションについては、0です。これは、ReLU(x )= max(0、x)アクティベーション関数。
クリギ

ストライドは、最大プーリングのカーネル幅よりも小さいですか?
Vatsal

1
素晴らしい答えです!複数のエントリが同じ最大値を持つエッジケースについてはどうですか(たとえば、2つの値がReLUから0になり、他の2つの値が負になります)。
DankMasterDan

6

最大プーリング

したがって、レイヤーPRの上にあるレイヤーPがあるとします。次に、フォワードパスは次のようになります。

Pi=f(jWijPRj)

ここで、はレイヤーPのi番目のニューロンの活性化、fは活性化関数、Wは重みです。したがって、それを導出すると、チェーンルールによって、勾配が次のように流れることがわかります。Pi

grad(PRj)=igrad(Pi)fWij

しかし、今、あなたは最大のプールを持っている場合、 最大ニューロンとのためにのすべての他のニューロンのために、その、前の層とのmaxニューロンのための他のすべてのためにニューロン。そう:f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron

grad(PRothers)=0.


2

@Shinvuの答えはよく書かれています。Max ()操作の勾配これを把握しやすい計算グラフ内で説明するビデオを指し示したいと思います。

maxpool操作(計算グラフの計算ノード-NNアーキテクチャ)を実装する際に、マトリックスの最大値を追跡する「マスク」マトリックスを作成する関数が必要です。True(1)はXの最大値の位置を示し、他のエントリはFalse(0)です。これは最終的に出力に影響を与える入力値であり、したがってコストに影響するため、最大値の位置を追跡します。Backpropはコストに関して勾配を計算しているため、最終的なコストに影響を与えるものはすべてゼロ以外の勾配を持つ必要があります。そのため、backpropは、コストに影響を与えたこの特定の入力値に勾配を「伝播」します。

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