【MNIST】機械学習のススメ!初心者向けにざっくり解説【チューニング/Python】

この記事は約5分で読めます。

この記事では、Pythonを用いた機械学習について

超☆ざっくり説明します。

  • 機械学習に興味がある
  • “validation” や “epoch” 等の役割がよくわからない
  • 「過学習」ってなんぞや

という方はぜひ読んでいってください!

⚠︎注意

ここでの説明はかなり噛み砕いたものとなります。

詳しい人が読むと

「あ〜それ厳密にはこうなんだよなぁ〜」と、

むず痒い思いをする恐れがあります。

お気持ちお察しします。語りたくなるものね。

全体の流れ

“MNIST”ってなんぞや?

MNISTは、大量の画像データのまとまりのことです。

どんな画像データかというと、

「手書き数字の画像」

「その画像が何の数字を表しているか(通称 “Label” )」

というデータとなります。

画像データには、

「訓練用のデータ×60,000」と「テスト用のデータ×10,000」

が含まれています。

例えるなら、問題集とテスト問題ですね。

今回は、この例えを多用させていただきますよ。

(補足)

訓練用のデータは「train data」「訓練用データ」、

テスト用のデータは「test data」「テストデータ」

と呼ばれています。

機械学習の流れ&勉強に例えてみた

左が機械学習の流れ、右が例えです。

画像データMNISTを読み込む

訓練用データで学習

(「Validation」がある場合、検証用データを用いて精度を算出)

「epoch」の数値だけ、「訓練用データで学習」に戻り、繰り返す

テスト用データで精度を評価

問題を仕入れる

問題集で学習

小テストや模試を用いて理解度を確認

問題集、小テストを繰り返す

試験本番で正解率を評価

詳しい手順と各数値について

前述した「機械学習の流れ」に沿って、

Pythonプログラム内の値について説明いたします。

画像データMNISTを読み込む

“import”で手書き数字の画像データをダウンロードします。

問題を仕入れる段階ということです。

前述しましたが、中身は

「訓練用のデータ×60,000」と「テスト用のデータ×10,000」です。

訓練用データで学習

さぁ、いよいよ学習開始です!

訓練用データを1回使い切るごとに精度が表示されます。

表示される場所は「accuracy:」の部分です(下図)。

accuracyの値 × 100 (%) で表示されます。

「Validation」がある場合、検証用データを用いて精度を算出

Validationの値は、

「訓練用データのうち、検証用に回して使うデータの割合

を指します。

(例) validation = 0.1 → 訓練用データのうち10%を検証用のデータとして使う。

これは例えるなら、小テストや模試ですね。

本当に学習ができているか、

問題集の問題しか解けない状態になっていないか、

丸暗記とかで学習した気になっていないか確認するわけです。

精度は「validation_accuracy:」に表示されます(下図)。

(補足)

検証用のデータは、「validation data」「検証用データ」と呼ばれ、

「ハイパーパラメータのチューニングに使用される」と説明されています。

ここでは、あまり専門的な単語は使いませんがな。

「epoch」の数値だけ、「訓練用データで学習」に戻り、繰り返す

“epoch”は、

「訓練用のデータを使い切る回数」

です。

(例) epochs = 5 → 訓練用のデータを5回使い切った後、テストをする。

これは例えるなら、

問題集を周回する回数ですね。

適切な回数を見つけてあげてね。

テスト用データで精度を評価

訓練用データを用いた学習が終わると、

テスト用データで最終的な精度を評価します。

まさに試験本番というわけです。

結果は、学習段階と同じように “accuracy” に表示されます。

過学習とは?

先ほどのepochの説明を読んで

「これって多ければ多いほどいいんじゃない?たくさん学習するわけだし」

って思ったかな?

けどねぇ、そう簡単にはいかないのよ…

「過学習」が起きるからね。

(validation を利用することでも防ぐことは可能)

「過学習」は、人に例えるなら…

算数で「4人に飴玉8個を均等に配ると、1人につき何個配れるか」

という問題が出たとします。

この問題のパターンを学習すれば、

数値が変わっても同じパターンなら解けるはずですよね。

「4人に飴玉16個を均等に配ると、1人につき何個配れるか」や

「3人に飴玉9個を均等に配ると、1人につき何個配れるか」などです。

しかし、過学習すると、

「4人に飴玉8個を均等に分け合うと、1人につき何個配れるか」

しか解けなくなり、

「4人に飴玉16個を均等に配ると、1人につき何個配れるか」や

「3人に飴玉9個を均等に配ると、1人につき何個配れるか」

が解けなくなってしまいます。

( 現実で同じことが起こるかは置いといて… )

同じパターンなのに、

数値が変わった途端にパターンが認識できなくなってしまう!

ぉ恐ろしいぃぃぃぃ!ぉぉ恐ろしやぁぁ!

…ということです。

みなさん、お気をつけて…

この記事はいかがでしたか?
  • (゜▽゜)さすが〜 
  • (⌒▽⌒)知らなかった〜 
  • ( ̄∀ ̄)すごいすごい 
  • はぁ?( ゚Д゚)つまんな 
  • BAD 
  • \(^o^)/ 

コメント

タイトルとURLをコピーしました