コンピューターが出来る制御は

  • 演算
  • 条件分岐
  • 繰り返し

に分けられます。
実際にプログラムするためには、学習という行為を上記の制御を組み合わせてできる探索として与える必要があるでしょう。

では、損失を少なくするように学習することはどのように達成されるべきでしょうか?
本節では小さい例を用いて理解していきます。

簡単なモデルの学習

モデルのパラメータが一つである一番単純な場合を考えてみます。

  • 縦軸 : そのモデル損失
  • 横軸 : モデルのパラメータ

例えばこの表であれば

  • モデルのパラメータが1であるとき、損失は10
  • モデルのパラメータが2であるとき、損失は5

となります。 損失が少ないほどより良いモデルということでしたので、 もし現在のモデルが1のパラメータを持っているのであれば、2の方向に近づけるべきでしょう。

この作業を繰り返すことで損失が少ない方向に移動することを確認ください。
つまり、この行為が学習と呼ばれるものです。

拡張してみよう

先ほどの例ではパラメータ数が一つだったので、横軸が一次元(線)で表すことが出来ました。
一次元の場合、少し左右の値を見ればどちらの方向に動かせばよいか分かります。

しかし、パラメータが2つになった場合、横軸は平面となります。
そうなると、今度は平面上でどの方向に動かすか決める必要があります。
さて、ニューラルネットワークのパラメータ数は一万十万あることは当たり前です。
そうなると、横軸は十万次元の空間となります。
こう考えると、一次元の場合のように、全ての方向を試してみる事が現実的でないことが理解できるでしょう。

勾配法

実は損失を少なくする為に、実際に試す必要はありません。
パラメータの動かす方向は、傾きさえ分かればいいのです。
傾きは、この関数を微分すれば分かりますね。
傾いている方向へほんの少し動かすことで、損失は少なくなることが期待できます。

このような探索のことを勾配法といいます。
勾配法にも色々なアルゴリズムがありますので、次節以降で学んでいきましょう。

損失関数は微分可能であること

と前章で条件が付けられていました。 これは傾きを計算するために必要だからだったからなのです。

まとめ

  • 学習とは損失が小さくなるようにモデルのパラメータを探索する事である。
  • 実際に損失を計算しなくても、傾きさえわかれば探索できる。
  • 関数の傾きから探索する方法を勾配法という。