ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Aidemy-ディープラーニング基礎

今回はAidemyでディープラーニング基礎という講座を受講しました。
ディープラーニングについて無料で学べるのはすごいですね。

aidemy.net

MNISTを使い、手書き文字認識のDNNをKeras+Tensorflowで実現する内容です。
実際にコードを書いて動作をさせることができるので、ディープラーニングの大まかな流れを把握できますが、「ゼロから作るDeep Learning」という書籍の方が説明が詳しく、より深いところまで理解できるように感じました。

Aidemyの講座は概要をまず理解する目的としてはいいと思います。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

「 ゼロから作るDeep Learning」は数か月前に読んだので復習としてはちょうどよかったかな?
おさらいの意味も込めて勉強した内容をまとめます。

------------------------------------------

〇Kerasでの記述方法

■モデルの生成
インスタンスの生成

  from keras.models import Sequential
  from keras.layers import Dense, Activation

  model = Sequential()


②全結合層の定義

  model.add(Dense(128))
  model.add(Activation("sigmoid"))


コンパイルメソッドの設定(どのような学習を行うかを設定)

  model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"])



■モデルの学習(fitメソッド)
レーニングデータを順にモデルに入力し、 出力と教師データとの間の差が小さくなるよう少しずつ各ニューロンの重みを更新

  model.fit(X_train, y_train, verbose=1, epochs=3)

 X_train, y_train:トレーニングデータ、教師データ
 verbose:学習の進捗度合いを表示するかしないか
      1:表示する, 0:表示しない
 epochs:同じデータセットを使って何回繰り返し学習を行うか



■汎化精度の計算(evaluateメソッド)
損失関数の値と正解率が取得し、出力

score = model.evaluate(X_test, y_test, verbose=1)

 X_test, y_test:評価用 (テスト) の入力データと教師データ


■分類(predictメソッド)

predict(self, x, batch_size=None, verbose=0, steps=None)

 x: 入力データで,Numpy配列の形式。
 batch_size: 整数.指定しなければデフォルトで32
 verbose: 進行状況メッセージ出力モード,0または1。
 steps: 評価ラウンド終了を宣言するまでの総ステップ数(サンプルのバッチ)、デフォルト値のNoneならば無視
 戻り値:予測値を格納したNumpy 配列

 

〇ハイパーパラメータ

自動で最適値を学習できず、ユーザーが設定する必要があるパラメータ


●ネットワークの構造(隠れ層の数、隠れ層のユニット数)
  隠れ層の数や隠れ層のユニット数を多くすると、多彩な関数が表現できるようになる
  多すぎると学習が進みにくい、過学習になりやすくなる

ドロップアウト
  ユニットの一部が学習のたびにランダムに削除される
  ニューラルネットは特定のニューロンの存在に依存できなくなり、汎化性が上がる

model.add(Dropout(rate=0.5))

  ※rateは削除するユニットの割合でハイパーパラメータ

●活性化関数
  -シグモイド関数
  -Relu関数
  -ソフトマックス関数(確率に変換するため出力層で用いる)


●損失関数
  -二乗誤差(主に回帰モデルの誤差関数)
  -クロスエントロピー誤差(分類の評価に特化)


●最適化関数
  微分によって求めた値をどのように重みの更新に反映するかを定める


●ミニバッチ
  モデルの学習を行う際、一度にモデルに渡す入力データの数は変更可
   バッチサイズを1とする手法:オンライン学習 (確率的勾配降下法)
   バッチサイズを全データ数とする手法:バッチ学習 (最急降下法
   これらの中間となる手法:ミニバッチ学習


●エポック数
  同じ訓練データを使って学習させる回数
  エポック数は大きくすればモデルの精度が上がり続ける、というものではない