fbpx
  1. HOME
  2. ブログ
  3. IT技術
  4. 【後編】自作の誤差逆伝播学習法で手書き数字を認識させてみよう!【機械学習】

【後編】自作の誤差逆伝播学習法で手書き数字を認識させてみよう!【機械学習】

はじめに 〜後編〜

今回は、機械学習の要「誤差逆伝播学習法」を解説・実装してみる【人工知能】の記事で作成したコードを元に手書き数字を認識するプログラムを作ってみるの後半です!

コードの修正などを行なった前編はこちらです。

実際に手書き数字を認識させてみよう!

それでは、実際に動かして実験してみます。

実験は、以下のような実験条件とコード(main関数)で行なっています。

それぞれ処理ごとにコメントを書いているので参考にしてください。

ちなみにディレクトリツリーは、以下のようになっています。

 

実験条件

初期学習率0.1
学習率減衰×0.5 / 10 epochs

コード

出力結果

なんと訓練精度が約97.7%で、自分の手書き数字はいくつか間違えてはいるものの、大体予測ができています!

間違えた数字を見てみると、「6」「5」と間違えたりと確かに形が似ている数字です。

また何度か実験してみるとわかりますが、「9」「4」も比較的間違えやすいです。

なぜ完璧に識別できなかったのか?

いくつか原因が考えられますが、ひとつあげられるとしたら過学習(または過適合: Overfitting)していることが考えられます。

過学習
訓練データの精度は良くなるものの、未知のデータに対して精度が得られない現象

今回はテスト精度、つまり学習に使っていない未知データを使った精度も計算しています。

そのテスト精度は、「約44.8%」と高い精度とは到底言えません…。

また、学習過程での訓練精度とテスト精度を見てみてもテスト精度はなかなか伸びません。

【図 30エポックまでの訓練精度とテスト精度】

過学習の対策

過学習の簡単な対策としては、

  1. 学習データを増やす
  2. 良い学習データを使う
  3. 正則化項を誤差関数に加える

などがよく挙げられます。

1. 2. の学習データについては、今回8×8の小さな手書き数字データセットを用いたので、文字が潰れかけていて、普段私たちが書くような数字とは少しかけ離れています。

したがって手書き数字データセットは28×28の比較的解像度が良くデータ数の多いMNISTデータセットがよく用いられます

3. の正則化項については、過学習に陥ると重みが大きな値に発散してしまう現象がよく見られます

【図 大きな値に分散した重みが見られる例】

この現象から、重みが大きな値に発散しないように学習を進める手法があります。

他にも、Dropoutなど過学習を抑制する手法はいくつかありますがここでは割愛します。

実験に時間がかかる上にコーディングが複雑に

これも今回の実験でわかりますが、ネットワークが大きくなるほど、膨大な計算時間がかかります。

また、先のDropoutや正則化項などの新たな手法を加えていくほどコーディングは複雑になってきます。

自分でコードを書くことは大切ですが、最適なコードをかかないと無駄な処理が積み重なって時間がかかってしまい、トータルで見て時間と労力の無駄になることも多々あります。

フレームワーク

そこで、機械学習にはたくさんのフレームワークが提供されています。

有名どころであれば、「Tensorflow」「Keras」などが挙げられます。

これらは、基本的にPythonで動作します。

それゆえに「機械学習といえばPython」と言われているのです。

なぜ、同じPythonなのに処理速度に大きな差が出るかというと、Pythonで動く機械学習フレームワークの処理自体はCやC++で書かれているからです。

おわりに

今回は、自作の機械学習プログラムを使って、少し実用的な実験をしてみました。

実装を通してわかるように、シンプルな機械学習であればゼロから構築することはさほど難しい話ではありません。

しかし、ネットワークを大きくしたり、新たな機能を加えていくと一筋縄ではいかなくなってきます。

ですので、ある程度機械学習のしくみを理解できたら、既存の優秀なフレームワークに移行して快適な機械学習ライフに切り替えてみましょう!

また別の記事で、フレームワークを使った機械学習についてお話しできればと思います。

コード全体

 

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事