ディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。ディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。2020-01-20ディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。AI・機械学習知識の文系的まとめ今回は、ディープラーニングの「学習」の肝になるのは「微分」なんだということを、numpyだけで簡単なニューラルネットワークの学習をするプログラムを書いて確かめてみようかと思います。学習=誤差を小さくなるようにパラメータを更新するディープラーニングの流れのざっくりした下図で、太字の赤線にしている部分が「学習する」の部分です。前回のSOFTMAX→損失関数で計算した「誤差(ロス率)」を計算するところにフォーカスをあててみました。arakan-pgm-ai.hatenablog.comそこでも書いてますが、損失関数が出力する誤差ってでも共通していることは。正解に近いほど誤差として出力される結果は小さくなる。正解から遠いほど誤差として出力される結果は大きくなる。・・なわけですから、結局、学習の目指すところはそれをゼロに近づけていくことなわけです。その手段が「重み」とか「バイアス」などと呼ばれるパラメータの変更なのは、変更可能なものがそれしかないことを考えれば・・まあ、当然ですね。上の図をもっと乱暴にデフォルメしてみます。結局、こんな感じのことをグルグルと繰り返して、正解との誤差率(ロス率)をゼロに近づけていく行為が「学習」というもの・・みたいです。問題は「どれくらい更新するか」なんだな誤差が小さくなる方向にパラメータを更新する。口で言えば簡単ですが、どのくらい、どっちの方向(プラスかマイナスか)に変更するかをどうやって決めるのか?これなのですが。本を読んだ感じでは、どうやら「微分」して求めるみたいです。微分とは「変数の微小な変化に対応する、関数の変化の割合の極限(=微分係数)を求めること。」などと説明されますが。自分も学校で習った時にはちんぷんかんぷんでした。プログラムで書くと多少はわかりやすくなるので、ここはPythonの疑似プログラムで書いてみます。h)こんな感じですね。0.0001)の値を足し引きして、関数(f)で値をもとめて、差をとることで極限をもとめる・・、というわけです。