【超初心者向け】村人(僕)が魔王(機械学習)に挑む轍(2)NN 復習

オウルです。

以前、参加した機械学習のセミナーから時間が経過してきたので、復習+分からないことを洗い出すことを目的として、まずはNeural network 画像の多クラス分類を自分の手を動かしながら、まとめておきます。

Neural network 画像の多クラス分類

データは”MNIST(エムニスト)”を使用します。

MNIST データは「手書き数字」と「正解ラベル(0~9)」のセットが70000セット(内訳:60000(学習)、10000(テスト))あるデータベースです。機械学習の入門のデータセットとしてもよく使われるようです。僕はセミナーで初めて知りましたけどね。

動作環境

セミナーでは自分のマシンに python の環境を準備して Spyder(IDE) で python スクリプトを実行して動作を確認というスタイルでした。

が、Colaboratory の方がはるかに環境の準備が簡単だと思ったのと、GPU が無料で利用できるということで、今回は、Colaboratory を使用します。

セミナーでは講師の方は GPU を使われており、僕は CPU で処理していましたが、同じ処理でもホント圧倒的に処理時間が違うので機械学習には GPU 必須だなと思ったのは今でも鮮明に覚えています。

python コード

MNIST データ

MNIST データのロード

まずは、MNISTの画像をダウンロードします。機械学習とは関係ありませんが、ダウンロード先ののURL 見てください。Amazon S3 使っているみたいですね。

データセットを見る

データを見る

何の手書き数字か確認するためにラベルを確認します。

画像の多クラス分類のコード

前処理

Neural Network はデータを1次元ベクトルとして入力する必要があるため、28×28画素の手書き数字は、1×784の1次元ベクトルに変換します。また手書き数字データは0から1の実数をとるように正規化します。

ラベルを one hot vector形式に変換

ネットワークの作成

Sequential という初めて見るモデルが登場します。調べてみると、Sequentialモデルは層(レイヤー)を積み重ねたもの。ここでは、最初に全結合ニューラルネットワークレイヤーの Dense を作成しています。Sequentialモデルの最初のレイヤーに入力の shape についての情報を与える必要があるらしく、それで出力空間の次元数である200と shape の情報にあたる input_dim=784 を指定しています。

Keras 公式:

続いて、Activation。どうやら、出力にどの活性化関数を適用するかを指定するらしい。ここで指定している活性化関数は ReLU とソフトマックスです。

$$y_k = \frac{\exp(a_k)}{\displaystyle \sum_{i=1}^n \exp(a_i)}$$

続いて、Dropout。Dropout は、過学習の防止のために訓練時の更新においてランダムに入力ユニットを0とする割合を指定します。

そして、最後にコンパイルです。学習を始める前に,compile メソッドで、どのような学習処理を行なうかを設定する必要があります。compile メソッドの引数は3つです。

最適化アルゴリズム

引数として、定義されている最適化手法の識別子を文字列として与える(rmspropやadagradなど)、もしくは Optimizerクラスのインスタンスを与えることができます。

損失関数

モデルが最小化しようとする目的関数です。引数として、定義されている損失関数の識別子を文字列として与える(categorical_crossentropyやmseなど)、もしくは目的関数を関数として与えることができます。

評価関数のリスト

分類問題では精度としてmetrics=[‘accuracy’]を指定したくなるでしょう。引数として、定義されている評価関数の識別子を文字列として与える、もしくは自分で定義した関数を関数として与えることができます。

学習

評価

認識率

まとめ

分かっていたことではあるが、実際に自分で手を動かして復習してみると??と思うことばかりでした。しかし、何をすべきかは少し見えてきた気がします。

  • Numpyをはじめとする機械学習に必要なライブラリの知識
  • 微分、ベクトル、行列、指数・対数、線形代数、統計の数学の基礎知識
  • 活性化関数、最適化、損失関数

などなど、あげればきりがないが、やはり重要なのは基礎。基礎を勉強しつつ、良質のサンプルを、まずは手を動かし、繰り返し実践して理解を深める路線で行こう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA