ニューラルネットワークを完全に理解するために
![](https://miro.medium.com/max/1280/0*nPckd5w-WZxAUPpV.png)
機械学習、もっと言えばニューラルネットワークでよく使われる活性化関数に、シグモイド関数というものがあります。 ニューラルネットワークの学習におけるバックプロパゲーションのステップでは、ネットワークの各重みに関する損失関数の導関数を求めなければなりません。 そのためには、活性化関数の導関数を求める必要があります。 この記事では、シグモイド関数の導関数の求め方に関する混乱を解消することを目的としています。
はじめに、シグモイド関数を以下に示します。 0.99330714907と出るはずです。
微分のために、この関数は次のようにも書けます:
![](https://miro.medium.com/max/60/1*XcZaBh3il0ooTtYChZTsiQ@2x.png?q=20)
この関数について最初に気づいたことは、この関数が関数の合成であることでした。 最初の関数は
![](https://miro.medium.com/max/60/1*bDiSa_0gjyaKffPGj-zsXg@2x.png?q=20)
で、2番目は
![](https://miro.medium.com/max/60/1*1J0Oric7dnSzYlMb0oXHOA@2x.png?q=20)
Calculusで思い出してみてください。 関数の合成がある場合、微分とは、2番目の関数に対する1番目の関数を、変数(この場合は x)に対する2番目の関数で掛け合わせたものです。 このように、
![](https://miro.medium.com/max/60/1*euGFm_1TRovvYQkje9BZ9g@2x.png?q=20)
つまり、xに関するシグモイドの微分は、mに関するシグモイド関数の微分にxに関するmの微分をかけたものなんですね。 この関数合成則は、クロスキャンセルをすることで、欲しかった元の微分が得られる一種の中間計算と考えることができます:
![](https://miro.medium.com/max/60/1*9qgk0QD8Agn7bw1x2G4BPg@2x.png?q=20)
これでシグモイド関数が関数合成だとわかったので、あとは微分を求めるだけですね、、、、、。
- 中間値であるmに関するシグモイド関数の微分を求める
- xに関するmの微分を求める
- これらの値を掛け合わせる
mに関するシグモイドの微分
ここで、中間値mに関してシグモイド関数がどう見えるか見ておきましょう。
![](https://miro.medium.com/max/60/1*en0hcpeSaFAY8IbXm3vOwA@2x.png?q=20)
これについてmに関する微分を求めるのは、べき乗則を覚えていればかなり簡単にできます。
![](https://miro.medium.com/max/60/1*ii-9jyo9DzjdvxD_NewuPA@2x.png?q=20)
x^nの微分はxのn-1乗のn倍になる。
そこで、
![](https://miro.medium.com/max/60/1*RRPcS47LvAXygCRQdxIVRQ@2x.png?q=20)
さて、元の値mを式に代入すると、次のようになります。 2400>
![](https://miro.medium.com/max/60/1*YgwWo7IGFfHCI2QL8BE2JA@2x.png?q=20)
最後に、
![](https://miro.medium.com/max/60/1*DSOvR25jPyjRLxZFQ5w2Qw@2x.png?q=20)
イェイ!となるわけです。 ステップ1が完了しました。
xに関するmの微分を求める
ここでm:
![](https://miro.medium.com/max/60/1*HY6mNDzKbnm0KkL7BTqgFg@2x.png?q=20)
微分を求めるために、xに関して各項の微分を求めなければなりません。 第1項は簡単です:
![](https://miro.medium.com/max/60/1*xqN5kF3GuEhCyVuzlZ2qpQ@2x.png?q=20)
第2項は少し複雑です。
Let’s Let
![](https://miro.medium.com/max/60/1*u6dIXvsIhIWvHXSAj3TPUQ@2x.png?q=20)
and
![](https://miro.medium.com/max/60/1*NmjZIoawG2sIaj4aCAIrqg@2x.png?q=20)
となります。
We know that
![](https://miro.medium.com/max/60/1*yJaPKPIIqNpfV8zHw_XTwA@2x.png?q=20)
If getting to e^ u is not clear, をお読みください。
さて、もう一度連鎖法則を使って、
![](https://miro.medium.com/max/60/1*FcQNYyN8wm69ZPQlcXZYkQ@2x.png?q=20)
では、先ほど計算した微分を掛け合わせて、xに関する微分を出せばいいんですね。
![](https://miro.medium.com/max/60/1*9hhIYJlrrEnX9jA9j5P2wA@2x.png?q=20)
ステップ2については以上となる。
![](https://miro.medium.com/max/60/1*oQbxRgKqYbPcLDpLuCAkzw@2x.png?q=20)
Multiply the derivatives
Recall we had to find two intermediate derivatives, then we were multiply them.これは、いったん、中間導関数が見つかったら、それを掛け合わせるということです。 2400>
![](https://miro.medium.com/max/60/1*aTlg-GrkdIkD05aV349w4g@2x.png?q=20)
さて、掛け算の仕方を覚えていれば、やっとこれで終了です!(笑)さて、次は微分の掛け方です。
![](https://miro.medium.com/max/60/1*gCzsgoQkdQVVjJi8G5l9uA@2x.png?q=20)
これで、この値をシグモイド関数の導出値として使用することができます。 しかし、この結果を操作した後に面白いことが起こります。 2400>
![](https://miro.medium.com/max/60/1*HL-p9alkMl4EvVAGNTS9bQ@2x.png?q=20)
シグモイド関数の微分はシグモイドの1倍からシグモイドを引いたものだ、と書き直せることがわかったのです。 うわー。 騙された気分です 🙂
。
コメントを残す