DS:数学的基礎 - 微分・偏微分
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-戻る
--[[DS:数学的基礎]]
---[[線形代数>DS:数学的基礎 - 線形代数]]
---[[微分・積分>DS:数学的基礎 - 微分・積分]]
---微分・偏微分
---[[確率・統計>DS:数学的基礎 - 確率・統計]]
--[[ニューラルネットワーク(学習)]]
*目次 [#ya8208c6]
#contents
*概要 [#x64ab187]
-微分係数(関数の変化率)、
--つまりグラフの接線の傾きを求める計算処理
--ラフの接線の傾き=ある瞬間の変化の量。
-[[勾配降下法>ニューラルネットワーク(学習)#v7a3cd9d]]と...
広大なパラメタ空間から、複雑な関数(=[[損失関数>ニューラ...
最小(最大)値を出力する鞍点を、勾配を使用して探す。
-微分・偏微分・連鎖律
--微分
---入力パラメタを変化させたら、出力はどれだけ変化するか?
---微分では、記号として、𝑑を使う。
--偏微分
---入力パラメタが複数ある場合、同様に、出力はどれだけ変化...
---偏微分では、記号として、𝑑ではなく∂を使う。
--連鎖律
---関数が複数ある(合成関数の)場合、出力はどれだけ変化す...
---連鎖率では計算に使った関数の偏微分をかけると合成関数の...
*微分 [#ta4fb87d]
**導関数 [#p773004c]
df(x) yの増量 f(x+h) - f(x) f(x+h) - f(x)
── = ─── = lim ────── = lim ──────
dx xの増量 h→0 (x+h) - (x) h→0 h
**解析的 [#g5ab24b9]
式の展開によって微分を求める(誤差がない)。
**数値的 [#w4dd09ea]
計算によって微分を求める(誤差がある)。
***Python実装 [#q7badb86]
"""This is a test program."""
import numpy as np
import matplotlib.pyplot as plt
def numerical_diff(f, x):
"""数値微分"""
h = 1e-4 # 微小な値hとして1の-4乗を用いる
return (f(x + h) - f(x - h)) / (2 * h) # 前方差分か...
def function_1(x):
"""f(x)=0.01x^2+0.1x"""
return 0.01 * x ** 2 + 0.1 * x
X=5
print("X=" + str(X) + " : " + str(numerical_diff(functio...
X=10
print("X=" + str(X) + " : " + str(numerical_diff(functio...
X = np.arange(0.0, 20.0, 0.1)
Y = function_1(X)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.plot(X, Y)
plt.show()
***Python出力 [#q49b3f5e]
-グラフ
#ref(graf.png,left,nowrap,グラフ,60%)
-傾き
X=5 : 0.1999999999990898
X=10 : 0.2999999999986347
-参考~
https://github.com/oreilly-japan/deep-learning-from-scrat...
#ref(gradient_1d.png,left,nowrap,微分,60%)
*偏微分 [#z8297246]
**概要 [#zfe2dd48]
-多変数関数をある変数について微分することを偏微分と言う。
-着目した変数以外の変数は定数であると見なされる。
-曲面で説明すると、
--当該座標で着目した変数の2変数関数の接線を求める。
--曲面の座標上の2つの接線から接平面が求まる。
**計算 [#m896c4b8]
-偏微分では、記号として、𝑑ではなく∂を使う。
-以下、x1に着目した場合の偏微分。
y = 4x1^3 + 2x2^2 + 1
>
∂y
── = 12x1^2
∂x1
**例 [#eb669203]
***例1 [#gc24e86a]
2つの引数の2乗和を計算する式
-式
2 2
f(x0, x1) = x0 + x1
-Python
--実装
"""This is a test program."""
import numpy as np
def function_2(x):
"""f(x0, x1) = x0^2 + x1^2"""
return x[0] ** 2 + x[1] ** 2
# or return np.sum(x ** 2)
***例2 [#e77d0fe7]
2つの引数の2乗和を計算する式の偏微分
-式
∂f(x0, x1)
───── = 2 * x0
dx0
∂f(x0, x1)
───── = 2 * x1
dx1
-Python
--実装
numerical_diff"""This is a test program."""
import numpy as np
def numerical_diff(f, x):
"""数値微分"""
h = 1e-4 # 微小な値hとして1の-4乗を用いる
return (f(x + h) - f(x - h)) / (2 * h) # 前方差分か...
def function_tmp1(x0):
"""x0=3, x1=4 の場合の x0 に対する偏微分用"""
return x0 ** 2 + 4.0 ** 2
def function_tmp2(x1):
"""x0=3, x1=4 の場合の x1 に対する偏微分用"""
return 3.0 ** 2.0 + x1 ** 2
print(numerical_diff(function_tmp1, 3.0))
print(numerical_diff(function_tmp2, 4.0))
--出力 (x0=3, x1=4)
6.00000000000378 (2 * x0 = 2 * 3 = 6)
7.999999999999119 (2 * x1 = 2 * 4 = 8)
*連鎖律 [#w092a77a]
合成関数の微分についての性質。
-「合成関数のゴールの微分係数」=「経路上の関数の微分係数...
-「ある関数が、合成関数で表される場合、合成関数の微分は、~
合成関数を構成する関数の微分の積で表すことが出来る。」
**合成関数 [#e7f1a6d9]
合成関数(関数Aと関数B)
z = t^2 = f(t)
t = x + y = g(x)
z = f(g(x))
**関数の微分 [#yeb8cb65]
***関数Aの微分 [#id3ebecc]
∂z
─ = 2t
∂t
***関数Bの微分 [#qbacca98]
∂t
─ = 1
∂x
**合成関数の微分 [#paf06b21]
∂z ∂z ∂t
─ = ─ ─ = 2t * 1 = 2t = 2(x + y)
∂x ∂t ∂x
*全微分 [#w91b5d45]
**概要 [#a3c6a432]
**計算 [#e09c1e11]
**参考 [#xd7dcf39]
https://www.youtube.com/watch?v=ChoArVJnSjQ
*解析的手法の例 [#t6fe2a44]
**y=x^nの微分 [#qd77057d]
***公式 [#i505258a]
y=x^n
df(x) d(x^n)
── = ── = nx^(n-1)
dx dx
***導出 [#h23ad29c]
-y=x^2の例
df(x) yの増量 (x+h)^2 - x^2 (x^2+2hx+h^2)...
── = ─── = lim ────── = lim ──────────
dx xの増量 h→0 (x+h) - (x) h→0 h
>
dy 2hx+h^2
── = lim ──── = lim 2x+h = 2x
dx h→0 h h→0
-y=x^nの場合~
n乗の展開公式で、 h→0とすると、nx^(n-1) と同じ結果になる。
**y=a^xの微分 [#adabdb73]
***公式 [#mbeb1feb]
y=a^x
df(x) d(a^x)
── = ── = logea・a^x
dx dx
***ネイピア数 [#m0455ef7]
df(x) d(a^x) a^(x-dx) - a^x a^x(a^dx - 1) a^...
── = ── = ─────── = ─────── = a^x─────
dx dx dx dx ...
a^h - 1
lim ──── = 1 となるような h = e
h→0 h
df(x) d(e^x) e^(x-dx) - e^x e^x(e^dx - 1) e^...
── = ── = ─────── = ─────── = e^x───── = e^x・1 = e^x
dx dx dx dx ...
***導出 [#o1073f04]
連鎖率を使う
-𝑎^x = e^((log𝑒a)・x)
-t = (log𝑒a)・x
>
df(x) d(a^x) d(e^((log𝑒a)・x)) d(e^t) dt
── = ── = ──────── = ─── ─ = e^t・(log𝑒a) = a^x・(log𝑒...
dx dx dx dt dx
**y=logea^xの微分 [#q1ad5912]
は、逆関数の微分値の逆数(的なもの)
***公式 [#t048d447]
y=logea^x
dy/dx = logea・x
***導出 [#ocee2702]
-y=logea^xの逆関数は、
x=a^y
-この逆関数の微分値は、
dx/dy = logea・a^y = logea・x
-この逆関数の微分値の逆数的なものは、
dy/dx = 1/(dx/dy) = 1/(logea・x)
**三角関数の微分 [#e5d0f03e]
https://www.headboost.jp/derivatives-of-trigonometric-fun...
-𝜃(ラジアン)は90°が1/2π、360°が2π
-小さな直角三角形は、元の大きな直角三角形と相似形(図を参...
***公式 [#kf59f168]
-sin'(𝜃)
sin'(𝜃) = cos(𝜃)
-cos'(𝜃)
cos'(𝜃) = -sin(𝜃)
***導出 [#yc6ac88c]
-sin
sin(𝜃 + d𝜃) − sin(𝜃) d(sin(𝜃)) d𝜃・cos𝜃
sin'(𝜃) = ────────── = ───── = ───── = cos(𝜃)
d𝜃 d𝜃 d𝜃
-cos
cos(𝜃 + d𝜃) − cos(𝜃) d(cos(𝜃)) -d𝜃・sin𝜃
cos'(𝜃) = ────────── = ───── = ───── = -sin(𝜃)
d𝜃 d𝜃 d𝜃
**実際の計算 [#z78be70d]
以下を使う。
***公式 [#n3ef5836]
***連鎖律 [#vac98f5f]
***多変数関数の全微分の公式? [#a624a232]
*参考 [#v2f02d30]
-微分とは何か? - 中学生でも分かる微分のイメージ~
https://sci-pursuit.com/math/differential-1.html
-偏微分の意味と高校数学への応用 | 高校数学の美しい物語~
http://mathtrain.jp/henbibunimi
終了行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-戻る
--[[DS:数学的基礎]]
---[[線形代数>DS:数学的基礎 - 線形代数]]
---[[微分・積分>DS:数学的基礎 - 微分・積分]]
---微分・偏微分
---[[確率・統計>DS:数学的基礎 - 確率・統計]]
--[[ニューラルネットワーク(学習)]]
*目次 [#ya8208c6]
#contents
*概要 [#x64ab187]
-微分係数(関数の変化率)、
--つまりグラフの接線の傾きを求める計算処理
--ラフの接線の傾き=ある瞬間の変化の量。
-[[勾配降下法>ニューラルネットワーク(学習)#v7a3cd9d]]と...
広大なパラメタ空間から、複雑な関数(=[[損失関数>ニューラ...
最小(最大)値を出力する鞍点を、勾配を使用して探す。
-微分・偏微分・連鎖律
--微分
---入力パラメタを変化させたら、出力はどれだけ変化するか?
---微分では、記号として、𝑑を使う。
--偏微分
---入力パラメタが複数ある場合、同様に、出力はどれだけ変化...
---偏微分では、記号として、𝑑ではなく∂を使う。
--連鎖律
---関数が複数ある(合成関数の)場合、出力はどれだけ変化す...
---連鎖率では計算に使った関数の偏微分をかけると合成関数の...
*微分 [#ta4fb87d]
**導関数 [#p773004c]
df(x) yの増量 f(x+h) - f(x) f(x+h) - f(x)
── = ─── = lim ────── = lim ──────
dx xの増量 h→0 (x+h) - (x) h→0 h
**解析的 [#g5ab24b9]
式の展開によって微分を求める(誤差がない)。
**数値的 [#w4dd09ea]
計算によって微分を求める(誤差がある)。
***Python実装 [#q7badb86]
"""This is a test program."""
import numpy as np
import matplotlib.pyplot as plt
def numerical_diff(f, x):
"""数値微分"""
h = 1e-4 # 微小な値hとして1の-4乗を用いる
return (f(x + h) - f(x - h)) / (2 * h) # 前方差分か...
def function_1(x):
"""f(x)=0.01x^2+0.1x"""
return 0.01 * x ** 2 + 0.1 * x
X=5
print("X=" + str(X) + " : " + str(numerical_diff(functio...
X=10
print("X=" + str(X) + " : " + str(numerical_diff(functio...
X = np.arange(0.0, 20.0, 0.1)
Y = function_1(X)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.plot(X, Y)
plt.show()
***Python出力 [#q49b3f5e]
-グラフ
#ref(graf.png,left,nowrap,グラフ,60%)
-傾き
X=5 : 0.1999999999990898
X=10 : 0.2999999999986347
-参考~
https://github.com/oreilly-japan/deep-learning-from-scrat...
#ref(gradient_1d.png,left,nowrap,微分,60%)
*偏微分 [#z8297246]
**概要 [#zfe2dd48]
-多変数関数をある変数について微分することを偏微分と言う。
-着目した変数以外の変数は定数であると見なされる。
-曲面で説明すると、
--当該座標で着目した変数の2変数関数の接線を求める。
--曲面の座標上の2つの接線から接平面が求まる。
**計算 [#m896c4b8]
-偏微分では、記号として、𝑑ではなく∂を使う。
-以下、x1に着目した場合の偏微分。
y = 4x1^3 + 2x2^2 + 1
>
∂y
── = 12x1^2
∂x1
**例 [#eb669203]
***例1 [#gc24e86a]
2つの引数の2乗和を計算する式
-式
2 2
f(x0, x1) = x0 + x1
-Python
--実装
"""This is a test program."""
import numpy as np
def function_2(x):
"""f(x0, x1) = x0^2 + x1^2"""
return x[0] ** 2 + x[1] ** 2
# or return np.sum(x ** 2)
***例2 [#e77d0fe7]
2つの引数の2乗和を計算する式の偏微分
-式
∂f(x0, x1)
───── = 2 * x0
dx0
∂f(x0, x1)
───── = 2 * x1
dx1
-Python
--実装
numerical_diff"""This is a test program."""
import numpy as np
def numerical_diff(f, x):
"""数値微分"""
h = 1e-4 # 微小な値hとして1の-4乗を用いる
return (f(x + h) - f(x - h)) / (2 * h) # 前方差分か...
def function_tmp1(x0):
"""x0=3, x1=4 の場合の x0 に対する偏微分用"""
return x0 ** 2 + 4.0 ** 2
def function_tmp2(x1):
"""x0=3, x1=4 の場合の x1 に対する偏微分用"""
return 3.0 ** 2.0 + x1 ** 2
print(numerical_diff(function_tmp1, 3.0))
print(numerical_diff(function_tmp2, 4.0))
--出力 (x0=3, x1=4)
6.00000000000378 (2 * x0 = 2 * 3 = 6)
7.999999999999119 (2 * x1 = 2 * 4 = 8)
*連鎖律 [#w092a77a]
合成関数の微分についての性質。
-「合成関数のゴールの微分係数」=「経路上の関数の微分係数...
-「ある関数が、合成関数で表される場合、合成関数の微分は、~
合成関数を構成する関数の微分の積で表すことが出来る。」
**合成関数 [#e7f1a6d9]
合成関数(関数Aと関数B)
z = t^2 = f(t)
t = x + y = g(x)
z = f(g(x))
**関数の微分 [#yeb8cb65]
***関数Aの微分 [#id3ebecc]
∂z
─ = 2t
∂t
***関数Bの微分 [#qbacca98]
∂t
─ = 1
∂x
**合成関数の微分 [#paf06b21]
∂z ∂z ∂t
─ = ─ ─ = 2t * 1 = 2t = 2(x + y)
∂x ∂t ∂x
*全微分 [#w91b5d45]
**概要 [#a3c6a432]
**計算 [#e09c1e11]
**参考 [#xd7dcf39]
https://www.youtube.com/watch?v=ChoArVJnSjQ
*解析的手法の例 [#t6fe2a44]
**y=x^nの微分 [#qd77057d]
***公式 [#i505258a]
y=x^n
df(x) d(x^n)
── = ── = nx^(n-1)
dx dx
***導出 [#h23ad29c]
-y=x^2の例
df(x) yの増量 (x+h)^2 - x^2 (x^2+2hx+h^2)...
── = ─── = lim ────── = lim ──────────
dx xの増量 h→0 (x+h) - (x) h→0 h
>
dy 2hx+h^2
── = lim ──── = lim 2x+h = 2x
dx h→0 h h→0
-y=x^nの場合~
n乗の展開公式で、 h→0とすると、nx^(n-1) と同じ結果になる。
**y=a^xの微分 [#adabdb73]
***公式 [#mbeb1feb]
y=a^x
df(x) d(a^x)
── = ── = logea・a^x
dx dx
***ネイピア数 [#m0455ef7]
df(x) d(a^x) a^(x-dx) - a^x a^x(a^dx - 1) a^...
── = ── = ─────── = ─────── = a^x─────
dx dx dx dx ...
a^h - 1
lim ──── = 1 となるような h = e
h→0 h
df(x) d(e^x) e^(x-dx) - e^x e^x(e^dx - 1) e^...
── = ── = ─────── = ─────── = e^x───── = e^x・1 = e^x
dx dx dx dx ...
***導出 [#o1073f04]
連鎖率を使う
-𝑎^x = e^((log𝑒a)・x)
-t = (log𝑒a)・x
>
df(x) d(a^x) d(e^((log𝑒a)・x)) d(e^t) dt
── = ── = ──────── = ─── ─ = e^t・(log𝑒a) = a^x・(log𝑒...
dx dx dx dt dx
**y=logea^xの微分 [#q1ad5912]
は、逆関数の微分値の逆数(的なもの)
***公式 [#t048d447]
y=logea^x
dy/dx = logea・x
***導出 [#ocee2702]
-y=logea^xの逆関数は、
x=a^y
-この逆関数の微分値は、
dx/dy = logea・a^y = logea・x
-この逆関数の微分値の逆数的なものは、
dy/dx = 1/(dx/dy) = 1/(logea・x)
**三角関数の微分 [#e5d0f03e]
https://www.headboost.jp/derivatives-of-trigonometric-fun...
-𝜃(ラジアン)は90°が1/2π、360°が2π
-小さな直角三角形は、元の大きな直角三角形と相似形(図を参...
***公式 [#kf59f168]
-sin'(𝜃)
sin'(𝜃) = cos(𝜃)
-cos'(𝜃)
cos'(𝜃) = -sin(𝜃)
***導出 [#yc6ac88c]
-sin
sin(𝜃 + d𝜃) − sin(𝜃) d(sin(𝜃)) d𝜃・cos𝜃
sin'(𝜃) = ────────── = ───── = ───── = cos(𝜃)
d𝜃 d𝜃 d𝜃
-cos
cos(𝜃 + d𝜃) − cos(𝜃) d(cos(𝜃)) -d𝜃・sin𝜃
cos'(𝜃) = ────────── = ───── = ───── = -sin(𝜃)
d𝜃 d𝜃 d𝜃
**実際の計算 [#z78be70d]
以下を使う。
***公式 [#n3ef5836]
***連鎖律 [#vac98f5f]
***多変数関数の全微分の公式? [#a624a232]
*参考 [#v2f02d30]
-微分とは何か? - 中学生でも分かる微分のイメージ~
https://sci-pursuit.com/math/differential-1.html
-偏微分の意味と高校数学への応用 | 高校数学の美しい物語~
http://mathtrain.jp/henbibunimi
ページ名: