しろあんのさかな

ふーちゃのエンジニアブログ

Deep Learningを学び始めた女子大学院生がCourseraのImproving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimizationを受けて解釈してみた

CourseraのDeep Learning講義の2つ目が終わったので解釈したまとめです。今回の授業はImproving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimizationです。正則化を一切しない最急降下法をもちいたNN(ニューラルネットワーク)をベースラインとして、学習精度を高め、かつ高速に学習がすすむためにどのような工夫ができるかを学びました。

www.coursera.org

ちなみに1つ目の講義の記事はこちら

taiyaki-future.hatenablog.com

f:id:taiyaki_future:20190502011319p:plain
コース2修了証

内容

ニューラルネットワークは多層であればあるほど、モデルの表現力は高くなり、トレーニングデータに適合しやすくなります。いきすぎた学習は汎化性能を失いoverfitting(過適合)またはoverlearning(過学習)といわれます。1週目は、トレーニングセットの正しさ(bias)(小さい方が正しい)と汎化度(variance)(低い方が汎化している)の説明から入り、過学習をふせぐための代表的な手法をいくつか学びました。モデルが複雑になることで過学習してしまうので、反対の発想でいかにモデルを単純にするかを考えます。 L1,L2正則化はコスト関数にペナルティ項を与え、逆伝搬法による隠れ層の重みωの更新時に更新後の重みを0または小さくすることで、モデルを簡単にします。dropoutは各隠れ層で設定した確率で、学習時に使うニューロンを選択することで、使われないニューロンを作り汎化する方法です。L1,L2正則化、dropoutは隠れ層の重みを制限する方法ですが、その他にもData augumentation(画像なら回したものを学習に追加するなどデータを増やす), Early stopping(学習の早期打ち切り)、normalizing(コスト関数の等高線を整える)などを学びました。課題ではnumpyだけでL2正則化、dropout付きのNNを実装して、汎化できているかを視覚的に確かめました。また過学習を防ぐためにHe initializationという初期値の設定方法を学びました。

f:id:taiyaki_future:20190502120936j:plain
バイアス・バリアンス
2週目は最急降下法以外の有名なOptimizerを学びました。最急降下法はバッチ勾配降下法とも呼ばれますが、全てのトレーニングデータを学習に使うためデータ数が大きい場合は特に学習に時間がかかります。そこで確率的勾配降下法(stochastic gradient descent, SGD)でランダムに一つのデータを選んだり、ミニバッチ勾配降下法でトレーニングデータを分割して少ない入力で学習させたりして短い時間で学習させます。これらの方法は勾配降下法の式を変えずに実現しますが、式自体を変え、一つ前の状態だけでなく、数回前のあたいも考慮することでより早く収束するという考え方のMomentum, RMSProp, Adamというやり方を学びました。式は追いましたが、Momentum, RMSPropをとりいれたAdamが一番性能がいいということくらいしかまだ違いとして認識できていません。Adamの欠点は前二つに比べてハイパーパラメータが多いのでチューニングが難しいことでしょうか。

3週目は、バッチ正則化、ソフトマックス関数、Tensorflowの使い方を学びました。 バッチ正則化は少し難しかったのですが、たとえば猫分類器を作ろうとして、トレーニングデータに黒猫とその他の動物しかなかった時、うまく特徴を抽出して黒猫以外の猫も猫として分類できるようにするための制約です。数学的には学習中に隠れ層の入力に偏りが生まれないようになるべく平均的な要素のみを学習できるようにしています。利用すると学習の精度、速度共に向上するようです。ソフトマックス関数は2つ以上の分類に利用される活性化関数です。この関数は出力の和が1になるように各要素の確率を抽出できます。今回の課題で指の形を0〜5に分類するときに利用しました。課題ではついにTensorflowを利用してAdamを利用した分類器を作りました。はじめにインスタンスを作ってからセッションを走らせないと実行されないことが慣れるまで大変だったのですが、なんとか終えました。

感想

今回は英語を日本語に翻訳してくれている動画が少なかったので少し大変でした。わからない部分は動画を止めてネットで調べたり、深層学習系の本や、カステラ、はじパタに頼りつつという感じでした。カステラ本(PRML)は数式や前提知識の問題でまだ全然思うように読めません。買ってもらったり借りられたりと本に恵まれた環境で助かってます:>
ノートの写真に誤字脱字が多くて恥ずかしいですが、動画を見ながら走り書きしたものなので...すみません。

参考になった本

おまけ

3週目の課題で、指で0,1,2,3,4,5を作ったものを分類する課題があったので、例のごとく関係のない画像を入れてみることにしました。

  • 韓国のハート
    人差し指一本を立てた"1"と判断しています。(親指が人差し指と認識されたのかな)
    f:id:taiyaki_future:20190502011305p:plain
    韓国のハート
  • 後輩に教えてもらって練習した今風の若者のハートマーク(綺麗につくるのが難しいです)
    親指と人差し指をくっつけて丸を作った"0"と判断しています。0~5のなかなら私も0だと思いました。
    f:id:taiyaki_future:20190502011310p:plain
    最新のハート