宮塩のお勉強部屋

某大学でARまわりの研究をしている学生です。

【Coursera】Deep Learning Specialization - Course 4: Week2 Deep convolutional models: case studies

今回はweek2です。前回の記事はこちら。 smygw.hatenablog.com

Case studies

Why look at case studies?

  • あなた自身が解きたい問題に対してもある程度はそのまま使えるかもしれないし、ネットワークを変更する際のの参考になるから. ‐ 古典的なネットワーク(LeNet-5, AlexNet, VGG)やモダンなネットワーク(ResNet, Inception Neural Network)についてみていく.

Classic Network

  • 論文を読む際はAlexNet→VGG→LeNetの順でおすすめらしい.
  • LeNet-5
    • 1998に生まれたLeNet-5は手書き文字認識に使われた.
    • CONV→POOL→…→POOL→FC→FC→ \hat{y}という一般的な構造となっており、レイヤーが深くなるにつれてHeightとWidthが小さくなりチャンネル数が大きくなる.
    • (現代のネットワークとの違い:Reluではなく tanh/ sigmoidを使っている、Max PoolingではなくAverage Poolingを使っている、計算量を少なくするためにチャンネル数を別々に計算するなどの工夫をしている(今は計算力があるので気にしなくてよい)、Poolingの後に活性化関数をかけている.)
  • AlexNet
    • 2012年にAlexによってつくられたAlexNetは227×227×3のRGB画像を入力とする.
    • LeNetと似た構成だが、LeNetが6万であるのに比べて6千万とパラメータの数が多くなっている.
    • LeNetと違ってReluを使っているためパフォーマンスが良い
    • (当時はGPUが少し遅かったため、レイヤの処理を2つのGPUに分けて計算するなどの工夫をしていたが今は気にしなくてよい.) ‐ (Local Response Normalization(LRN)という同一位置(ピクセル)において複数の特徴マップ間で正規化する処理を行っているが、あんまり役に立たないことが後に分かったらしい.)
    • この論文によってDeep learningComputer Vision分野で役に立つという認識になったらしい.
  • VGG
    • VGG-16とも呼ばれ、16は重みパラメータによるフィルターの数を表している.
    • ConvolutionとPoolingでそれぞれフィルタは固定であり、Convolutionを複数回→Poolingを繰り返すシンプルな構造をしている.
    • フィルターの数は線形に増えている(64→128→256→512と倍々.)
    • 1億3800万ものパラメータがあり、これは近年でも多いと言える数である.
    • VGG-19はより層を深くしたものだけど、大して精度は変わらないからみんなVGG-16を使う.
    • サイズが2倍ずつ増えていくor減っていく構造が体系的に綺麗であるため、研究者にとって魅力的なネットワークである.
  • ResNets
    • 層を深くすると表現力が上がる反面で勾配消失の問題が発生するが、ResNetsを使うことで152層まで深くしても学習できるようになった.
    • 残差ブロックでは浅い層の出力を深い層の入力に足し合わせる処理を行っており、Short cutまたはSkip connectionと呼ばれる.
    • 式で書くと、 a^{l+2} = g(z^{l+2}+a^{l})となる.

Why ResNets Work

  • 残差ブロック無しの場合は、層が深くなるにつれて恒等写像ですら学習するのが難しくなる.残差ブロックを用いることで恒等写像に近い関数が出力されることが保証され、残差写像の学習が上手くいかなくても大してパフォーマンスは損なわない(多くの時間を残差写像の調整に費やせるイメージ.)
  • Short cutの入力先と出力先が同じ次元になるようにする必要がある.次元が同じ場合はSame convolutionを行えばよく、次元が異なる場合は線形射影を行う必要がある.式にすると、 a^{l+2} = g(z^{l+2}+w_sa^{l})となる.

Networks in Networks and 1×1 Convolutions

  • 1×1 CONVによる畳み込み処理を行うことで、画像のHeight, Widthを変えずにチャンネル数を変えることができる.
  • 計算量削減のためにチャンネル数を減らしたり、(チャンネル数を変更しない場合でも)非線形性を追加することが出来る.
  • Inception Networkでも使われている.

