ディープラーニングの基本的なところ
教科書:ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ディープラーニングってのは要するに…
インプットに対して、アウトプットどうなの?というところを
小難しく処理する方法なワケで
僕、なかなかいい例え話を思いつきましたw
名付けて「バッターボックスに立ったバッターは、如何にしてバットにボールを当てるのか、学習過程を学習してみようか(長)」
・インプット(の信号)は、ピッチャーの手からボールが離れること(01に単純化できる)
・アウトプットはバッターがバットを振る(01に単純化できる)
・まずは話を単純化するために、一定の場所にボールが飛んで来ることを想定しようや
・飽くまで「ニューラルネットワークとかディープラーニングってこんな感じ」の例えです。間違ってる等指摘は要りません
過程0 早い応答は善か?
インプット(ピッチャーが投げた)の途端に、アウトプット(バットを振る)結果 空振り…
いや、バカでしょ… ┐(´д`)┌
過程1 んじゃアウトプット待つべ
インプット + ディレイ(適当≒初期値) = アウトプット
結果は上よりもいい感じになったけど、空振り…
過程2 んじゃ待ち時間を調整するべ
インプット + ディレイ(変数)= アウトプット
↑変数が重み
結果は上よりも更に「ちょっといい感じ」になったけど、やっぱり空振り…
↑「ちょっと」が「勾配」
・
・ ← 「ちょっといい」を積み重ねて、「重み」を最適化(学習)させる
・
過程xxx
インプット + ディレイ(最適化された重み) = アウトプット
結果、高確率で当たる(かもしれない)
この例えで言えば、「ディレイ」の部分が1つのニューロン。
入力に対して、このニューロンが反応(発火)するかしないかで、出力が決まる(若干の嘘風味だけど)
では、球種が増えたら?
ニューロンを増やす(層を増やす)
インプット + ディレイ + ストレート + = アウトプット
+ カーブ +
+ シュート +
+ フォーク +
…
えっ、じゃぁ、前後の球種は?
ニューロンを増やす(w)
学習して重みを最適化
えっ、じゃぁ、風向きとかは?
ニューロンを増やす(w)
学習して重みを最適化
えっ、じゃぁ、その日の体調は?
ニューロンを増やす(w)
学習して重みを最適化
…
ぶっちゃけ、基本的な考え方はコレだけ。
ニューロンが増えれば、入力に対するアウトプット(に含まれている成分)が増える。
この場合、アウトプットは「振る/振らない」の2択だけど、その選択に至る思考過程に深みが出ると言うか…。
んじゃ、
端からニューロンめっちゃいっぱい用意しとけばよくね?
んでめっちゃたくさん、いろんな球種を学習させたらよくね?
そしたら最強バッターできるじゃん♪
多分その通り
…ただし最適化のための計算コストがアホみたい膨大にかかるです。
今に至ってこの計算量の問題に対しては
行列計算が得意なGPUが用いられるわけですが、
コレについてはまた別のお話。