高速フーリエ変換で畳み込みを高速化する方法 3. 離散フーリエ変換と畳み込みとは?
2018.8.1
こんにちは。データサイエンスチームのtmtkです。
前回までの記事(1.離散フーリエ変換入門、2.高速フーリエ変換(FFT)入門)では、離散フーリエ変換と、それを高速に計算するアルゴリズムである高速フーリエ変換を紹介しました。今回の記事では、離散フーリエ変換を用いて畳み込みを高速に計算する話を紹介します。
巡回畳み込みとは
離散フーリエ変換と相性のよい処理として、巡回畳み込みという処理があります。巡回畳み込みの定義は以下のとおりです。
を自然数として、を次元ベクトルとする。ただし、でを拡張し、周期をもつ整数値複素関数と同一視する。このとき、の巡回畳み込みを
で定義します。
巡回畳み込みは、離散フーリエ変換と次のような関係があります。
離散フーリエ変換と巡回畳み込み
離散フーリエ変換と巡回畳み込みに関して、次が成り立ちます。
(ただし、はベクトルの要素ごとの積(アダマール積)とします)。すなわち、巡回畳み込みの離散フーリエ変換は、離散フーリエ変換の要素ごとの積で計算できます。この性質は直接の計算により容易に証明することができます。
高速フーリエ変換で巡回畳み込みを高速化できる
高速フーリエ変換を使うと、巡回畳み込みの計算を高速化することが可能です。
巡回畳み込みは、定義にしたがって素朴に計算するとを計算するのに回の掛け算と回の足し算が必要です。それを次元の数回だけ繰り返し計算するので、全体の計算量はになります。
一方で、先ほど離散フーリエ変換と巡回畳み込みの性質から
が成り立ちます。すなわち、巡回畳み込みを計算するには、の離散フーリエ変換を計算し、それらの要素ごとの積を計算し、その逆離散フーリエ変換を計算すればいいです。この方法だと、計算量が各ステップでなので、全体の時間計算量はになります。
つまり、高速フーリエ変換を使うことで、巡回畳み込みの計算量がからに削減できます。
高速フーリエ変換と巡回畳み込みの応用例
巡回畳み込みを高速フーリエ変換で高速化することの応用例として、機械学習における畳み込みへの応用を紹介します。
機械学習において、畳み込みとは以下のような処理です。いま、入力が1次元の場合を考えることにします。畳み込みカーネルをとするとき、入力に対するカーネルによる畳み込みは、に対して
で定義されます。(通常はと書かれますが、ここでは巡回畳み込みと区別するためにと書くことにします。)
畳み込みは、古典的な画像処理や最近流行りのディープラーニングでも用いられています。画像認識の本やディープラーニングの本に詳しいことが書かれています。
さて、この畳み込みは巡回畳み込みを使って計算することができます。例として、の場合を考えます。次元ベクトルをで定めれば、巡回畳み込みは
と計算されます。これの第1要素から第4要素までを抜き出したものが、畳み込みと一致します。このようにして、機械学習における畳み込みを巡回畳み込みを使って計算することができます。
機械学習における畳み込みの計算量はですが、高速フーリエ変換と巡回畳み込みを応用することで計算量をにすることができます。これは、データのサイズが大きく、かつカーネルのサイズがデータのサイズに近い場合に有効です。
その他にも、多倍長整数の掛け算などを高速フーリエ変換を使って高速化できるようです。
まとめ
この記事では、巡回畳み込みを定義し、フーリエ変換の積が巡回畳み込みの離散フーリエ変換と等しいことを紹介しました。また、その応用として、機械学習における畳み込みを高速フーリエ変換を使って高速化できることを紹介しました。
参考文献
- Ian Goodfellow『深層学習』
- 山下幸彦他『工学のためのフーリエ解析』
- アダマール積 – Wikipedia
- 離散フーリエ変換を用いた多倍長乗算の話
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterデータ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。
Recommends
こちらもおすすめ
-
機械学習を学ぶための準備 その2(級数と積分について)
2015.12.2
-
純粋数学専攻がデータサイエンティストに転身してからの半年間を振り返る
2017.12.19
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16