ニューラルネットワークライブラリについては、いくつかの活性化関数と損失関数とその派生関数を実装しました。それらは任意に組み合わせることができ、出力層の微分は、損失導関数と活性化導関数の積になります。どのように損失関数から独立してSoftmax派生を実装するのですか?
しかし、私はSoftmax活性化関数の派生を損失関数とは独立に実装することができませんでした。方程式の正規化すなわち分母のために、単一の入力アクチベーションを変更すると、1つではなく、すべての出力アクチベーションが変更される。
派生物が約1%勾配検査に失敗するSoftmaxの実装がここにあります。ソフトマックスのデリバティブをどのように実装すれば、どのような損失機能と組み合わせることができますか?
import numpy as np
class Softmax:
def compute(self, incoming):
exps = np.exp(incoming)
return exps/exps.sum()
def delta(self, incoming, outgoing):
exps = np.exp(incoming)
others = exps.sum() - exps
return 1/(2 + exps/others + others/exps)
activation = Softmax()
cost = SquaredError()
outgoing = activation.compute(incoming)
delta_output_layer = activation.delta(incoming) * cost.delta(outgoing)
? –