画像スタイル転送で使用される重み正規化手法


6

畳み込みニューラルネットワークを使用した紙の画像スタイル転送を実装しようとしています。セクション2-深い画像表現で、著者は次の重み正規化手法について言及しています。

画像と位置に対する各畳み込みフィルターの平均アクティブ化が1に等しくなるように重みをスケーリングすることにより、ネットワークを正規化しました。このような再スケーリングは、出力を変更せずにVGGネットワ​​ークに対して実行できます。これは、線形線形活性化関数のみを修正し、機能マップに対する正規化やプールは含まないためです。

以前に尋ねた関連質問から、著者がILSVRC検証セットの画像からのアクティベーション値を使用して重みを正規化していることがわかりました。

私は自分でそれを思い付くことができなかったので、そのような正規化を実行することの数学的な定式化を知りたかった。

問題の私の理解によると、私はアクティベーションマップ(X)を持ち、それに対応して、前のレイヤーのKアクティベーションマップ(L)と次元3x3xKの重み行列(W)を持っています。 WそれはXを生成します。今度は、検証セットのすべての画像についてレイヤーLのすべてのニューロンの活性化値をキャプチャしたら、検証セットのすべての画像にわたってXのすべてのニューロンの平均を1にすることです。どういうわけかWを調整することによって

それを実現するために私がWに何をすべきかわからなかった。

また、これを最初のレイヤーの重みを正規化し、次に新しい機能マップを使用してレイヤーの重みを正規化することにより、カスケード(順次)でこれを実行するかどうかを確認したかったすべてのアクティベーションマップの元の事前トレーニング済みの重みとしての前のレイヤーの値?

回答:


1

一連の画像で平均的な機能のアクティブ化が完了すると、ネットワークをレイヤーごとに順次正規化することは間違いありません。ただし、微妙な問題があります。以前のレイヤーとは独立してレイヤーの重みを再スケールすることはできません。

LET及びの重みおよびバイアスである層における番目の畳み込みフィルタ。カーネル寸法は(高さ、幅、channels_in)の3D形状ですが、道路の表記を簡単にするために、してみましょう。ここで、です。WilbililWilh×w×cp×cp=h×w

Fijlmax(0, WilPjl1+bil)は、レイヤー番目のフィルターの、番目の位置でのアクティブ化です。活性化マップ。ここで、は畳み込み演算(またはフロベニウスの内積、または積和演算、ババの答えからのシンボルを採用)を、はのウィンドウです。フィルターが検討中の位置でたたみ込むレイヤーの出力のアクティブ化。iljPjl1h×w×c=p×cl1

ましょうは、データセットすべての画像とフィルターの活性化マップのすべての位置におけるレイヤー番目のフィルターの平均活性化です。これは明らかに負でない数であり、VGGネットワ​​ーク内のすべてのフィルターに対して実際には正です(平均的なアクティブ化が適切なサイズのデータ​​セットで収集される場合)。

μilEX,jFijl=1NMlXj=1MlFijl=1NMlXj=1Mlmax(0, WilPjl1+bil)
ilNXMl

ここで、重みとバイアスを除算することにより、アクティベーションを「正規化」するとします。これにより、着信アクティベーションが元の正規化されていないアクティベーションと同じである場合、アクティベーションの平均は1になります。つまり、、ただし前のレイヤーのアクティブ化が元の正規化されていないネットワークと同じである場合のみ-計算したネットワークμilEX,jmax(0, WilμilPjl1+bilμil)=1Pjl1μilこれは、正規化ネットワークの最初のconvレイヤー、つまり入力画像とたたみ込むレイヤーにのみ当てはまります。他のレイヤーの場合、これは誤ったスケールをもたらすだけでなく、実際に畳み込みの符号を反転させ、その結果、ReLUを通過した後にアクティベーションをゼロにすることができます。つまり、ネットワークの出力を変更します

これを修正するには、着信アクティベーションを復元する必要があります。ただし、着信値自体を変更することはできません。現在のレイヤーの重みを使用して、前のレイヤーの正規化を元に戻す必要があります。フィルターの重みは、前のレイヤーの単一のチャネルとのみ相互作用することに注意してください。そのため、レイヤーの番目のチャネルと相互作用するすべての重みを、それらに乗算することによってます。これにより、前のレイヤーの正規化がキャンセルされます。Wilkl1μkl1

形式化するには、

Dl1[μ1l1000μ2l1000μcl1]は、レイヤーからのすべての平均活性化を使用して構築された対角行列です。c×ccl1

次に、。(そして、これが重みを2Dに再形成した理由です。これにより、明確にするために、テンソルの代わりに行列を乗算できるようになります。)EX,jmax(0, WilDl1μilPjl1+bilμil)=1

また、最大および平均プーリングレイヤーは、スケールを変更しないため、このスキームに干渉しません。

上記はおそらく実際のコードよりも複雑に見えます。短いKeras実装でGitHubリポジトリをプッシュしました:https : //github.com/corleypc/vgg-normalize。サンプルコードを見ると、さらに詳しいことがわかります。


1

短い答え:特定の重み行列に対応するアクティベーションマップを取り、すべてのアクティベーションの平均を取り、すべての画像でこの平均を平均します。次に、重み行列とバイアスをこの平均で割ります。そして、はい、それを順番に行うことは理にかなっています。

長い答え:(引用した論文で使用されている表記を使用)

フィーチャーマップの畳み込み演算子は、画像パッチ内積を実行します。ithxj

max{0, wilxj+bjl}=Fijl

それらは、すべての画像とすべての空間位置のアクティベーションの平均を取ります(これをと呼びましょう)χjsi

silEχ,j[max{0, wilxj+bjl}]=1KMlχj=1MlFijl

ここで、はデータセット内の画像の数です。K

これで、とをだけスケーリングして、次のようになります。wilbjl1sil

Eχ,j[max{0, wilsilxj+bjlsil}]=1

これにより、RELUの非線形性を通過した後、以前はゼロであったアクティベーションがそのままになることも保証されます。

wilxj+bjl<0wilsilxj+bjlsil<0

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