ディープラーニングG検定の勉強中 その10(積の微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、積の微分についてです。

関数と関数を掛けたものを微分する……えっ、何でそんな面倒なことするの?

と思ったりもしておりますが、計算は可能なので、見ていきます。

積の微分では、f(x)とg(x)を掛け合わせたものを微分するわけですが、
その際に、f '(x)の接線の接触部分である接点を中心に拡大すると直線とほとんど同じになることから、

ディープラーニングG検定の勉強中 その9(微分と関数値の近似、極大・極小)
の中で、関数と微分の近似の式を導き出しています。


であれば、g'(x)も同様に当てはまることになります。それが式1です。

式1
2-6-1.png

積の微分では、式1を利用して2つの関数から算出します。
式1をf(x)とg(x)の積の形に変形します。

式2
2-6-2.png

そもそもの微分の式は、以下ですが、

式3
2-3-1-7.png

その式の分子をf(x)とg(x)の積に応用します。

式4
2-6-3.png

この式4は、式2に置き換えることができるので、これを計算すると、式5となります。

式5
2-6-4.png

式5に置き換えているのは、積の微分を計算可能とするためです。
この式は、積の微分の式の分子部分となります。


ここで、式3を積の微分に応用した式6によって、計算しますが、

式6
2-6-5.png

このままでは、計算し辛いため(※)、

※このことを説明しているサイト
高校数学の美しい物語(積の微分公式とその証明の味わい)

分子を式5と入れ替えて計算を行い、積の微分を算出します。

式7
2-6-6.png


それでは、実際に異なる2つの関数(式8)を代入して計算してみます。

式8
2-6-7.png

式9
2-6-8.png

式9で算出された積の微分が正しいかどうか、Pythonで検算してみます。

参考サイト
note.nkmk.me(Python, SymPyの使い方(因数分解、方程式、微分積分など))
Python 数値計算入門([SymPy] 多項式の展開と因数分解)

--------------------
import sympy as sym

x = sympy.Symbol('x')

fx = x**2 + 4 * x    # f(x)
gx = x**3 + 3 * x ** 2  #g(x)

fxgx = sym.expand(fx * gx)  # f(x) × g(x)

sym.Eq(sym.Derivative(fx*gx), sym.diff(fxgx))  # 積の微分の式、その計算結果とその出力

--------------------
出力結果

2-6-9.png

式9と同じ結果となりました。
Pythonでは式や計算結果を整形して出力する機能があるのでこれも便利ですね。
積の微分では、今回の方法の他に「仲介役」を挟んで計算する方法もあるので(上記数学サイトに記載があります)、こちらも理解しておきます。

進捗状況

最短コースでわかるディープラーニングの数学
66/328(20.1%)

ディープラーニングG検定の試験日まであと54日

ディープラーニングG検定の勉強中 その9(微分と関数値の近似、極大・極小)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、まずは微分と関数値の近似についてです。

関数の直線について、2点(x, f(x))、(x+h, f(x+h))を結んだ関数の直線の傾きをグラフにすると、以下となります。

2-3-2-1.png

このとき、xに、x+hと微少の値を増やしたとき、f(x)の変化量との間には、以下の式が成り立ちます。

式1
2-4-3.png

例えば、f(x)=2 * x のとき、xが1でその増加量が、0.000000001のときには、
f(x)は、の増加量は0.000000002になるので、

2.000000002 ≅ 2 * 1.000000001 が成り立ちます。つまり、xの微量の増加によるf(x)の変化量は、hf '(x)と等しくなります。

接線についても、

2-3-2-2.png

dxがhと同様に微少の値が増加するときのf(x)の変化量は、f '(x)dxと等しくなり、式2が成立します。

式2
2-4-4.png

つまりは、式3が成立することになります。

式3
2-4-5.png

なお、上記の式から、f '(x)の値が0になるときには、f(x)の変化量も0となります。
そして、f '(x)=0となるxの地点(接線の傾き0)では、関数の形が山頂になっていたり、谷底になっていたりします。
関数の形が山頂のときには「極大」、谷底のときには「極小」といいます。

2-4-1.png

ただし、f '(x)=0のときに極大にも極小にもならない関数もあります。

2-4-2.png


なお、f '(x)=0のときに、極大または極小になるという原理は、ディープラーニングで用いられる「勾配降下法」に関連してくるとのことです。