自然言語処理のBERTでほぼ100%精度を上げられる→学習率の調整手法を共有したいと思います。
そこまで難しい手法ではないですが、知っている人は意外と少ないです。
具体的には、全ての層で同じ学習率を使うのではなく、層ごとに異なる学習率を設定することです。
手動と自動の2つの調整方法があります。
①手動
まずBERTは学習率に非常に影響されやすいので、学習率を少し大きくしたらモデルがうまく学習できなくなります。
そのために、基本的な学習率の設定は「1e-5から5e-5」の範囲でおすすめです。
BERTは学習済みモデルで、inputに近い下層はあまり高い学習率は必要ないです。
一方で、outputに近いBERTのトップ層はtask specificなので、ここでは少し高めの学習率の設定が必要です。
具体的には、output層には5e-5、BERTには2e-5に設定するなどの方法が考えられます。
もう少し複雑なやり方なら、層ごとに徐々上げていく方法もあります。
②自動
これはSchedulerに学習率の調整を任せます。Schedulerは自動的に学習率を調整してくれるパラメータです。
私がよく使うのはCosineAnnealingWarmRestartsというSchedulerです。
Schedulerを使ったら、学習率が周期的に変わりますので、他のパラメータの調整も楽になります。(例えばstepの調整とか要らなくなります)
興味ある方ぜひ試してみてください。