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

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

今回は、偏微分を見ていきます。


参考サイト
Sci-pursuit(偏微分の意味とやり方)

多変数関数の変数のうち、1つの変数の変化だけを追うようにして、他の変数は定数とみなす方法が偏微分です。

偏微分の計算は、微分の公式

式1
4-2-2.png

を使って行います。

それでは、式2の2変数関数について、

式2
4-2-1.png

それぞれ u と v の偏微分をしてみます。
ここでの( )は、定数として扱う部分、という意味で使っています。

式3 変数 u に対する偏微分
4-2-3.png

式3では微分の対象ではない v を定数とみなすことができるものの、どんなときでも消去できるわけではないことに注意する必要があります。微分の公式に則って、ピンク色の部分のように微分することになります。

式4 変数 v に対する偏微分
4-2-4.png


偏微分は、3種類以上の変数の関数に対しても行うことができます。

ここでは3種類のそれぞれの変数に対する微分を見ていきます。

式5 3変数関数
4-2-5.png

式6 変数 u に対する偏微分
4-2-6.png

式7 変数 v に対する偏微分
4-2-7.png

式8 変数 w に対する偏微分
4-2-8.png


この3変数関数に対する偏微分をPythonでも確認してみます。

参考サイト
SYSTEM GUARDIAN(Python 偏微分で大満足カレーを作る Matplotlib)

--------------------
import sympy as sym
sym.init_printing()
from IPython.display import display

(u,v,w) = sym.symbols("u,v,w")

targetFunc = (2 * u**3) + (7 * v**2) + (5 * w**4) - (3 * u * v) + (2 * v * w**2) + u + (4 * v) + 5

def PartialDiff(PD):
 du = sym.diff(PD, u)    # uで偏微分
 dv = sym.diff(PD, v)    # vで偏微分
 dw = sym.diff(PD, w)   # wで偏微分
 return du, dv, dw

def main():
 du, dv, dw = PartialDiff(targetFunc)
 print("3変数関数:")
 display(targetFunc)
 print("uで偏微分:")
 display(du)
 print("vで偏微分:")
 display(dv)
 print("wで偏微分:")
 display(dw)

if __name__ == '__main__':
 main()

--------------------
出力結果
4-2-9.png


偏微分は思ったほど難しくなくてよかったです。
でも、次の全微分はややこしそうw

ディープラーニングG検定の勉強中 その22(多変数関数)

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

今回から、第4章の多変数関数の微分に入ります。

今回は、多変数関数と、そのグラフを表示してみます。

テキストでは、入力変数を x と y の代わりに u と v で使っており、このブログでもそれを踏襲します。

2つの入力と、その出力の例です。

式1
4-1-1.png


これをPythonを使って3Dグラフで表示してみます。

参考サイト
Pynote(matplotlib - 2変数関数を3Dで可視化する。)
Python 数値計算入門([Matplotlib] 3次元データの可視化)

--------------------
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def func(u, v):
 # return 2u3^3+7v^2+3uv+u+4v+5
 return 2 * u**3 + 7 * v**2 - (3 * u * v) + u + (4 * v) + 5

U, V = np.meshgrid(np.arange(-4., 4., 0.5),
   np.arange(-4., 4., 0.5))
Z = func(U, V)

# ポリゴンでグラフを作成する。
fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(U, V, Z)  #ポリゴン表示

ax.set_xlabel("U", size = 12)
ax.set_ylabel("V", size = 12)
ax.set_zlabel("Z", size = 12)

plt.show()

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

4-1-2.png


多変数関数のグラフって面白いですね。手書きは大変そうなので、Python大活躍です。

本日、ディープラーニングG検定の申し込みをしました。あとは受験に向けて頑張るのみです。