学習率の調整

深層学習で最も重要なパラメータは,学習率(learning rate: lrと略される)である.深層学習とは,重み調整のために非線形最適化をいいかげんに行うだけの反復法であり,要は勾配に適当なステップサイズを乗じて現在の値から減じる操作を繰り返す.この非線形最適化におけるステップサイズのことを,学習率と呼んでいるだけなのだ.

これをチューニングするために,fastaiでは学習器オブジェクト にlr_find() というメソッドを準備している.

学習器learnを作成して(ここではMNISTのデータと単純なcnnから成る学習器が作られていると仮定する)learn.lr_find() をした後に,learn.recorder.plot()とすると,以下のような図が得られる.

これは学習率を小さな値から1反復ごとに2倍にしたときの損出関数(目的関数のこと)をプロットしたものだ.実際の反復ごとの学習率は,learn.recorder.plot_lr()とうつと見ることができる.

損出関数が最小になるのは,学習率が1e-2(0.01)あたりだが,この谷に入る(損出関数か下降し始める)あたりが良いと言われている.ここでは,学習率を5e-3(0.005)に設定して実行してみる.

learn.fit(1,5e-3)

結果はこんな感じだ.

epoch	train_loss	valid_loss	accuracy
1	0.019725	0.023071	0.992640   

実際には,学習率を反復ごとに変えて行う手法が良い.アニーリング(焼き鈍し)という最適化ではおなじみの(古典的な)手法だが,機械学習の世界では新しいらしい.そのうちに紹介しよう.

この記事が気に入ったらサポートをしてみませんか?