だれかの備忘録

主に自分用。

TensorFlowで学習Step数を増やすと精度が上がるか試してみた

前回は学習率を振ってみて精度がどのように変わるかを確認しました。
TensorFlowで学習率をいろいろ変えてみた - だれかの備忘録

学習率が小さいと学習は遅くなりますが学習を多くこなせば精度も良くなるのではと思いました。そこで今回は学習Step数を増やすとどこまで精度が良くなるのかを確認しました。

前回の結果

Step=1000で最高精度を出した学習率0.038と他の代表的な3つを精度順に並べました。

学習率 Step数 精度
0.038 1000 0.981
0.01 1000 0.967
0.001 1000 0.909
0.0001 1000 0.618

学習率0.038は一番精度が良くなりましたが、精度が0.1以下になることもあり安定しません。安定してそこそこ精度が出る学習率0.01以下3つについて学習Step数を増やしてみました。

学習Step数を5倍に増やす

サンプルプログラムでは1000Stepで学習終了です。これをとりあえず5倍の5000Stepにしてみるとこうなりました。
f:id:positive_bedridden:20181209194236p:plain
精度0.9以上を拡大すると↓のようになりました。
f:id:positive_bedridden:20181209195410p:plain
学習率0.01で精度0.984になり0.98を超えました。しかしまだ学習途上のように見えます。

学習Step数をさらに5倍(サンプルの25倍)に増やす

さらに5倍の25000Stepまで学習を増やします。
f:id:positive_bedridden:20181209194841p:plain
同様に拡大図↓
f:id:positive_bedridden:20181209194848p:plain
学習率0.01では精度0.990にまで上がりました。そろそろ飽和しているように見えるので、精度0.99ぐらいが限界なのかもしれません。
学習率0.001以下ではまだ上昇中です。学習を増やせば精度は上がっていく可能性はありそうです。

学習率と精度上昇との関係は?

じゃあ学習率0.001とか0.0001でもっと学習を続けたら精度は0.99ぐらいになるのか?というのはさすがにきりが無いので試しませんが、学習率と精度上昇との関係を確認して推測してみます。
下図ではStepと学習率の積を横軸にしてプロットしています。学習率0.0001はStep25000まで、0.001はStep2500まで、0.01はStep250までの範囲を同じ軸に重ねてみました。
f:id:positive_bedridden:20181209202254p:plain
すると、学習率0.0001と0.001はほぼ一致し、0.01もかなり近いグラフになりました。ということは、3つの学習率の違いは学習速度に影響するものの学習を重ねれば精度は同じに収束しそうです。
安定した学習をするために学習率を意図的に低めに設定したとしても学習を増やせば同じ精度が得られる可能性が高いといえると思います。

まとめ

今回は学習Stepを増やしたら精度がどこまで上がるか確認しました。また、学習率が小さくても学習Stepを増やせば高い精度が得られそうというのがなんとなく分かりました。
今回はニューラルネットワークの性質を確認するために学習Stepを無駄に増やしましたが、実際には学習の過程で学習率を変えて効率よく学習を進める方法を採用するのが良いと思います。機会があればそれも試してみます。