ゼロから作るDeep Learning(10日目)
こんにちは、筋肉めがねです。
久しぶりにフランクフルトに行ってきました。目的はお肉を買いに行く事です。まつぼっくりちゃんが、フランクフルトのKleinmarkthalleに「すきやき」に使えるお肉を準備してくれるお店がある、と言うので早速調達しに行って参りました。
フランフルトのDomの近くにKleinmarkthalleはあるのですが、そこは大きな体育館のような建物の中に、小さなお店が所狭しと並んでいるところなんです。目的のお肉は無事に購入する事ができましたが、それよりも気になるお店を一つ見つけました。「Metzgerei Schreiber」という名前のお店で、年配の女性がソーセージを売っているお店です。何が気になるって、お店の前にとても長い行列ができていたんですよね。
味が美味しいから行列ができているのか、それとも他の理由で人気があるのか。でも、お店の横のスタンドバーでソーセージを食べている人たちは皆さん黙々と食べていて、そして、お店がとても豪華な飾り付けで外観が良い訳でもない。
良く良く観察してみると、何か一つの要素だけが飛び抜けている、という訳ではなくて、お客さんが体験する一連の流れそのもの、一つのパッケージが、お客さんが対価を払っているサービスなんですよね。
Kleinmarkthalleを訪れるという行為、人気があるお店の前で行列に並ぶという行為、お店の看板である年配の女性の方とお話をするという行為、ソーセージを買って食べてみてやっぱり普通の味だよね、と再確認する行為。まあ、結局食べてはないので味については想像なんですけれども。
それでも、久しぶりに古き良き昔ながらの商売を目の当たりにし、気持ちの良いフランクフルト滞在となりました。
それでは本日も「ゼロから作るDeep Learning」を進めていきましょう。
本日は4章の続きです。
前回の記事では、ニューラルネットワークにおける「学習」というフェーズが、「合ってなさ加減」を最小化する、という事を書きました。さらに、「合ってなさ加減」を最小化する、という事をy=x^2のグラフおよび接線の傾きを使って説明しました。
本日は、重みパラメーターを変化させて「合ってなさ加減」を最小化する、という事を、微分、及び偏微分、という考え方を使って理解していきます。微分とは、入力の変化に対して、どれだけ出力が変化するか、という事、そして偏微分とは入力が複数ある微分の事ですね。
前の記事でも使った接線の傾きの事を、本書では「勾配」と呼んでいます。勾配とはある地点における傾きですね。それでは、偏微分と勾配、それが「合ってなさ加減」を最小化する、という事にどう繋がるか、変数が二つある二次関数のグラフを描画して理解していきましょう。
まずは、グラフとそのためのコードを示します。
上のグラフを盆地と捉えましょう。感覚的に理解しようとするならば、偏微分というのは、この盆地のある地点における傾き、どの方角にどれだけ地面が傾いているか、と言う事を求める事です。
さらに感覚的に理解するために、ボールを1つこの盆地に投げ込んで見ましょう。投げ込まれた当初は、ボールに勢いがあるので、ボールはいろんな箇所に動きますね。ボールのx座標、y座標をそれぞれ、ニューラルネットワークのおける重みパラメータと考えます。ボールは自然と少しづつ速度を落としていきます。そして、動きもだんだんと小さくなっていきますね。(重力という力が働いてるので、ボールの動きが段々と小さくなっていきますね。)
ボールの高さを「合ってなさ加減」としましょう。最終的にボールは盆地の一番低いところに落ち着きますね。その時のボールの位置(x座標、y座標)が、ニューラルネットワークが学習を終えた時の最適な重みパラメーターとなるわけですね。
ドイツもだいぶ寒くなってきました。こういう時は暖かいところへ旅行に行きたくなります。
それでは、本日は以上でございます。