自分で決定しなければならないハイパーパラメータである学習率・バッチサイズ・エポックについて.
大学院での授業でKaggleコンペみたいなことをやらされていて,パラメータ調整に時間をかけたので.
学習率
学習率 大
一気に学習が進む.しかし一度の更新が大きすぎると最適解を飛び越えてしまい,無限に収束しない.
学習率 小
局所解に陥りがち.loss推移を追っていると,学習が局所解に陥っているか何となく分かる.学習の度に最終精度に差があるときも,その原因は局所解に陥っているからのときが多い.
バッチサイズ
バッチサイズ 大
学習が速く,かつ局所解にも陥りづらい.しかし,学習の束が大きいのでデータが平均化されてしまい,データの個性が失われ,結果精度が上がりづらい.
バッチサイズ 小
学習は遅く,局所解にも陥りやすい.一方,精度は向上しやすい.
スケジューラ
上記からハイパーパラメータ調整が面倒だということが分かったと思うが,ここで学習率をよしなに調整するためのスケジューラを導入する.大体,初期学習率は1e-01~1e-03くらいでいいと思う.
OneCycleLR
段階的に学習率を引き下げてくれる
ReduceLROnPlateau
評価値が改善しなかったら学習率を落としてくれる
エポック
エポックは大体学習が収束するまで.
結論
局所解に陥らずに,きちんと収束しているかが大事.loss推移を見て学習が局所解に陥っているか見る.局所解に陥っていたら,スケジューラの初期学習率を上げるか,バッチサイズを上げる.個人的には,スケジューラの初期学習率はどうせ下げてくれるので高めに設定しておき,バッチサイズをいじる.