LeapMIndの三室です。
弊社のBlogで反響のあったものをWantedlyにも転載していきたいと思います。
Binary Neural Networkのweight分析
はじめまして。エンジニアの澤田です。
現在は、「話題の」ディープラーニングに携わっていますが、私が受けた大学院で、コンピュータビジョンの授業のチャプターの内、最も感銘を受けたのは、「ニューラルネットによる文字認識」ではなく、「フーリエ変換」でした。
画像処理というものは、予め、画像が存在するということが前提となっています。コンピュータにものを認識させる際も、帰納的に訓練画像を与えることが一般的です。画像生成の様に、存在しているものを組み合わせて「作る」ことは可能でも、常に、システムは、データに依存しています。
私がフーリエ変換を好きなのは、画像処理といえども、根本的な発想が帰納的ではないからです。フーリエ変換の授業の冒頭で、教授が、全ての画像は、二次元sin波の線形重ねあわせで表現できる、と控えめに話した日の帰りのバスで、今目の前にあるものがsin波の集合体であるならば、どんな成分があるのか想像してみました。その想像は決して正しい成分を捉えていた訳ではないでしょうが、経験に依存しない何かを「見る」ことができた気がしました。
さて、そんなフーリエ変換ですが、近年では、画像認識分野では、ディープラーニングが注目されたこともあり、あまり脚光を集めていません。実は、畳込みの処理が、畳み込み定理により、周波数領域での要素同士掛け合わせに変換できるため、高速化に利用できそうです。しかし、残念ながら、カーネルサイズが十分に大きくなければ、変換と逆変換の計算量を勘案すると、逆に遅くなってしまいます。
一方で、私たちが、現在、取り組んでいるbit型ニューラルネットワークですが、実は、フーリエ変換を使って分析することも可能です。例えば、畳み込み層の各カーネルをフーリエ変換しますと、そのカーネルが画像のどの周波数を通すのか明らかにすることができます。
畳み込み層で表現されるbitの組み合わせは、カーネルが3×3、かつ、各weightが1bitで表現されている場合、一次元畳み込みの場合、2^3=8通り、二次元の場合でも、2^9=512通りしかありません。それらのweightをフーリエ変換し、周波数領域での振幅の絶対値を計算すると、一次元の場合、low pass, bandpass, high pass の3つに分類することができます。
左 : low pass [1,1,1],[-1,-1,-1]
中 : band-pass pass [1,1,-1],[-1,-1,1],[-1,1,1],[1,-1,-1]
右 : high pass [1,1,1],[-1,-1,-1]
二次元の場合、三種類のフィルタが別方向に組み合わさるのでその生成パターンは一次元よりも多くはなりますが、左右や前後に対照的なフィルタを考慮すると、網羅的に調べられない数ではありません。下図は、左列が実領域のbinary weightで、右列が、各weightの周波数領域の振幅の絶対値です。
因みに、weightの正負は、bitcount とXnorを用いるネットワークを用いる場合、対照的な意味を持ちますので、黒を+1、白を-1、または、黒を-1、白を+1としても下段の表象は変わりません。
このように、各カーネルがどのような線形フィルタとして機能しているか周波数領域に変換し、可視化するとよく分かります。カーネルのパターンが限られているといえども、様々なフィルタが存在します。ただ、これらのフィルタは、カーネルの数が増加すると周波数領域のbase関数の周波数が増加する為、さらに複雑になります。しかし、論文(LBCNN:https://arxiv.org/abs/1608.06049)で、weightのスパース性が高くても(上図一番上の様)、十分なaccuracyを確保できることが明らかになっているので、1つ1つのフィルタは、シンプルなものでも十分な分類タスクを熟すことができるということかもしれません。
以上、簡単ではありますが、フーリエ変換を活かしたweight分析についての説明でした。
今後、ディープラーニングがスケールアウトするのかは議論がありますが、私たちの計算量削減アプローチも、ディープラーニング以外の多くの知識を必要とし、挑戦していて、とても面白い問題です。