CNN と RNN の違いとは? 【Q and A 記事】

記事を共有する:

1. Question

CNN RNN の違いとは? というQuestionに対して,管理人なりに答える.

2. Answer

Answerは「畳み込み層と,再帰構造のどちらをメインの層(処理)にしているかで,CNNとRNNの両者は異なる」である.

CNNもRNNも,ディープニューラルネットワークとして,深く何層も畳みみ層活性化層を経て特徴マップを変換しながら奥へ伝搬していく.その点ではCNNとRNNの両者は共通している.

しかし,RNNでは回帰(再帰)構造を利用し,「同一のパラメータの全結合層」を何度もシーケンシャルに使い回す,再帰型の更新をおこなう.省パラメータを再帰で使い回して,(シンプルに)系列データの変化をモデル化しているのがRNNである.

一方,CNNの主眼は,入力画像の物体認識である.どの物体クラスの2次元パターンが入力画像に映っているかを,小・中・大の空間フィルタを順に適用することで,絞りこんでいく.従って,RNNのように同じ線形を使い回したりはせず,解像度ごとに,そのサイズにあった異なる畳み込みフィルタを学習することになる.

2.1 CNNとRNNの違い(より詳しく)

もうすこし2者を詳細にきちんと説明しておく(詳細は各記事を参照のこと):

  • CNN(畳み込みニューラルネットワーク)
    • 処理が直線的であり,同じ層(=部品の使いまわし)は行わない.
    • 正確には,そのような回帰構造なしのニューラルネットワークを,順伝搬ニューラルネットワーク(Feed Forward Neural Network, FFNN)と呼び,そのFFNNのうち,線形層に畳み込み層を使用する特殊系のことを,CNNと呼ぶ.
    • 画像データ入力からの認識(もしくは生成)に,CNNをよく使用する.
    • 畳み込み層ReLU型活性化関数よって特徴をフィルタし,プーリング層で解像度を下げながら,小・中・大の(※ 主に)空間領域のパターンを捉えるフィルタを適応していく.これにより,「犬」「人」「車」などに相当する抽象度の高い空間パターンを,終盤の層でヒット(応答)させることがCNN全体の目的である.
  • RNN(再帰型ニューラルネットワーク)
    • 毎回のフレーム間遷移において,同じパラメータの線形層(全結合層)により,処理を行う.
    • すなわち,FFNNとは異なり,RNNでは再帰的に同一層の実行を何度もずっと行う.
    • 系列データ入力 (もしくは生成) に,RNNをよく使用する.
    • 潜在変数を用いて「時系列モデル化」している点もCNNとは異なる.MLPやCNNでも途中の層を「隠れ層」と呼ぶが,RNNのように「系列の途中フレームでの状態ベクトル」を表現しているわけではない.

以下に,CNNとRNNの概要図をそれぞれ示しておく.

CNNの基本構造 (バッチ正規化あり)
図1. CNNの基本構造

図1のように,CNNでは,畳み込み層が主たる学習部分であり,複数の畳み込み層を直線的に繰り返し使用する.再帰はしないので,毎回のCNNの畳込み層は異なる重みパラメータ(+バイアス)が学習される.

RNNのダイアグラム(重みあり)
図2. RNNの構造

一方,RNNでは,毎フレーム$t$における遷移で,同一の全結合層($\bm{U},\bm{W},\bm{V}$)を,ずっと毎回つかいまわす(図2).言い換えると,同じ線形層を,再帰的に使用しているのがRNNの構造である.このパラメータ共有のおかげで,長い系列データでも,同一の線形層をずっと再帰(=使い回し)して,コンパクトなモデルながらも,系列データを取り扱うことが可能になる.

ただし,この元のRNNのモデルでは,あまりにシンプルすぎて,短い系列の変化しかうまく学習できない.よって,中程度の長さの系列データ群には,RNNの発展型であるLSTMGRUが使われた.また,機械翻訳などで,更に,データセットの規模が大きくなってくると,LSTMやGRUを縦方向にも並列にスタック(積みあげ)することで,モデルの容量を増やして対応するようになっていった (例:Google NMTなど).

ディープラーニングでは,よく用いる2つの基本型のネットワーク構造である「CNNとRNN」の2者間で比較してしまうが,本当は「FFNNと,(その再帰型である) RNN」の2つが,対照的な関係にある.ただし,便宜的には「画像データ向けの CNN」 v.s. 「系列データ向けのRNN」という対比関係で実用的には分けて,その2者のどっちを使うかをまず考える.その意味で,やはり「CNN v.s RNN 」の2者間で違いをおさえておくのが便利である.

3. まとめ

CNNとRNNの違いは,RNNにしかない「再帰型による系列データへの対応」である.一方,CNNは畳み込み層により,2次元画像空間での表現をフィルタ群で順に検出していく構造であり,RNNのように再帰・時間方向への層の再利用は行わない.逆に,CNNは空間方向に対しては,同じ畳み込みフィルタを全部の(スライディングウィンドウ)位置で,再利用しているとみなせる.

パラメータ共有の視点から整理すると,画像の $(x,y)$ 軸方向に線形層 (= 畳み込み層)を再利用するのがCNNであり,系列のフレーム・タイムスタンプである「$t$ 軸方向」に線形層(=全結合層)を再利用するのがRNNである.