[ 機械学習 ] MNISTデータの画像認識実装(ライブラリ不使用) 3.モデル再作成 ~ 画像認識まで

[ 機械学習 ] MNISTデータの画像認識実装(ライブラリ不使用) 3.モデル再作成 ~ 画像認識まで

本記事は、学習機能を伴ったニューラルネットワークを誤差逆伝播法を用いて定義しなおして学習を行い、画像認識を行うまでを実装していきます。

画像データの準備、およびモデルの定義1回目と学習失敗の経緯については下記の記事を参照ください。

[ 機械学習 ] MNISTデータの画像認識実装(ライブラリ不使用) 1.知識まとめ~データの準備まで

[ 機械学習 ] MNISTデータの画像認識実装(ライブラリ不使用) 2.モデル作成 ~ 失敗まで

記事構成

  1. データの準備
  2. モデルの定義(前回記事)
  3. 学習の実行(前回記事)
  4. 失敗まとめ(前回記事)
  5. 画像の判定実験

 

前回のまとめ(2. モデルの定義〜失敗まで)

前回の記事では、ネットワークに必要な関数とモデルを定義し、学習を行うところまでを行いました。
そして学習を実行する段階で、次のような問題が発生しています。

  1. 損失の減少率が緩やかである
  2. 学習数が不足しているが、学習に時間がかかりすぎる

そこで、次のような解決策を実行することにしました。

  • 勾配計算を行う処理で誤差逆伝播と言う方法を使用することにより、学習にかかる時間を減少させ、学習数を増やす。

詳しくは、前回記事を参照してください。

 

誤差逆伝播

誤差逆伝播とは、勾配計算を効率的に行うための手法です。
前回のモデルでは、パラメータ一つ一つに対して微分計算を行い勾配を算出していましたが、結果は変えずに過程だけを最適化したものが誤差逆伝播です。

この手法についてはまた後ほど記事にまとめたいと思うので、今は技術の概要だけを抑えるに留めておきたいと思います。

実装

関数とモデルの再定義

では改めて、使用する関数とモデルを定義していきます。
前回の関数とネットワークを改修していることに加え、新たに誤差逆伝播用のクラスもいくつか追加しています。
プログラムの詳細についての説明はここでは割愛しますが、方法が変わっただけで、やろうとしていることは前回から変更していません。

関数の定義

誤差逆伝播用のクラスの定義

ネットワークの定義

学習の実行

ここまでで準備が整いましたので、早速学習を行なっていきます。

前回の学習数は200でしたが、今回は処理が高速化したので学習数を 500000 にまで増やしてみました。また、各隠れ層のノードの数も増やしてみています。それでも処理に要した時間は、前回と同じか、それよりも短いくらいです。

画像ではちょっと見辛いですが、最終的に損失は 0.6 程度まで減少しています。
各回の減少率は恐らく前回とさほど違いはないのですが、母数が 200 から 500000 に増えていますので大幅な現象が見込めています。

画像の認識

では最後に、画像の認識を行なってみたいと思います。

画像データ群から適当なデータを取り出して、そのデータにひもづくラベルと、そのデータに対してモデルが算出する結果を見比べてみます。

 

「3」の画像を、適切に3と判断できていることがわかります。

まだまだチューニングの余地はあるので正解率を測ると恐らくそれほど高くはないと思われますが、画像認識の実践という目的は十分に果たせました。

 

今回のまとめ

  1. 勾配の計算に誤差逆伝播法を用いることで、計算処理が高速化する。高速化すると学習数を増やすことが容易になる。
  2. モデルがもつパラメータの損失が小さくなるようにモデルを学習させることにより、画像識別が可能となる。

 

全体における反省

最後に、今回の一連の実装での自己反省をまとめて終わりたいと思います。

  1. 処理にかかる時間を考慮できていなかった。
    部分の実装では処理時間というものがそれほど気にならなかったからスルーしていたものの、今回のように 大きなデータを扱うと、時間が大きな問題になることがわかった。最初から考慮できていれば、もっと一貫したプログラムになっただろうし、記事も良い感じでまとまったはず。
  2. 誤差逆伝播への方針転換の不恰好さ
    最初は誤差逆伝播を使用しないつもりで実装しており、思うような結果が出ずに文字通り時間を浪費してしまった。また途中で半ば諦めるように誤差逆伝播に方針転換してしまったため、全体的な統一が取れなかった。下調べや計画性が不足していた。
  3. 誤差逆伝播への理解不足
    誤差逆伝播については、完全に理解できていない状態での使用となってしまった。この点についてはもう一度学び直す必要がある。

 

 

以上。

MachineLearningカテゴリの最新記事