ベクトルの各成分は一つのピクセルの濃淡値を表しています。10次元のベクトルとします。期待されるネットワークからの出力です。ここで$T$は転置演算子であり行ベクトルと列ベクトルを入れ替えます。なるべく近くなるような重みとバイアスを見つけるアルゴリズムです。私たちはこの本では一貫してコスト関数という用語を用いますが、ニューラルネットワークの論文や議論では他方の用語も頻繁に使われるので心に留めておいて下さい。依存しますが表記をシンプルにするためここでは敢えて明示しません。距離関数を示す記号です。2次コスト関数と呼びましょう。error)としても知られるものです。非負になることが分かります。出力がほぼ等しくなると分かります。なるような重みとバイアスを見つけられれば、私たちの訓練アルゴリズムは上手く機能した、と言えます。出力が近似しない場合は上手く機能ているとは言えません。言い換えれば可能な限りコストを小さくできる重みとバイアスの組を見つけたいのです。それを私たちは勾配降下法というアルゴリズムを使って行います。2次コストを導出するのでしょうか?結局のところ私たちが知りたいのはどれだけの画像がネットワークによって正しく分類されたかではないでしょうか?直接分類の正解数を最大化せずに2次コストを最小化するのはなぜでしょうか?その理由は分類の正解数がネットワーク中の重みとバイアスの滑らかな関数にならないことです。重みとバイアスに小さな変更を加えても正解数が変化することがほとんどないため、コストを改善するのに重みとバイアスをどう変更したら良いか分からないのです。代わりに2次コストのような滑らかなコスト関数を用いた場合、重みとバイアスに対してどう小変更を加えればコストを改善できるのかが簡単に分かるようになります。これが2次コストの最小化を用いる理由であり、2次コストの最小化をした後ではじめて分類の精度を調べることにします。使った2次コスト関数を選択する理由についてはまだ不思議に思っているかもしれません。択ではないでしょうか?もし、仮に違うコスト関数を選んだ場合、最小化する重みとバイアスの組は全く異なってくるのではないでしょうか?それはもっともな心配で、後で私たちはコスト関数を再訪していくつかの修正を行うことになります。\nonumber\end{eqnarray}はニューラルネットワークの学習の基礎を理解するのにとても良く機能するので、今はこのまま続けることにします。最小化する重みとバイアスを見つけることです。これは良設定問題ですが、いまの定式化のままではたくさんの注意をそらす構造を持っています。重みとバイアスの解釈、背後に潜んでいるシグモイド関数、ネットワーク構造の選択、MNIST等があります。これらが明らかにするのは、私たちは膨大な構成の大部分を無視して単に最小化の面に集中しているということです。そこで、私たちはコスト関数の詳細な式やニューラルネットワークとのつながり、その他諸々については一旦忘れましょう。その代わり、私たちにはたくさんの変数からなる関数がシンプルに与えられており、その関数を最小化したいと考えることにします。私たちは、このような最小化問題を解決できる勾配降下法と呼ばれるテクニックを開発するのです。その後、最小化したいニューラルネットワークの具体的な関数に戻ってきましょう。最小化しようとしているとしましょう。取って実数の値を返す関数なら何でもかまいません。私たちはニューラルネットワークに特化した文脈で考えているのではありません。二つの変数からなる関数だと考えることが効果的です。呼ぶことにしましょう。今ここで与えられた関数であれば、私たちはグラフを眺めて最小値を見つけられます。たくさんの変数からなる複雑な関数であるためグラフを眺めるだけでは最小値を見つけられないでしょう。この問題の一つの攻略法は、微積分を使って解析的に最小値を見つけることです。極値を見つけられるでしょう。一つの変数、あるいは少数の変数であればおそらく上手く行きます。変数が大量にある場合は悪夢に変わるでしょう。変数を必要とします-もっとも巨大なニューラルネットワークのコスト関数は10億の重みとバイアスを持っており極めて複雑になります。二つの変数の関数で考えれば洞察があると主張した後に"変数が二つ以上の場合はどうなってしまうでしょう?"と、二つの段落の中で立場を変えて申し訳ありません。二つの変数の関数で考えることが効果的だという私の言うことを信じてください。最後の2段落は概観の分析を行っているのです。数学に関する名案では、複数の直観的イメージを巧みに扱い、学習する際のイメージの適切な使い分けを伴うのです。)さて、微積分は機能しません。幸いなことに、非常に良く機能する一つのアルゴリズムを示唆する見事な例え話があります。手始めに関数が谷であるかのように想像してみましょう。上のグラフを見てボールが谷の斜面を転がり落ちていくところを想像してください。普段の経験から、ボールは最終的に谷底まで転がっていくと分かるでしょう。この考え方を関数の最小化に使えないでしょうか?私たちは(想像上の)ボールのスタート地点をランダムに選び、その後ボールが谷底へ転がっていく動きをシミュレーションするのです。導関数(あるいは二次導関数)を微分すればこのシミュレーションが行えるでしょう。これらの微分係数は、谷の局所形状やボールがどう転がるかといった私たちが知るべき全てのことを教えてくれます。あなたは私が述べた内容に基づき、私たちが摩擦力や重力の影響等を考慮し、ニュートンの運動方程式を書き始めると思うかもしれません。実際には、ボールの転がりの例えをそう深刻に扱ったりはしません。最小化アルゴリズムを考案しようとしているのであり、物理法則の精密なシミュレーションを開発するわけではありません。ボール目線の観点は想像力を刺激するためのものであり、思考を制限するためではありません。ボールを動かした時に何が起こるか考えてみましょう。選ぶ方法を見つけましょう。転置演算子(再掲)なので、行ベクトルと列ベクトルを入れ替えます。書き換えるのですが、これに着手する前に、勾配のハマりやすい箇所を明らかにしておきたいと思います。記号をどう考えて良いのか分からずに戸惑います。数学における一つの記号ということは自明で-上記定義のベクトル-それは二つの記号を使って表記されています。勾配ベクトル"とあなたに教えるため旗を振る記号の一つです。それ自体で独立した数学の構成要素(例えば微分演算子のようなもの)であると見なせもしますが、こういった観点は私たちには必要ありません。次のように変形できます。変化に関わっており、これはちょうど私たちが勾配と呼んでいるものです。選び方を教えてくれるということです。は小さい正のパラメータ(学習率として知られるもの)です。なることが分かります。等式が近似する限りです)。\nonumber\end{eqnarray}を私たちの勾配降下アルゴリズムのボールの"運動の法則"と定義しましょう。その後、私たちは以降もこの規則を使い続けます。大域最小値に到達します。計算し逆の方向へと動かすことを繰り返すことで谷の斜面へと"降下"させる方法です。これを視覚化すると以下のようになります。ここで留意すべきは勾配降下法の規則が現実世界の物理的な運動を再現していないということです。現実世界のボールは運動量を持っているので、斜面を転がり、(少しの間)そのまま登っていくかもしれません。その後、摩擦力によってはじめて谷を降り始めるでしょう。選ぶ規則は"今この瞬間だけ降りなさい"というものです。\nonumber\end{eqnarray}をよく近似させる必要があります。変化がとても小さくなり勾配降下法の動きは非常に遅くなってしまいます。頻繁に変更してアルゴリズムが遅くなりすぎないようにします。これがどのように行われるかは後の章で理解することにしましょう。二つの変数の関数である場合を説明しました。多くの変数の関数であっても何も問題はありません。関数であると仮定します。二変数の時と同様に、次のように設定します。負の値となるように保証されます。複数の変数の関数であっても、この定義を繰り返し更新して当てはめていけば、最小値への勾配に繋がる道が得られます。この規則は勾配降下法の定義とみなすことができます。間違い、勾配降下法が大域最小値の発見を妨げる場合があります。この点は、後の章でまた戻って綿密に調べます。最小値を探索する最適戦略であるとさえ感じます。動かそうとしていると仮定してみましょう。