pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

シグモイド関数の微分を理解する

ここにたどり着くまでに、微分対数を勉強する必要があった。。。とっても疲れた。

シグモイド関数とは?

ニューラルネットワーク

或る細胞の内部状態を出力値に変換する関数として、シグモイド関数がよく使われる。入力値の絶対値がいくら大きくても出力値は0~1の範囲に収まり、細胞に近い反応をする関数と言える。入力値が負ならば0.5以下、正ならば0.5以上の出力値となる。

http://www.sist.ac.jp/~kanakubo/research/neuro/neuro2.png

シグモイド関数微分が、ニューラルネットワークで利用される。

シグモイド関数の式

広義

           1
f(x) = -----------
       1 + e^(-ax)

aをゲインと呼ぶ。ゲインによる傾きに変換を与える事が可能


狭義

           1
f(x) = -----------
       1 + e^(-x)

ゲインは1。

シグモイド関数微分

微分の中に関数自体が含まれるのが特徴

微分の公式

f'(x) = (1 -f(x))f(x)

確かに微分の中に、関数自体( f(x) )が含まれている。

微分の公式の証明

手作業で微分してみる。

①スタート

           1
f(x) = -----------
       1 + e^(-x)


②指数法則を使い展開

f(x) = (1 + e^(-x))^-1

微分しやすくするため、関数を合成関数の形態に展開。

1) 以下の定義をする。
u = 1 + e^(-x)

2) uを使って、元の式を表記。合成関数の表記になる
f(u) = u^(-1)

合成関数の微分は、2つの関数の微分を掛け合わせたものになる。

④関数uを微分する。

公式: (x^n)' = nx^(n-1)

f(u) = u^(-1)
→右辺を公式に従い展開すると微分になる

f'(u) = -1 * u^(-1-1) = -u^(-2)

⑤新たに定義した関数uの微分をする。

以下3つの公式を使う
a) (a^x)' = a^x * loge(a)
b) (e^x)' = e^x
c) (ax)' = a

u = 1 + e^(-x)

・1は定数のため微分するとゼロになる
・eはネイピア数

ここでも合成関数の微分を使う
-xを関数vとして以下の合成関数にする。

v = -x
u = e^v

関数vは、cの公式で微分して以下
(v)' = -1

関数e^vは、bの公式で微分して以下
(e^v)' = e^v

よって合成関数の微分は、以下
(u)' = -1 * e^v
(u)' = -1 * e^(-x)
(u)' = -e^(-x)

⑥これで最初の以下の合成関数の微分をする

f'(x) = -u^(-2) * -e^(-x)
f'(x) = u^(-2) * e^(-x)

uを展開

f'(x) = (1 + e^(-x))^(-2) * e^(-x)

↓

             e^(-x)
f'(x) = ---------------
        (1 + e^(-x))^2

↓

          e^(-x)        1
f'(x) = ---------- * ----------
        1 + e^(-x)   1 + e^(-x)


ここで左側部分を以下に変形する。
  e^(-x)     1 + e^(-x)       1
---------- = ---------- - ----------
1 + e^(-x)   1 + e^(-x)   1 + e^(-x)


↓

         1 + e^(-x)       1              1
f'(x) =( ---------- - ---------- ) * ----------
         1 + e^(-x)   1 + e^(-x)     1 + e^(-x)

ここで、最初の関数表記を代入すると
           1
f(x) = -----------
       1 + e^(-x)

↓

やっとこさ、以下の形になる!

f'(x) =(1 - f(x)) * f(x)     

分かったこと!

自分の頭では数学の理解はムリ!大人しく公式を覚えて活用できればいい!
シグモイド関数は、微分に元の関数が含まれる!
数式を色々展開すると、色々な姿、関係性が見えてくる。これが数学の楽しさ?