まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【ひとり読書会】ディープラーニングの数学(第39回)

どうも、カタミチです。

さて、今日も「最短コースでわかる ディープラーニングの数学」のひとり読書会、やっていきたいと思います。

今日も「発展編」。6節からですね。本書のひとり読書会も、いよいよラストスパートってことになりますかね。さぁ…いきましょう!

 

11-6. 過学習対策

f:id:feh_asama:20220303154446j:image

この節は、過学習についてです。G検定でも頻出の、学習データに過剰に適応してしまう…ってやつですね。

これに対する策の1つ目は、学習用データと検証用データを分けて、検証用データに対する精度が落ちてきたらそこで学習を打ち切る…ってやつで、別の本だと「early stopping」みたいなカッコイイ名前が付いていました。シンプルにして非常に効果的!らしいです。

2つ目の策はドロップアウトです。「ノードを間引く」ってイメージだったんですが、層と層の間にドロップアウト層を追加する形で実現するようですね。ドロップアウトするノードの比率だけ設定しておいて、学習のたびにランダムにノードを選択する形で間引くようですね。

3つ目は正則化です。過剰適用したデータの特徴として、重み行列・重みベクトルの係数の絶対値が大きくなることに注目した対策ですね。損失関数にペナルティー項を加えることで対応します。ちょっと奥が深そうなので、もう少し深掘ってみたいヤツですねー。

4つ目は、Batch Normalization…とあります。どうやら「正規化」のことのようです。正規化と言うと、データの範囲を0〜1にすることと覚えていたんですが、「データ系列の平均を0、分散を1にすること」も正規化と呼ぶようです。後者は「標準化」と呼ぶんだと思っていたんですが、正規化とも呼ぶのか(ふむ)。いずれにせよ、入力データに関する前処理になりますね。以前の回でプログラミングの時に出てきた正規化の目的は「データ計算がオーバーフローしないため」でしたが、過学習対策としても有効なようですね。

 

11-7. 学習の単位

f:id:feh_asama:20220411182738j:image

この節では、学習の単位について改めて整理がされています。

バッチ学習は、第7章〜第9章まで使っていたやつですね。学習用データをすべて使って損失関数を求め、その微分から勾配を降下させる、そしてそれを繰り返す…というやり方です。安定して収束するというのはイメージつきますが、処理に一番時間のかかる誤差逆伝播の計算回数が少なく済むから計算コストが下がる、というのは意外でした。なるほど。

で、ミニバッチ学習。これは取り出すデータ数を決めて、その数をランダムに取り出して損失関数を求め…というやり方ですね。第10章で使ったやつですね。しっかりコーディングして勉強したので、ばっちりイメージが付きます。どうやらやはり、取り出すデータ数は2のべき乗にすることが多いようです。深い理由は分かりませんが、何となくコンピュータに馴染みそうな感じではありますよね。覚えておきますかねー。

最後に確率的勾配降下法。オンライン学習とも呼ばれるようです。学習データをランダムに1個抜き出して損失関数を求め…というやり方のようです。つまり、ミニバッチ学習のバッチサイズ=1ってことになりますね。「ミニミニバッチ学習」って感じですねー。局所最適解に落ち込む可能性は下がるものの、結果が安定せず計算コストもかかるので、利用されないことが多いようですね。

 

ということで

今日の内容は、以前にさらっと舐めたことのある内容…のはずなんですが、以前触れたときより理解の深度が深まった実感があります。ディープラーニングの基本となる部分を数式レベルで理解したのがデカいですかねー。

さて、ついに次回で「ディープラーニングの数学」の「ひとり読書会」も最終回になりますかね。嬉しいような、寂しいような…。ともあれ、最後まで駆け抜けたいと思います!

ではまた。