ゼロから作るDeep Learning 7章 畳み込みニューラルネットワーク

前回はゼロから作るDeep Learning 6章 学習に関するテクニック - n3104のブログです。

7章では画像処理で利用される畳み込みニューラルネットワーク(convolutional neural network:CNN)について説明しています。

  • 7.2.1 全結合層の問題点
    • “全結合層の問題点は何でしょうか。それは、データの形状が“無視”されてしまう ことです。”
      • それが、Deep Learningの売りだと思ってたんだけど。。特徴抽出を考えるようになったら、それは従来手法と差がなくて、そうなると単に予測精度を上げられる代わりにより複雑なモデルとどう向き合うかが求められるようになっただけなのかなぁ。。 ← これは勘違いで7章を一通り読むと分かるけど、縦とか丸とか斜めとかそういう形を抽出するような処理は学習した結果得られるので、そういう意味では従来手法とは異なる。学習がしやすいようにデータに合わせたネットワークの構造にしているだけみたい。
  • 7.2.2 畳み込み演算
    • なるほど。フィルターが重みに相当するのか。
  • 7.2.3 パディング
    • 出力サイズを維持するための手法か。
  • 7.2.4 ストライド
    • フィルターを適用する間隔ね。フィルターという概念を入れたのでそこに選択肢がうまれるのは当然といえば当然か。いやしかし、既にハイパーパラメーターがかなり増えている気がするんだけど。。
  • 7.2.5 3 次元データの畳み込み演算
  • 7.2.6 ブロックで考える
    • 出力を3次元にする場合はフィルター自体をチャンネル数分用意する。これってつまりRGBみたいな感じだと、それぞれに対応するフィルターを用意することでRGBのチャンネルそれぞれに対応したフィルターに学習するってことなのかなー。
  • 7.3 プーリング層
    • “プーリングには、Max プーリングの他に、Average プーリングなどがあり ます。Max プーリングは対象領域から最大値を取る演算であるのに対して、 Average プーリングは、対象領域の平均を計算します。画像認識の分野にお いては、主に Max プーリングが使われます。そのため、本書で「プーリング 層」という場合は、Max プーリングを指すものとします。”
      • 圧縮と言えば圧縮だけど、要は特徴抽出だなー。
  • 7.3.1 プーリング層の特徴
    • 学習ではなくて特徴抽出の1手法ってことだよね。
  • 7.4.2 im2col による展開
    • “なお、図7-18 の図では、見やすさを優先し、フィルターの適用領域が重ならない ように、ストライドを大きく設定しています。実際の畳み込み演算の場合は、フィ ルター領域が重なる場合がほとんどでしょう。フィルターの適用領域が重なる場合、im2col によって展開すると、展開後の要素の数は元のブロックの要素数よりも多く なります。そのため、im2col を使った実装では通常よりも多くのメモリを消費する という欠点があります。”
      • ちょっと唐突で何を言ってるか分からない。先の実装見れば分かるかな。 ← 次節の7.4.3を見ると分かる。要は行列計算出来るようにフィルターの形に合わせて入力データを一部重複する形で変換している。
    • “im2col によって入力データを展開してしまえば、その後にやることは、畳み込 み層のフィルター(重み)を 1 列に展開して、2 つの行列の内積を計算するだけで す(図7-19 参照)。”
      • フィルタも同じように変換して行列計算にするのか。なるほど。最後のreshapeで元に形に戻すのも納得。結局同じ数字の並びをどういうデータ構造で表現してるだけだからなー。
  • 7.4.3 Convolution レイヤの実装
    • “これはフィルター(チャンネル 3、サイズ 5 × 5)の要素 数の総和です。”
      • で、行数が 9 なのは 7 × 7 の画像を 5 × 5 でストライド 1 のフィルターに適用しているので 3 × 3 = 9 になるということらしい。つまりフィルターの形に合わせて入力データを9レコードに変換していて、その際に一部データも重複することもある。
  • 7.4.4 Pooling レイヤの実装
    • np.max で処理できるようにまず im2col 関数でフィルタ単位に変換したデータを reshape してチャンネル単位にしている。なので、レコード数はフィルタの場合のレコード数 × チャンネル数になるはず。
  • 7.5 CNN の実装
    • 重みの初期化が単なるランダムに戻ってる。。CNNの場合の重みの初期値をどうするかは別途説明があるのかなー。
  • 7.6.1 1 層目の重みの可視化
    • 従来手法で自作していたフィルタを学習させることが出来るのがメリットということかな。そういう意味では多層ニューラルネットワークフレームワークであって、処理対象に応じてCNNのように入力データに合わせたレイヤーを選択するって感じかな。そういう意味では多層ニューラルネットワークは利用者側の選択肢が多いので他の手法と同列に扱うのは微妙かも。他の手法だと特徴抽出でとにかく頑張るって感じになるからなー。
    • “それでは、畳み込み層(1 層目)のフィルターを画像として表 示してみましょう。”
      • よくある猫の画像とかもこんな感じでフィルタを図に変換してたってことかなー。
  • 7.6.2 階層構造による情報抽出
  • 7.7.2 AlexNet
    • “ディープラーニング(層を深くしたネットワーク)は、多くの場合、大量のパ ラメータが存在します。そのため、学習には多くの計算が必要であり、さらに、 それらのパラメータを“満足”させるだけの大量のデータが必要になります。 GPU とビッグデータは、それらの課題に光を投げかけたと言えます。”
      • 非常に納得。アイディアを検証できる段階にハードとデータが追いついてきたって感じなんだよなー。 チャンネル

CNNの名前を聞いたことはあったのですが、詳細を知らなかったのでスッキリしました。また、多層ニューラルネットワークフレームワークというか考え方であって、対象領域に応じてCNNのような具体的な手法が存在することも理解できました。後は可視化のところは興味があるので別途リンク先について読むつもりです。