シグモイド関数の導関数の導出
シグモイド関数の導関数を求める。
商の微分公式を使用する。
商の微分公式の
分母の\(f(x)\)を\(1+e^x\)
分子の\(g(x)\)を\(1\)とする。
\(
\begin{eqnarray}
\displaystyle\bigg\{\frac{1}{1+e^{-1}}\bigg\}^\prime&=&\frac{1\prime\cdot(1+e^{-x})-(1+e^{-x})\prime\cdot1}{(1+e^{-x})^2}\\
\displaystyle&=&\frac{-1\prime-(e^{-x})\prime}{(1+e^{-x})^2}\\
\displaystyle&=&\frac{e^{-x}}{(1+e^{-x})^2}\\
\displaystyle&=&\frac{e^{-x}}{1+e^{-x}}\cdot\frac{1}{1+e^{-x}}\\
\displaystyle&=&\frac{(1+e^{-x})-1}{1+e^{-x}}\cdot\frac{1}{1+e^{-x}}\dots(分子側で1を足して1を引く)\\
\displaystyle&=&\bigg(1-\frac{1}{1+e^{-x}}\bigg)\frac{1}{1+e^{-x}}\\
\displaystyle&=&\sigma(x)\{1-\sigma(x)\}
\end{eqnarray}
\)
途中、1を足して1を引くとかでまたトリッキーなことしている。
これがうまく機能して、シグモイド関数の形状に変形できている。
このあとはどうする?
ここらで、求めたシグモイド関数の導関数が正しいかを確認しようと思う。
シグモイド関数をオイラー法で求めた微分結果のプロットと、
シグモイド関数の導関数のプロットを比較する。
これを実現するためのプログラムを作成するつもり。
これを各ツール、各言語でやってみる。
シグモイド関数、その導関数、オイラー法での数式
まず、シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分の式を列挙しよう。
シグモイド関数
\(
\displaystyle\sigma(x)=\frac{1}{1+e^{-x}}
\)
シグモイド関数の導関数
\(
\sigma\prime(x)=\sigma(x)\{1-\sigma(x)\}
\)
シグモイド関数のオイラー法による微分
\(
\displaystyle\sigma\prime_{euler}(x)=\frac{\sigma(x+h)-\sigma(x)}{h}\dots h=0.01
\)
オイラー法は、数式の性格を気にせず微分が求められるから楽。
その代わりどこまで行っても近似値でしかない。
しかし、今回はその近似値と比較して同等であれば導関数としては正しそうって評価の仕方になる。
プログラム化に向けて
とりえあず、さっきの数式でそれぞれをプロットする感じのプログラムにする。
-10~10の範囲で、0.1刻みでプロットできれば良いだろう。
出力された波形が等しければ導関数もきっと正しい。
ってことにしよう。
少しいい加減な雰囲気はあるが、
それ以外に正しさの証明も難しそうなので。
まぁ、シグモイド関数の導関数は有名だから、
試すまでもなく正しいんだけど。
まとめ
- 商の微分方式の話。
- 逆数の微分公式と積の微分公式の合わせ技で導出。
- いままでの公式達を再掲。
- 商の微分公式を使ってシグモイド関数の導関数を求めた。
- シグモイド関数、シグモイド関数の導関数の再掲と、シグモイド関数のオイラー法による微分の数式を確認する予定。
MATLAB、Python、Scilab、Julia比較ページはこちら
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント