以前、過学習について確認しようとしていましたが、その前に学習率について確認します。これまでのところマイロ将棋では、最適化手法としてSGD(確率的勾配降下法)を使用しています。ディープラーニングでは、教師データを元にパラメータの調整を行いますが、調整の仕方としていろいろな方法が考えられています。SGD(確率的勾配降下法)は調整の仕方としては基本的な方法です。マイロもあまり詳しくは理解できていませんが、教師データとの誤差が大きいほど教師データに近づくように大きくパラメータを調整するという方法です。違っていたらすみません。他の最適化手法としては、モーメンタムSGD、ADAM、RMSProp等があり、いろいろと試してはみたのですが、これまで試した結果ではマイロ将棋ではSGDが最もよく収束するようです。扱うデータの性質によっても、どの最適化手法が適しているのかは変わると思います。
SGDには学習率を表すαという設定があって、この設定によって一回の学習でどのくらいパラメータを動かすのかを決めることができます。αを大きくすると一回の学習で大きくパラメータが動き、評価する結果も大きく変わります。大きく動くので少ない学習回数で教師データに近づきますが、モデルが教師データに近い値を出せるようになってくると、パラメータを動かしすぎることで逆に教師データから遠ざかってしまうということも起きてきます。そうなったとしても次の学習でまた教師データに近づくように調整が入るので、結果的には収束に向かっていきます。
パラメータを小さくすると、一回の学習で少しだけパラメータが動くようになります。少ししか動かないので、教師データに近づけるためにはたくさんの学習が必要になります。モデルが教師データに近い値を出せるようになってくると、パラメータを動かしすぎて教師データから遠ざかるということが無くなってくるので、その分早く収束します。
たくさん学習することを前提にすればαの値はできるだけ小さくした方が良いのかなと思いますが、αを小さくすることで局所解から抜け出せなくなってしまうのではないかという点が気になっています。本当はもっと誤差を縮められるパラメータがあるのに、調整を少しずつしかしないと、もっと誤差が縮められる場所に到達せずに、別のあまりよくないところで調整を続ける結果になってしまう気がしています。
簡単に結論が出るものではなさそうですが、α値により学習結果がどのように変わるのかを確認してみました。CNN(持ち駒分離)のモデルでα値を0.15、0.1、0.05に設定してそれぞれがどのくらい誤差を縮める結果になるのかを調べた結果が以下のグラフです。過学習の影響を抑えるために、教師データ毎の学習回数は少なめにしています。
ここまで試した結果では、α値が大きいほど、初めの内はよい結果になっています。小さいα値の0.05の方も、初めの内は誤差が大きいですが、学習を進めるにつれて着実に誤差を縮めています。局所解につかまる場面には出会っていないようです。