2017-08-22 6 views
-1

kerasのサンプルディレクトリには、MNISTデータで学習する、積み上げたwhat-whereオートエンコーダ(SWWAE)の軽量版が含まれています。 (https://github.com/fchollet/keras/blob/master/examples/mnist_swwae.pykerasのmaxpoolingポジションを得るために合計トリックのグラディエントはどのように機能しますか?

オリジナルのSWWAE論文では、著者はソフト関数を使用して何をどこで計算するのかを計算します。しかし、ケラスの実装では、これらの場所を取得するためにトリックを使用します。私はこのトリックを理解したいと思います。

ここにトリックのコードがあります。 y_prepoolは、M×Nの行列であり、y_postpoolがM/2×N/2行列である

def getwhere(x): 
    ''' Calculate the 'where' mask that contains switches indicating which 
    index contained the max value when MaxPool2D was applied. Using the 
    gradient of the sum is a nice trick to keep everything high level.''' 
    y_prepool, y_postpool = x 
    return K.gradients(K.sum(y_postpool), y_prepool) # How exactly does this line work? 

は(サイズ2つの画素の正規プーリングを想定することができます)。

私はgetwhere()の出力が釘のベッドであり、釘がmaxの位置を示していることを確認しました(もしあればローカルargmax)。

この「トリック」を使用してgetwhereがどのように動作するかを示す小さな例を作成できますか?

答えて

2

は、最も単純な例に焦点を当てることができます、本当に畳み込みの話をせずに、我々はベクトル

x = [1 4 2] 

我々MAX-プール(シングル、大きな窓付き)以上を持っていると言う、我々は

mx = 4 
を取得

数学的に言えば、それは次のとおりです。

mx = x[argmax(x)] 

今、「トリック」を使用1枚のホットマスクを回復しますプーリングによって

magic = d mx/dx 

ARGMAXための勾配が存在しないを行うことである、しかし、それはそう、最大要素の位置でベクターの要素に対応する勾配を「通過」:

d mx/dx = [0/dx[1] dx[2]/dx[2] 0/dx[3]] = [0 1 0] 

としてあなたは見ることができますが、dx/x = 1なので、非最大要素の勾配はすべてゼロ(argmaxのため)であり、最大値に1が現れます。

"適切な"複数の入力位置に接続され、プールされたvaの合計の類似の勾配をとるルーズは、すべての指標を回復します。

ただし、重複したカーネルがあると、このトリックは機能しません。「1」より大きい値になる可能性があります。基本的にはピクセルが、それが値Kを持っていますよりも、MAX-プールされたKカーネルによってではありません1、例えば場合:

 [1 ,2, 3] 
x = [13,3, 1] 
    [4, 2, 9] 

我々は

mx = [13,3] 
    [13,9] 

とget 2x2のウィンドウで、私たちの最大のプールた場合グラデーショントリックはあなたに与えます

 [0, 0, 1] 
magic = [2, 0, 0] 
     [0, 0, 1] 
+0

@lejotそれはdownvoted(それは素晴らしい書き込み)にもかかわらず、これを書く時間をとってくれてありがとう。 1つの質問、私はかなりK.sum()を理解していません。私はまったくフォローしていません、「今、「適切なマックスプール」のために....「別の方法を説明できますか? –

+0

私が説明した内容は、単一のmaxpoolウィンドウで機能します。さて、あなたはこれらの多くを持っています。そして、合計の勾配が勾配の合計であるので、それは多くのそのような「呼び出し」を共同して表現する自然な方法です。また、K.sum()を実行する代わりに、それぞれの最大プール領域のグラデーションを個別に求めてから、すべてのマスクを追加することもできます(これは最終的に1より大きい値になります)。これはもっと明確ですか? – lejlot

+0

はい、ありがとうございます! –

関連する問題