|
Tritanの論文で紹介されていたMixNetを試してみました。
比較対象のResNet(192x10block)とほぼ同じパラメータ数で
+114 ELO 、さらにSwishに変更で +134 ELOでした。
192x10block(3x3)のResNetに対する勝率。mb64 はミニバッチ64での比較。それ以外はミニバッチ128
勝 引 負 局数 ELO モデルのサイズ
358- 56-386 800 ( -12) mobile_20b 10MB 半分で互角。強い。Tristanの論文から
385- 44-371 800 ( 6) mobile_30b 15MB 1.5倍でも棋力上昇なし
490- 75-235 800 ( 114) mobile_20b_1024 mb64 38MB 強いけどサイズが大きい
461- 90-249 800 ( 94) mix 512-128 3x3,5x5 mb64 16MB
441- 74-285 800 ( 68) mix 512-128 3x3,5x5,7x7 mb64 22MB
503- 85-212 800 ( 132) mix 768-196 3x3,5x5 mb64 33MB
500- 55-245 800 ( 114) mix 640-160 3x3,5x5 mb64 24MB
489-117-194 800 ( 134) mix 640-160 3x3,5x5 mb64 24MB, swish
492- 44-264 800 ( 101) mix 640-160 3x3,5x5 24MB
376- 72-352 800 ( 10) 256x20b 89MB サイズが4倍(192x10bは26MB)
299- 62-439 800 ( -61) 192x 5b 13MB
ただ、ResNetのパラメータ数を4倍(256x20block)にしても +10 ELO とほとんど同じだったので、
もっと学習を収束するまでやらないと、最終的な差は何とも言えない気はします。
Caffeだと学習にResNetの4倍ぐらいのメモリを必要とし、また学習時間も4倍かかるので、
使い勝手としてはResNet+Swish、がいいのかもしれません。
MixNetの構造はTristanの下の論文で紹介されている bottleneck_block を
丸ごと構造 3x3 と 5x5 で並列にしています。
DepthWiseだけを並列、だとなぜかCaffeで動きませんでした。
filters = 512 -> 640
trunk = 128 -> 160 (3x3が80、5x5が80)
にそれぞれ変更して、これが19ブロックです。
大雑把に書くと下のよう感じ。
conv 160 1x1, bn,relu 1層目のみ
------------------------------------------ bottleneck block, これを繰り返し
conv 640 1x1, bn,relu <- input
dw_conv 640 3x3, bn,relu dw...depthwise convolution
conv 80 1x1, bn -> A
conv 640 1x1, bn,relu <- input
dw_conv 640 5x5, bn,relu
conv 80 1x1, bn -> B
concat <- A, <- B
eltwise <- input
------------------------------------------
CaffeのDepthwise layerは下を使ってます。
https://github.com/yonghenglh6/DepthwiseConvolution
MixNetとSwishで+104 ELO
https://524.teacup.com/yss/bbs/3845
Mobile Networks for Computer Go (Tristanの論文)
https://www.researchgate.net/publication/343848982_Mobile_Networks_for_Computer_Go
caffeでの実装(ミニバッチ128ではメモリ24GBでは動かず、64にしてます。それにしても長い・・・)
https://github.com/yssaya/komaochi/blob/master/learn/aoba_mix_640_swish.prototxt
|
|