読者です 読者をやめる 読者になる 読者になる

pikesaku’s blog

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

合成関数の微分とは?

やってられねえっす。。。
ニューラルネットの勉強」→「シグモイド関数の勉強」→「微分の勉強」→「合成関数の微分の勉強」

もう何を勉強しようとしているのか分からなくなってきた。。。。

ただ、ひとまずシグモイド関数を理解するには、これが最後っぽい。

合成関数とは?

合成関数は、関数の中に関数が入れ子ではいっている関数

例)

y = f(u)
u = g(x)

上記の場合

y = f(g(x))

上記が合成関数

合成関数の微分の公式

合成関数の微分を求める公式があるよう。
以下の通り。

dy   dy   du
-- = -- * --
dx   du   dx

パーツ毎に説明すると、、、

dy
--
dx

はy = f(x)の導関数の表記
xでyを微分するってこと。

dy
-- 
du

はy = f(u)の導関数の表記
uでyを微分するってこと

du
-- 
dx

はu = g(x)の導関数の表記
xでuを微分するってこと

上記より合成関数の導関数は、、、

「それぞれの関数レベルで微分して得られた導関数を掛け合わせたもの」ってこと?

合成関数の微分の公式の証明

前提となる合成関数と各関数は以下の表記とする。

y = f(u)
u = g(x)
y = f(g(x))

まずは以下の形から

lim  f(g(x + h)) - f(g(x))
h→0 --------------------- 
               h

これを変形する為に、以下を掛ける。

g(x + h) - g(x)
---------------
g(x + h) - g(x)

↓

lim  f(g(x + h)) - f(g(x))   g(x + h) - g(x)
h→0 --------------------- * ---------------
               h             g(x + h) - g(x)

↓

lim  f(g(x + h)) - f(g(x))   g(x + h) - g(x)
h→0 --------------------- * ---------------
        g(x + h) - g(x)            h

これが???と思ったが、計算上は成立する。

例)
 2     2     3     2     3
--- = --- * --- = --- * --- →計算結果は変わらない。
 4     4     3     3     4

ここで以下の表記を決めて、、、、
j = g(x + h) - g(x)

前提条件でもある以下表記を使うと、、、
u = g(x)

こうなって
j = g(x + h) - u

こうなる
j + u = g(x + h)

これを利用して展開すると、、、、

↓

lim  f(j + u) - f(u)   g(x + h) - g(x)
h→0 --------------- * ---------------
        j + u - u            h

となり、

↓

lim  f(j + u) - f(u)   g(x + h) - g(x)
h→0 --------------- * ---------------
            j                h

となる
この時、h→0を考慮すると
j = g(x + h) - g(x)
の為、h→0の時は、j→0になる。

これを踏まえてると、以下表記が可能。

↓

lim lim  f(j + u) - f(u)     g(x + h) - g(x)
h→0 j→0 -----------------  * ---------------
                j                    h

↓

lim  f(j + u) - f(u)      lim  g(x + h) - g(x)
j→0 -----------------  *  h→0 ---------------
           j                        h

こうなると、

↓

f'(u)*g'(h)

になる。
これをdを使って表記すると、

dy du
--*--
du dx

なんかだまされた気分。。。。。。

合成関数の微分の例

例1) y = (x + 1)^2

合成関数の微分の公式を用いず、普通の公式を使った場合

y = x^2 + 2x + 1
y' = 2x + 2

合成関数の微分を使った場合

以下の手順でやる

①以下の2つの関数に分ける
u = x + 1
y = u^2

②それぞれを微分する
u'(x) = 1
y'(u) = 2u

③掛け合わせる

1 * 2u = 2u

④uをxで展開する。

2u = 2(x + 1) = 2x + 2

同じだ!

おまけ

こんな表記でやる場合もあるみたい。

合成関数を微分する手順

例) y = (logx)^3

y' = {(logx)^3}' * (logx)' 
y' = 3{logx}^2 * (logx)'
y' = 3{logx}^2 * (logx)'

※(logx)'は1/xになるらしい。
対数(logX)’=1/Xの微分は、どう証明するのでしょうか? - awangue1_272... - Yahoo!知恵袋

y' = 3{logx}^2 * 1/x
y' = 3{logx}^2
     ---------
         x