zuminote

個人的な勉強記録

PythonとKerasによるディープラーニング 第1章 メモ

ディープラーニングの基礎というのはもう散々こすられているネタであり、ネットの記事も豊富にあって必要に応じてググって見に行くんだけれども、まあわかんなかったらググればいいか、という認識でいるせいで「あれ?そもそも損失関数って何してるんだ?」みたいなのが永遠に発生し続けており、いい加減嫌になったのでいったんここでディープラーニングの基礎の基礎をまとめておく。

Qiitaとかでは1億回書かれてることだし、もっと良記事がネットの海にはごまんとあるが、ここは私の勉強記録スペースなので好きに使う!

github.com

第1章 ディープラーニングとは何か

そもそもディープラーニングとは、「いくつもの表現の層を重ねたモデルを学習させる機械学習の手法」のことである。この層に使われるのが、「ニューラルネットワーク」。

ディープニューラルネットワークでは、入力値から目的値へのマッピングが単純なデータ変換(層)を深く積み重ねていくことによって実現され、そうしたデータ変換がサンプルから学習される

ディープラーニングに限らず、機械学習の目標は一言で言うと、「ある入力値xを入れると正しい出力値yをうまいこと返してくれる関数をつくる」ことである。

ディープラーニングでは、入力値が出力値yになるまでに多くの層を通り、各層で値の変換が行われていくわけだが、その各層で入力データに対して変換のために掛け合わされるパラメータが、「重み」である。ディープラーニングの学習過程では、最終的に目的値yがうまいこと出てくるようにこの重みが調整されている。

しかしディープラーニングの重みはときに数千万個などという単位で存在しており、あるパラメータの値を変更すると他のパラメータにも影響が及ぶので、適切なパラメータを見つけ出すのは気の遠くなるような作業になる。

そして、パラメータを調整するにも、調整した結果答えに近づいているのか遠ざかっているのかが分からないと手のつけようがない。そこで、正解からどのくらい誤差があるのかを観測するのに使うのが、「損失関数(loss function)」である。これは「目的関数」とも呼ばれる。

(個人的に、「重み」「パラメータ」とかにしても、ディープラーニング用語は同じものを指していても複数の呼称があったりするのが余計に話をややこしくしてる一因なんじゃないか??と思ったりする…。)

ディープラーニングの基本原理は、この損失関数をフィードバックして使用し、損失値が少なくなるように、重みの値を少しずつ調整していくことである。そしてこの重みを調整するのが、「オプティマイザ」である。

オプティマイザはバックプロパゲーションと呼ばれるアルゴリズムを実装します。バックプロパゲーションディープラーニングの中心的なアルゴリズムであり、誤差逆伝播法とも呼ばれます。

…。なんかこの説明はいまいちどうなんだろうと思ったので、詳しくは『ゼロつく』とかを読んで補足したほうがよさげ(いま手元にない)

2章に続きます。