web-dev-qa-db-ja.com

シグモイドの導関数

学習のためにバックプロパゲーション技術を使用してニューラルネットワークを作成しています。

使用するアクティベーション関数の導関数を見つける必要があることを理解しています。標準のシグモイド関数を使用しています

_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)に置き換えるだけの問題ですか?

22
rflood89

これを行う2つの方法は同等です(数学関数には副作用がなく、特定の出力に対して常に同じ入力を返すため)。そのため、(高速な)2番目の方法を使用することもできます。

12
Dougal

Dougalは正しいです。するだけ

f = 1/(1+exp(-x))
df = f * (1 - f)
31
Bruno Kim

少し代数でこれを単純化できるので、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
5

sigmoid関数の出力を使用してSigmoidDerivative関数に渡し、以下のf(x)として使用できます。

dy/dx = f(x)' = f(x) * (1 - f(x))
2
jarwal