>100 Views
November 12, 19
スライド概要
2019/10/07
Deep Learning JP:
http://deeplearning.jp/hacks/
DL輪読会資料
Shake-drop by keras DLHacks 論文実装 (2019.10.7) AlgoAge 林佳音
Agenda ➤ 選定理由 ➤ 概要・アーキテクチャ詳細 ➤ Shake-shake ➤ Stochastic ➤ Random depth (Resdrop) erasing ➤ Shake-drop ➤ 実装 ➤ 実験
選定理由 ➤ 画像認識タスクで過学習してしまった ➤ ➤ imgaugやハイパーパラメータの調整では治らず 中間層にaugmentationを入れる手法を使ってみる ➤ Dropout等より効果があるという研究結果(後述) ➤ shake-shakeかshake-dropか? ➤ ➤ DLHacksで既にshake-shakeの論文実装はされていた ➤ しかもshake-shakeは既にkerasの実装が出ていた ➤ shake-dropの方が過学習抑制効果が強い shake-dropをkerasで実装する ➤ 過学習を解決したいモデルがkerasで書かれていたので
Shake-shake 概要 ➤ 書誌情報 ➤ ➤ Shake-Shake regularization ➤ 著者:Xavier Gastaldi ➤ ICLR2017(workshop) ➤ 実装(PyTorch) 参考資料 ➤ DLHacksでの論文実装
Shake-shake 概要 ➤ モチベーション ➤ resnetのoverfitを解決したい ➤ ➤ data augmentationは今まで入力画像に対して使われてきたが、 中間層の特徴表現にかけても良いのでは? 結果 ➤ 単体で使った場合test errorsでbest score(当初) ➤ CIFAR-10: 2.86% ➤ CIFAR-100: 15.85%
Shake-shake アーキテクチャ ➤ ➤ Residual unitの最後にランダムな係数(0~1)をかける ➤ 通常のResidual unitならこう(2branchの場合) ➤ shake-shakeの場合(0<=α<=1) ➤ 2つの分岐をランダムに混ぜる(shake) ➤ 特徴の割合が変わってもロバストになる 要素ごとにではなく、特徴マップ全体にかける
Shake-shake アーキテクチャ ➤ forwardとbackwardで係数を変え、Test時は0.5(期待値) ➤ ➤ 実験結果から Unitごとに係数を変える (元論文より転載)
Stochastic depth (resdrop) 概要 ➤ 書誌情報 ➤ Deep Networks with Stochastic Depth ➤ ➤ 著者:Gao Huang, Yu Sun, Zhuang Liu, Daniel Sedra, Kilian Q. Weinberger ➤ 人工知能学会第33回全国大会(2019) ➤ 実装(pytorch) 参考資料 ➤ 解説記事
Stochastic depth (resdrop) 概要 ➤ モチベーション ➤ ➤ ResNetの学習時間を短縮したい 手法(ざっくり) ➤ Residual unitをランダムにdropする ➤ ➤ 正則化の効果あり 出力に近いunitほどdropさせやすくする ➤ “期待値で見た時の層”が浅くなる
Random Erasing 概要 ➤ 書誌情報 ➤ Random Erasing Data Augmentation ➤ ➤ ➤ 著者:Zhun Zhong, Liang Zheng, Guoliang Kang, Shaozi Li, Yi Yang 実装(PyTorch) 参考資料 ➤ 実装記事
Random Erasing 概要 ➤ モデル正則化のための新しいaugmentation手法 ➤ ➤ 1日違いで発表されたcutoutとよく似ている モチベーション ➤ 画像の場合、dropoutしても相関関係で補完できてしまう ➤ ➤ 正則化の効果が薄い 入力画像をランダムにdrop
Random Erasing 概要 ➤ 手法(ざっくり) ➤ マスクをするか否かランダムに決める(推奨50%) ➤ 何%をマスクするかランダムに決める(推奨2~40%) ➤ アスペクト比をランダムに決める(推奨0.3~1/0.3) (元論文より転載)
Shake-drop 概要 ➤ 書誌情報 ➤ ➤ ResNetsに対する新たな正則化手法ShakeDropの提案 ➤ 著者:山田 良博, 岩村 雅一, 黄瀬 浩一 ➤ 人工知能学会第33回全国大会(2019) ➤ 実装(Torch) 参考資料 ➤ 解説記事
Shake-drop 概要 ➤ ➤ モチベーション ➤ shake-shakeは2branchのResidual Unitを前提にしている ➤ 1branchにshake-shakeを無理やり組み込んでも不安定になる ➤ 簡単に実験したらエラー率77.99%だったとのこと ➤ ResDropの手法を組み込んで安定化を図る 結果 ➤ shake-shakeを超えてtest errorsでbest score(当初) ➤ CIFAR-100: 12.19%
Shake-drop アーキテクチャ ➤ ➤ Resdropはunitをdropさせていたが、それをshake-shakeに似たもので置き換え 上図はℓ番目のunitの構成 (参考資料より転載の上加筆) ➤ bℓは確率pℓで1, 1-pℓで0を取るベルヌーイ変数(なのでどちらかを通る) ➤ pℓ = 1 - ℓ/2L (L: unit数) ➤ 出力に近い(ℓが大きい)ほどPℓは小さくなり、shakeされやすくなる
Shake-drop アーキテクチャ (参考資料より転載の上加筆) ➤ pℓ=0(bℓ=0)の時全てのunitでshake ➤ pℓ=1(bℓ=1)の時は通常のResNetと同じ ➤ αℓ, βℓはスケーリングの一様乱数 ➤ ➤ αℓ=βℓ=0の時Resdropと同じ(unitがdropされるだけ) テスト時はforwardのスケーリングの期待値をかける
Shake-drop アーキテクチャ ➤ 以下の条件を満たすモデルで使用可能 ➤ 加算直前にBatchNormがある ➤ 加算直後にReLUがない ➤ 予備実験の結果(詳しくは記載なし) ➤ BatchNormが必要なのは、一度分布を揃えるためか? ➤ ➤ ➤ ➤ 揃えないとshakeの強さにバラつきが出そう ReLUが不要なのは、情報削りすぎになるから? 実験の際はこの条件を満たす構造に変更している 入力画像のaugmentationとしてrandom erasingを使用
Shake-drop アーキテクチャ (元論文より転載) ➤ αℓ: -1~1, βℓ: 0~1の時に最高 ➤ forwardのshakeは強い方が良い ➤ αとβの正負が異なる時、パラメータを戻すことになる ➤ 時々これが入ることで間違った方向に行きすぎなくて済む? ➤ βℓ: -1~1だとshakeが強すぎる
Shake-drop 実験結果 ➤ 1branchの時(元論文より転載) ➤ 正則化なし、Resdrop、Shake-dropで比較
Shake-drop 実験結果 ➤ 2branchの時(元論文より転載) ➤ shakeをbranch同士のaddの前に入れるか後に入れるか? ➤ 前がType-A、後がType-Bで、Type-Bの方が良かった ➤ 直感的には、初期値が違うだけのbranch同士でshakeしても意味なさそう ➤ 直進のやつとbranchとの比較でスケール見た方が確かに良さそう
実装 ➤ ➤ 参考 ➤ Shake-drop(Pytorch) ➤ Shake-shake(Keras) 実装 ➤ Qiita記事
実験 ➤ shakedropありなしで比較 ➤ ➤ その他の条件(データ数や学習率など)は同一 validation lossに20epoch改善が見られなければ打ち切り (kerasのearlystoppingを使用) ➤ 1epochが短いので20にした
実験結果 ➤ shakedropありなしで比較 ➤ 上がshakedropなし、下があり ➤ 左がtraining lossで右がvalidation loss
実験結果 ➤ ➤ validation lossの最小値 ➤ shakedropなし: 6423 ➤ shakedropあり: 6086 学習にかかった時間(1epochはどちらも約17分) ➤ shakedropなし: 48 epoch ➤ shakedropあり: 46 epoch