学習のためにバックプロパゲーション技術を使用してニューラルネットワークを作成しています。
使用するアクティベーション関数の導関数を見つける必要があることを理解しています。標準のシグモイド関数を使用しています
_f(x) = 1 / (1 + e^(-x))
_
そしてその派生物が
_dy/dx = f(x)' = f(x) * (1 - f(x))
_
これはちょっとした質問かもしれませんが、これは、方程式の間にxをシグモイド関数に2回渡さなければならないことを意味します。
_dy/dx = f(x)' = 1 / (1 + e^(-x)) * (1 - (1 / (1 + e^(-x))))
_
または、ニューロンの出力であるf(x)
の既に計算された出力を取得し、その値をf(x)
に置き換えるだけの問題ですか?
これを行う2つの方法は同等です(数学関数には副作用がなく、特定の出力に対して常に同じ入力を返すため)。そのため、(高速な)2番目の方法を使用することもできます。
Dougalは正しいです。するだけ
f = 1/(1+exp(-x))
df = f * (1 - f)
少し代数でこれを単純化できるので、dfにfを呼び出す必要はありません。
df = exp(-x)/(1 + exp(-x))^ 2
導出:
df = 1/(1+e^-x) * (1 - (1/(1+e^-x)))
df = 1/(1+e^-x) * (1+e^-x - 1)/(1+e^-x)
df = 1/(1+e^-x) * (e^-x)/(1+e^-x)
df = (e^-x)/(1+e^-x)^2
sigmoid
関数の出力を使用してSigmoidDerivative
関数に渡し、以下のf(x)
として使用できます。
dy/dx = f(x)' = f(x) * (1 - f(x))