ニューラルネットワークを完全に理解するために
機械学習、もっと言えばニューラルネットワークでよく使われる活性化関数に、シグモイド関数というものがあります。 ニューラルネットワークの学習におけるバックプロパゲーションのステップでは、ネットワークの各重みに関する損失関数の導関数を求めなければなりません。 そのためには、活性化関数の導関数を求める必要があります。 この記事では、シグモイド関数の導関数の求め方に関する混乱を解消することを目的としています。
はじめに、シグモイド関数を以下に示します。 0.99330714907と出るはずです。
微分のために、この関数は次のようにも書けます:
この関数について最初に気づいたことは、この関数が関数の合成であることでした。 最初の関数は
で、2番目は
Calculusで思い出してみてください。 関数の合成がある場合、微分とは、2番目の関数に対する1番目の関数を、変数(この場合は x)に対する2番目の関数で掛け合わせたものです。 このように、
つまり、xに関するシグモイドの微分は、mに関するシグモイド関数の微分にxに関するmの微分をかけたものなんですね。 この関数合成則は、クロスキャンセルをすることで、欲しかった元の微分が得られる一種の中間計算と考えることができます:
これでシグモイド関数が関数合成だとわかったので、あとは微分を求めるだけですね、、、、、。
- 中間値であるmに関するシグモイド関数の微分を求める
- xに関するmの微分を求める
- これらの値を掛け合わせる
mに関するシグモイドの微分
ここで、中間値mに関してシグモイド関数がどう見えるか見ておきましょう。
これについてmに関する微分を求めるのは、べき乗則を覚えていればかなり簡単にできます。
x^nの微分はxのn-1乗のn倍になる。
そこで、
Multiply the derivatives
Recall we had to find two intermediate derivatives, then we were multiply them.これは、いったん、中間導関数が見つかったら、それを掛け合わせるということです。 2400>
さて、掛け算の仕方を覚えていれば、やっとこれで終了です!(笑)さて、次は微分の掛け方です。
これで、この値をシグモイド関数の導出値として使用することができます。 しかし、この結果を操作した後に面白いことが起こります。 2400>
シグモイド関数の微分はシグモイドの1倍からシグモイドを引いたものだ、と書き直せることがわかったのです。 うわー。 騙された気分です 🙂
。
コメントを残す