はじめに
ICLR2017から正則化関連の以下の論文
[1] X. Gastaldi, "Shake-Shake regularization"
のまとめ。
arXiv:
https://arxiv.org/abs/1705.07485
著者のGithubコード:
https://github.com/xgastaldi/shake-shake
torchを使ってる。
概要
- 正則化の1つ
- ResNetのredisual block における 2 つの経路に対して順伝播時はランダムな掛け率 $\alpha$と$1 - \alpha$ で足し合わせる。
- 逆伝播時は $\alpha$ とは異なる $\beta$ を用いて計算する
しくみ
以下の[1]Figure 1 で説明する。
図のような residualなstreamが2つある場合を考える。単純なresidual blockだと
x_{i + 1} = x_i + \mathcal{F}(x_i, \mathcal{W}_i^{(1)}) + \mathcal{F}(x_i, \mathcal{W}_i^{(2)})
と3つを足す。
shake-shakeでは乱数 $\alpha_i \in [0,1]$ を発生させて
x_{i + 1} = x_i + \alpha_i \mathcal{F}(x_i, \mathcal{W}_i^{(1)}) + (1-\alpha_i)\mathcal{F}(x_i, \mathcal{W}_i^{(2)})
とする。(Figure 1 の左)
通常の勾配降下法で誤差逆伝播させると勾配はそれぞれ $\alpha$ 、 $1-\alpha$ で伝わるが、ここは別の乱数 $\beta \in [0,1]$ を発生させて、それぞれ $\beta_i$ 、 $1 - \beta_i$ とする。(Figure 1 の中央)
推論時はそれぞれ $0.5$ の掛け率で足し合わせる。(Figure 1 の右)
実験と結果
書きかけ
shake, even, keep の比較
- shake:shake-shakeをする
- keep:forwardでshakeした掛け率をbackwardでも使う
- even:0.5、0.5の掛け率を使用
としてそれをmini-batchレベルとimageレベルで行い、性能を比較した。使用したモデルはresnet系。用いたデータはCifar-10
imageレベルでforwardもbackwardもshake-shakeしたものが一番性能がいい。
他の有名モデルとの比較
Cifar-10で他の有名モデルとtest errorを比較したものが以下。
DenseNetやResNeXtに勝ってる。