私はケラを使ってディープネットに取り組んでいます。アクティベーション「ハードシグモイド」があります。その数学的定義は何ですか?
私はS状結腸とは何かを知っています。誰かがQuoraで同様の質問をしました: https://www.quora.com/What-is-hard-sigmoid-in-artificial-neural-networks-Why-is-it-faster-than-standard-sigmoid -標準シグモイドよりも不利な点があります
しかし、正確な数学的定義はどこにも見つかりませんでしたか?
KerasはTensorflowとTheanoの両方をサポートしているため、正確な実装はバックエンドごとに異なる可能性があります。ここではTheanoについてのみ説明します。 Theanoバックエンドの場合、Kerasは_T.nnet.hard_sigmoid
_を使用します。これは、次に 線形近似された標準シグモイド :
_slope = tensor.constant(0.2, dtype=out_dtype)
shift = tensor.constant(0.5, dtype=out_dtype)
x = (x * slope) + shift
x = tensor.clip(x, 0, 1)
_
つまり、次のようになります:max(0, min(1, x*0.2 + 0.5))
参考までに、_hard sigmoid function
_は場所によって定義が異なる場合があります。 Courbariaux etal。 2016 [1]次のように定義されています。
σは「ハードシグモイド」関数です。σ(x)= clip((x + 1)/ 2、0、1)= max(0、min(1、(x + 1)/ 2))
目的は、ニューラルネットワークパラメーター(重み、アクティブ化、勾配など)の確率的2値化で使用する確率値を提供することです(したがって、_0
_と_1
_の間にあるように制約します)。ハードシグモイド関数から返される確率p = σ(x)
を使用して、パラメーターx
をp
確率で_+1
_に設定するか、確率で_-1
_に設定します。 _1-p
_。
[1] https://arxiv.org/abs/1602.028 -「二値化ニューラルネットワーク:重みとアクティベーションを+1または-1に制限したディープニューラルネットワークのトレーニング」、Matthieu Courbariaux、Itay Hubara、 Daniel Soudry、Ran El-Yaniv、Yoshua Bengio、(2016年2月9日(v1)に提出、2016年3月17日最終改訂(このバージョン、v3))
ハードシグモイドは通常、ロジスティックシグモイド関数の区分的線形近似です。保持する元のシグモイドのプロパティに応じて、異なる近似を使用できます。
私は個人的に、関数をゼロに正しく保つのが好きです。つまり、σ(0) = 0.5
(シフト)とσ'(0) = 0.25
(勾配)です。これは次のようにコーディングできます
def hard_sigmoid(x):
return np.maximum(0, np.minimum(1, (x + 2) / 4))