Kerasのマニュアルに、次のような記述例がある。
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999,・・・
こいうのがあると、Adam()もしくは、Adam(lr=1e-3)とするのが普通だと思うが、これは、使っているネットワークによって違ってくるということを知らないと、時間の無駄が生じる。(無駄にした時間は成長の糧、と思ってはいるが・・・)
下に示すようなちょっと重たいCNNについて、学習率の効果を調べてみた。学習率lrは、2e-5から1e-3まで変えてみた。2e-5から5e-4までは進み方の違いはあっても学習はほぼ順調に進んだが、1e-3では、へまをしたかな、と思うくらい、全く学習が進まなくなった。その半分の大きさの5e-4では全く問題なかったので、非常に驚いた。
記述例がデフォルト値でないこともあるが、まずは学習できるものと思い込み、学習が進まないと、自分のモデルがおかしいのではないかと思ってしまい、試行錯誤するのだが、モデルが大きくなると、やたら時間がかかってしまって困る。
普段は1e-4あたりを常用しており、今回は、意図的に学習率を変えてみてわかったことなので、自分にとっては実害は殆どなかったのだが・・・。
cohen's_kappaの計算のために借り物のコードを使ったとき、学習が全く進まず、原因がわかるまで何時間もかかった。そのプログラムでは、optimizerがAdadelta()となっていたのである。おそらく、Adadeltaだからではなく、デフォルトの値が自分のモデルには適さなかったのだと思う。(時間があれば、調べて報告します)
ということで、optimizerの学習率に、ご用心!
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 148, 148, 64) 1792
_________________________________________________________________
conv2d_2 (Conv2D) (None, 146, 146, 64) 36928
_________________________________________________________________
conv2d_3 (Conv2D) (None, 144, 144, 64) 36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 72, 72, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 70, 70, 128) 73856
_________________________________________________________________
conv2d_5 (Conv2D) (None, 68, 68, 128) 147584
_________________________________________________________________
conv2d_6 (Conv2D) (None, 66, 66, 128) 147584
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 33, 33, 128) 0
_________________________________________________________________
conv2d_7 (Conv2D) (None, 31, 31, 256) 295168
_________________________________________________________________
conv2d_8 (Conv2D) (None, 29, 29, 256) 590080
_________________________________________________________________
conv2d_9 (Conv2D) (None, 27, 27, 256) 590080
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 13, 13, 256) 0
_________________________________________________________________
conv2d_10 (Conv2D) (None, 11, 11, 512) 1180160
_________________________________________________________________
conv2d_11 (Conv2D) (None, 9, 9, 512) 2359808
_________________________________________________________________
conv2d_12 (Conv2D) (None, 7, 7, 512) 2359808
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 3, 3, 512) 0
_________________________________________________________________
global_average_pooling2d_1 ( (None, 512) 0
_________________________________________________________________
dense_1 (Dense) (None, 5) 2565
=================================================================
Total params: 7,822,341
Trainable params: 7,822,341
Non-trainable params: 0
_________________________________________________________________