LoginSignup
6
4

More than 5 years have passed since last update.

CNNをディジタルフィルタ的な観点から眺める #1

Last updated at Posted at 2019-03-24

CNNをディジタルフィルタ(FIRフィルタ)設計的な観点から眺めたらもしかして面白いのでは?という記事です。

CNNとディジタルフィルタの関係

そもそもCNNって?

みなさんご存知のCNN(畳み込みニューラルネットワーク)とは、構成要素として畳み込み層(とプーリング層)を持ったニューラルネットワークのことです。
典型的な構成はこんな感じです。(こういった図で活性化層をわざわざ書くのはあまり見たことがないのですが、後の信号処理の記号と対応させるために書いています。)
CNN構造図.png

CNNとディジタルフィルタって関係あるんですか?

CNNの畳み込み処理はディジタル信号処理のFIRフィルタの処理と同じです。
上記のCNN構成を信号処理の記号で書き直すとほぼこんな感じです。
CNN対応回路図.png

つまりCNNの学習は「特定の波形の特徴を抽出するようにフィルタ特性とクリッピング特性を最適化する処理」と捉えることが出来ます。

ディジタルフィルタの特性

周波数特性

フィルタ特性を$f(t)$、入力信号を$x(t)$とすると畳み込み演算は
$$ \int_{- \infty } ^ {\infty} f(u) x(t-u) du $$
となります。この演算を$*$という記号を用いて
$$ f(t) * x(t) $$
と書くことがよくあります。

さらに$f(t)$のフーリエ変換を$F(\omega)$、$x(t)$のフーリエ変換を$X(\omega)$とします。$f(t)$と$x(t)$の畳み込み演算をフーリエ変換すると、その結果は$F(\omega)$と$X(\omega)$の積となります。
$$ f(t) * x(t) \to F(\omega) X(\omega) $$

フィルタの重みをただ眺めるだけではその特性をとらえるのは難しいのですが、フーリエ変換して周波数領域に変換することで、どの周波数成分を抽出しているのかが分かりやすくなります。

位相特性

信号がフィルタを通過する際に、通過後の波形が歪まないようにするには、フィルタの重みが偶対称もしくは奇対称である必要があります。

1次元の5次フィルタを例にとると、フィルタの重みが偶対称とはこのようにフィルタの重みが左右対称になっていること。
偶対称_1次元.png

奇対称とはこのようにフィルタの重みが左右で原点に対して対称になっていることです。
奇対称_1次元.png

この話は画像向けのような2次元フィルタに対してはこのように拡張できます。下の画像では左から数えて1列目と5列目、2列目と4列目が偶対称になっており、横方向に対して対称性があります。
偶対称_2次元ん.png

フィルタが2次元になると話は横方向だけでなくその他の方向に対しても広がります。下の画像は縦方向に偶対称であることを示しています。
偶対称_2次元_縦.png

実際のCNNの重み

実際にCIFAR-10のデータセットで学習させたCNNのカーネルを可視化したものが下記です。
ネットワークの構造はカーネル数10個、カーネルサイズ6x6の1層のCNNです。 @sasayabaku さんの KerasでCNNを簡単に構築 のコードを参考にさせて頂きました。10個のカーネルを縦に並べています。それぞれのカーネルについて左からRGBのそれぞれのチャネル別の重みを出力しています。

CNN_kernel10_size6.png

1層のCNNなので性能は全然出ていない(Accuracy=0.60程度)のですが、偶対称な重みが学習されたカーネルが結構あるように見受けられます。次は対称性を定量的に評価できるようにしたいですね。(わざわざフィルタの周波数特性の話をしたのに対称性にしか触れていないのはFFTするのがめんどくさかったからです。その話も次にやりたいです。)

追記

このあたりの内容を既に議論している論文等あれば教えて頂けると嬉しいです。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4