はじめに
「微分わからん…」と避けてきた方、シグモイドの微分でつまずいた方へ。
私自身も 逆数の微分を忘れた とか 通分で迷子になった とか、色々やらかしました。
本当のところわかったふりしてただけだと気が付きました。
『「微分」こんなの学んでなんの意味があるんだ!』 正直私もそう思って、微積分を捨てていました。そして今AI活用人材の育成担当になって、いざ中身を見てみたら「びびび…微分!」と驚き、ハクション大魔王に形態変化しそうでした。
でも大丈夫!もう大人なんだからきっと分かるよ、あなたでも
小学校の算数から積み上げ直すと、ディープラーニングで出てくる誤差逆伝播の中身の理解までスッとつながるんです。
この記事では、つまずきポイントを含めて整理します。
1. 小学校の算数:「変化」と「比率」
-
割り算や分数の基本 = 「変化量を比率で表す」こと。
-
例:坂道の傾き
- 2m 進んで 1m 上がる → 傾き = 1/2
👉 これが 「dy/dx」 にそのままつながる。
2. 中学の数学:「グラフと傾き」
- 直線の傾き = $(y_2-y_1)/(x_2-x_1)$
- 2点を結ぶ割線の傾きはわかるけど、1点だけの接線の傾きは直接わからない。
👉 そこで「極限」という考え方が必要になる。
3. 高校の数学:「微分の定義」
接線の傾きを定義したのがこれ:
$$
f'(x) = \lim_{h\to 0}\frac{f(x+h)-f(x)}{h}
$$
- 分子:縦の変化
- 分母:横の変化
- $h$ を小さくすれば「瞬間の変化率」になる。
👉 微分 = 変化の瞬間の速さ
4. ライプニッツ記法「dy/dx」
- 本来は「演算記号」
- でも「小さい変化の比率」と見ても矛盾しない
- だから 分数っぽく扱える
例(チェーンルール):
$$
\frac{dy}{dx} = \frac{dy}{du}\cdot\frac{du}{dx}
$$
中間の $du$ が「約分される」イメージで直感的に理解できる。
5. チェーンルール(連鎖律)
合成関数の微分は「外側の傾き × 内側の傾き」。
例:
$$
y = (3x+1)^2
$$
- 外側: $(\square)^2 ;\Rightarrow; 2(\square)$
- 内側: $3x+1 ;\Rightarrow; 3$
$$
\frac{dy}{dx} = 2(3x+1)\cdot 3 = 6(3x+1)
$$
👉 中身が残るのは当然。外側の2乗を微分しても「中身そのもの」は消えない。
6. つまずき①「逆数の微分」
$$
f(x) = \frac{1}{x}
$$
これは
$$
f(x) = x^{-1} \quad \Rightarrow \quad f'(x) = -x^{-2} = -\frac{1}{x^2}
$$
👉 ポイントは「分母をまるごと U と置く」こと。
7. つまずき②「通分」
シグモイドではよく出る:
$$
1-\sigma(z) = 1 - \frac{1}{1+e^{-z}}
$$
通分して整理すると:
$$
1-\sigma(z) = \frac{e^{-z}}{1+e^{-z}}
$$
👉 ただの算数の引き算。ここで私は一度迷子になりました😂
8. シグモイドの微分
定義:
$$
\sigma(z) = \frac{1}{1+e^{-z}}
$$
微分すると:
$$
\sigma'(z) = \frac{e^{-z}}{(1+e^{-z})^2}
$$
ここで、σを使って書き直すと:
$$
\sigma'(z) = \sigma(z),(1-\sigma(z))
$$
👉 出力 y を使って表せるのが最大のメリット。
9. ニューラルネットへの応用(誤差逆伝播)
誤差逆伝播で欲しいのは:
$$
\frac{\partial E}{\partial w}
= \frac{\partial E}{\partial y}\cdot\frac{\partial y}{\partial z}\cdot\frac{\partial z}{\partial w}
$$
ここで
- $\frac{\partial y}{\partial z} = y(1-y)$(シグモイドの微分)
- $\frac{\partial z}{\partial w} = x$
だから:
$$
\frac{\partial E}{\partial w} = (y-t)\cdot y(1-y)\cdot x
$$
👉 「シグモイドの微分を出力 y で書ける」から、逆伝播が計算しやすくなる。
10. Pythonでグラフを描く
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def sigmoid_prime(z):
s = sigmoid(z)
return s * (1 - s)
z = np.linspace(-6, 6, 200)
y = sigmoid(z)
y_prime = sigmoid_prime(z)
plt.figure(figsize=(8,5))
plt.plot(z, y, label="sigmoid")
plt.plot(z, y_prime, label="sigmoid derivative")
plt.title("Sigmoid and its derivative")
plt.legend()
plt.grid(True)
plt.show()
これで
- 青:シグモイド関数(S字カーブ)
- オレンジ:その微分(山型)
が出ます。
まとめ
- 微分 = 傾き = 瞬間の変化率
- 「dy/dx」は分数っぽく扱える記号
- チェーンルールは「外側 × 内側」
- 逆数・通分でつまずきやすいが、実は算数の延長
- シグモイド微分は「出力そのもの」で書ける → 逆伝播が楽に!
おわりに
「小学校算数 → 中学数学 → 高校数学 → ニューラルネット」
こうやって階段を登ると、微分は思ったより優しい顔をしていました。
同じように「ワケワカメ」になった誰かの助けになれば嬉しいです。