Perturbation層

概要

Perturbation層(perturbationは摂動)は入力されたチャンネルにランダムに生成した固定のノイズを足し合わせ非線形変換したものを重みで足し合わせて出力する層.実際にはConvolution層のような3x3の畳み込みは行わず、画素に注目しており言わば1x1の畳み込みを行っている. Convolution層で構成されるCNNをPerturbation層で置き換えたPNNを用いてもこれまでCNNで達成されていた性能が達成できる. ここではPerturbation層について簡単に紹介する.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 入力は数チャンネルの二次元画像
  • 出力も数チャンネルの二次元画像
効果
  • Convolution層を使わずにCNNと同等な性能を持つPNNを実現
  • 学習するパラメータはチャンネル間の線形和の重みのみ
ポイント
  • Relu(入力+ノイズ) * 重み和 を出力
  • LBCNNをヒントに提案
  • 各画素に加えられるノイズは学習の間固定.またこのノイズは異なる出力チャンネルを生成するときも同一のものを使用.

解 説

Perturbation層は入力にノイズを加え非線形変換をし、重み付きの線形の足し合わせを行う層. Perturbation層で構成されたPerturbative Neural Networksは、Convolution層で構成されたConvolutional Neural Networkが実現してきた様々なタスクにおいて同等の性能を実現している. Convolution層はkxkのカーネルサイズの畳み込み演算を行っているが、Perturbation層は1x1の演算を行っているのが大きな違い. Perturbation層のポイント・特徴は以下. ・層の計算は、非線形変換( 入力 + ノイズ) を重み付きの足し合わせ ・学習するパラメータは上記の重み付き足し合わせの"重み"のみ ・ノイズは学習の間固定.出力するチャンネルを替えても同一のノイズを使用する.層や入力のチャンネルで使用するノイズを変更 ・畳み込み処理はない
Perturbation層に関して
(https://github.com/juefeix/pnn.pytorchより引用.元は論文より引用)
上記がPertubation層が行っている計算. 1. (N_i_l + x_i_l)の部分が入力に対して対応するノイズを各画素で足し合わせ. 2. 1.の出力をrelu等の非線形変換に通す 3. 入力チャンネルごとの各画素ごとに2.を計算したら、各画素ごとでv_t_{l,i}を重みとして足し合わせ.それを出力チャンネルtの値とする. ここで学習されるのはvのみ
上記の式について
Perturbative Neural Networksに関する論文は右を参考にしてください.
CNNと PNNの発想のヒントになったLBCNNと PNNの比較. CNNとLBCNNは畳み込み.PNNではその畳み込み計算がなくなる. (Githubより引用)
論文においてはPNNとCNNの比較を行っており、マクロな観点とミクロな観点についてまとめている. ・マクロな視点で見ればPNNの処理はCNNの良い近似を行えること ・ミクロな視点で見れば仮定をおくことで畳み込み処理がノイズの加算と同様な働きをすることがあること そしてPerturbation層はConvolution層が持つ特徴として持っている、スパースな演算とパラメータ共有、を引き継いでいる.また、Perturbation層はそれに加え、スケール変化に柔軟なことや距離を保つことを特徴として挙げている.
その他PNNの特徴
この章を学んで新たに学べる
Comments

Reasons
>>隠す