この記事では、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人につき何個配れるか」
が解けなくなってしまいます。
( 現実で同じことが起こるかは置いといて… )
同じパターンなのに、
数値が変わった途端にパターンが認識できなくなってしまう!
ぉ恐ろしいぃぃぃぃ!ぉぉ恐ろしやぁぁ!
…ということです。
みなさん、お気をつけて…
完
コメント