サポートベクター回顧

プログラミングとか機械学習とか画像処理などに興味がある人のブログというかメモというか。アウトプット苦手なので頑張ります。

ResNetの論文読み:Deep Residual Learning for Image Recognition

今更感半端ないですがResNetの論文読んだのでまとめました。

https://arxiv.org/abs/1512.03385

どういう論文?

  • ネットワークを従来よりもかなり深くすることができる「residual learning framework」を提案。このframeworkを使用したネットワークであるResNetを構築し、深い層のネットワークで高い精度を得た。

先行研究と比べてどこがすごい?新規性は?

  • 層をさらに深くしても精度が悪化しないどころかむしろ向上しているところがシンプルにすごい&新規性
  • Inception moduleもskip connection形式を採用しているが、それには学習するパラメータが存在している。residual learningのskip connection(identity)はパラメータが存在しないため軽量&計算上で発生しやすい問題(過学習・勾配消失など)が発生しづらい。

技術・手法・アイデアのポイントは?

Residual Learning

  • H(x) = F(x) + x を学習することができる。
    • H(x) はいくつか積み重なった層の出力で学習したい関数、xは層の入力とすると、残差はF(x) := H(x) - x と表すことができる。元の写像はH(x) = F(x) + x と表すことができる。
    • ここで、H(x)においてxが最適でF(x)の部分が必要ない場合はweightは0。恒等写像になる。
    • skip connectionが無くてもH(x)で入力xに似たような表現や恒等写像を表せそうだが、層を増やすと精度が下がるあたりおそらくうまくいっていないだろう→ならば明示的に表して学習させよう!と言った考え

Network Architectures

  • residual learning構造に加えて、3 x 3 の畳み込みをベースにしている。
  • 50-layer以降はbottleneck architecturesを使う(1 x 1の畳み込み)。これを使うことで計算コストを抑えつつ層を増やすことができる。

どうやって有効だと検証した?

  • プレーンネットワーク、およびそれにresidual learning構造を加えたResNetを比較して有効と検証した。
  • 見ての通り、プレーンネットワークだと深い層の方が学習誤差が大きいが、ResNetだと深い方が学習誤差が小さくなっている。
  • また、18層の方はプレーンネットワークとResNetの精度はほぼ同等だが、ResNetの方が早く収束していることが確認できた。

議論の内容は?

  • 従来まではニューラルネットワークの層を増やせば増やすほど精度が下がることが見られていた。
    • 本来ならば層を増やせば増やすほど複雑性が増すため精度が上がるはず。
    • 原因は以下が考えられる。
      • 勾配消失・勾配爆発
        • しかしこの問題は重みの初期化方法やBatch Normalizationによってほぼ解決したはず。
      • 恒等写像を表現できないからでは?
        • ある一定のところまで層を追加しても精度は上がり続けるが、それにさらに層を追加すると精度が下がり始める。
        • ただこの場合、さらに追加する層を恒等写像(入力をそのまま出力する層)にすれば精度は下がらないはず。精度が下がるということは恒等写像を表現できていないのでは...
  • residual learningによって上記問題を解決。
    • 従来手法では恒等写像を学ぶことが難しかったがそれを解決できた。
  • 個人的にはresidual learning(というかskip構造)によって勾配計算を一部分スキップし、勾配消失・爆発問題に対応しているものだと思っていた。がそういうわけでは無く、やはりBatch Normalizationなどで勾配問題は対応できているっぽい。