ディープラーニングの基本を思い出した
就活するときにデータサイエンスを勉強していた一環でディープラーニングを少しやっていたのだが、その後興味が持続せず放っておいていた。最近興味が復活してきたので、もう一回やってみようと思って今日ディープラーニングの基礎を思い出していた。
とりあえず、前に通読した、
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
をぱらぱらと読み返したのと、新しく
- 作者: Francois Chollet
- 出版社/メーカー: Manning Publications
- 発売日: 2017/12/22
- メディア: ペーパーバック
- この商品を含むブログを見る
を2章まで読んだ。
後者の本は著者が Keras の作者なんだけど、隙あらば Keras の自慢を入れてくるところと、今後の AI の発展について急に熱く語り出すところが良かった。
思い出したこと
numpy.ndarray
の使い方- 損失関数(代表的な例:回帰→二乗誤差、分類→交差エントロピー誤差)
- 誤差逆伝播法
- ミニバッチ学習による確率的勾配降下法
- BatchNorm や Dropout などのテクニック
よかった話
- AI の定義:普通は人間がやるような知的なタスクを自動化するための努力
- 古典的なプログラミングはデータと規則を入力して答えを得るが、機械学習ではデータと答えを入力して規則を得る
- 機械学習の文脈での学習とは:入力データの有用な表現手法を正解データからのフィードバックの助けを借りて探すこと
- ディープラーニングは人間の脳とは全く関係ない数学的モデルと考えるべき
- Kaggle では、構造化データを扱う問題では gradient boost が、知覚的な問題ではディープラーニングが勝ってるので、結局みんな XGBoost と Keras の使い方を覚える必要がある
- ディープラーニングで扱うデータは、ほとんどの場合以下のカテゴリのいずれかになる
numpy
のブロードキャストの仕組み- 2つの array の
ndim
が異なる場合は次元の拡張が起きる - 次元が揃ったら、サイズの小さい方の array が繰り返されて大きい方の array のサイズに合わせられる
- 2つの array の
- ディープラーニングは行列演算の連鎖なので、結局連続した幾何学的変換であると思って良い。青色と赤色の紙を重ね合わせてぐしゃぐしゃに丸めることを考える。この状態を入力データとして、この丸まりを解きほぐしていって2枚のまっすぐな別々の紙に戻すのがディープラーニングで分類問題を解くことに対応する
- ディープラーニングは、例えば467238647273856次元くらいでの話なので、勾配降下法などにおいて、1次元とか2次元での直感が通用すると思わないことが大事