ディープラーニングをやる!②
Python を触り終わったので、今度はディープラーニングの勉強をしていきます。以前、ニューラルネット(パーセプトロン)を触ったことはあるので基本的なことは何となく知っていましたが、本を読んでいって、あまり知らなかったことをメモしていきます。
ニューラルネットの基本的なこと
- 中間層の活性化関数
- シグモイド関数・双曲線関数・ ReLU 関数
- 出力層の活性化関数
- 分類 → ソフトマトリックス関数
- 回帰 → 恒等写像
- 学習では、ミニバッチ学習を行うと良い(ミニバッチ数は 10 ~ 100 個くらいがいい)
ディープラーニング
中間層がたくさんあるやつという理解です。中間層を増やすと、誤差逆伝搬のような計算だけでは、学習を適切に行うことができなくらるらしいのですが、事前学習をおこなうことで、層を深くしても学習を適切に行えるようになるそうです。
事前学習の方法としては、オートエンコーダ(入力を正解にして学習するやつ)や制限ボルツマンマシンなどがあるようです。本では、事前学習の仕組みが、オートエンコーダをベースに説明されていました。各層が特徴量をうまく抽出できるようにオートエンコーダで 1 層ずつ事前学習を行い、次に、全体で教師あり学習を行うといった感じのようです。
次に、過学習に対する説明もありました。対策として 3 つほど紹介されていました。
- L1 正規化 : 特徴のない変数の重みを 0 に近づけ、特徴のある変数のみを抽出
- L2 正規化 : 変数の重みが大きいほど 0 に近づけ、重みの過度な増加を抑制
- ドロップアウト : あるその中のノードをいくつか無視して学習する
まとめ
ディープラーニングの基本的なことを読み進めておしまいです。次から、実装に取り掛かろうと思います。