Inception Network Motivation

  • ネットワーク構築の際にはフィルターのサイズをどうするか?Conv層にするかPooling層にするか?など様々な選択肢がある.じゃあ全部同時にやってみよう!というのがInception modelの発想.HeightとWidthが全て統一した出力層を連結させる.
  • 計算コストが膨大になってしまうが、1×1 CONVを導入することで計算量をおよそ10分の1まで減らすことが出来る.1×1 CONVによりチャンネル数が小さくなった中間の層をBottleneck Layerと呼び、この層に対して処理を行うことで計算量が少なくなる.

Inception Network

  • 1×1 Convolutionを行う3つの目的
    • 単なる畳み込みの処理として使いたい
    • 計算負荷の大きい畳み込み処理の事前処理として使いたい
    • Pooling処理ではチャンネル数が変化しないため、チャンネル数を小さくするために使いたい
  • GoogleNetでは基本的にInception moduleをつなげたものだが、所々途中で分岐してsoftmaxを出力している.これは学習の効率化および正規化の役割を担っている.
  • "Inception"という名前はDeeperを推してる映画が由来.

Practical advices for using ConvNets

Using Open-Source Implementation

  • Githubなどからオープンソースを利用しよう.メリットとしては追実装やトレーニングの時間が節約できることが挙げられる.

Transfer Learning

  • Softmax層を入れ替えた既存モデルを使って学習を行う手法であり、トレーニングセットが少ない場合やGPUなどの計算力が少ない場合などに有効.
  • モデルはネットからダウンロードしたものを使う.Transfer Learningは多くのDNNフレームワークでサポートされている.
  • トレーニングセットが少ない場合はSoftmax層のみ学習を行い、それよりも浅い層はfreezeさせる(つまり、モデルをそのまま使う.)
  • 比較的トレーニングセットが大きい場合はfreezeさせる層の数を少なくし、それより深い層について学習を行う.もしくは深い層の部分をオリジナルの層に置き換えて学習しても良い.

Data Augmentation

  • 他の分野はともかく、Computer Visionの分野ではData Augumentationはとても役に立つ. ‐ 反転・回転・トリミング・変形は有効だが、複雑なためあまり使われない.一方で画像の理解への影響が少なく、色変化にも頑健なモデルを作ることが出来るため、Color shiftingが良く使われる.
  • 画像に使われている色を考慮して色調を変換する手法をPCA Color Augmentationといい、これにより変換後も画像の全体的な色味がある程度保たれる(詳しくはAlexNetのpaperを参照.)
  • ふつうはData AugumentationはCPUの1スレッドで行い、Trainingを行うスレッドと並行して行うように実装する.
  • Data Augmentationはハイパーパラメータが付きものなので、まずは既存の実装を使ってみると良い.もちろんVarianceが大きいことが分かっているならはじめから自分で実装するのも良いです.

State of Computer Vision

  • データ数が多ければモデルやアルゴリズムはシンプルでも大丈夫だが、物体認識の問題などデータ数が少ない場合は特徴量やアーキテクチャなどをHand-engineeringする必要がある(もちろんTransfer Learningも役に立つ.)
  • ベンチマークで上手くやるコツとして、以下の方法がある.
    • アンサンブル:複数の独立したモデルを学習してそれらの出力の平均を使う方法.1~2%程度向上する可能性がありコンペでは勝てるかもしれないが計算コストが高いためプロダクションにはあまり使えない.
    • Multi-crop at test time: Data Augmentationと同じ方法で異なるバージョンのテスト画像を作り出し(例えば10-cropという手法では元画像と反転画像をトリミングして10枚のテスト画像を作り)、それらの出力結果を平均する方法.アンサンブルに比べて学習時間が少なく、モデルも1つで済むためメモリに優しい.
  • モデルを作るにあたっての方針.
    • 誰かが頑張ってhand-engineeringしたモデルを使おう.
    • OSSを使おう.
    • 学習済みモデルを使ってFine-tuningをしよう.