web-dev-qa-db-ja.com

ハードシグモイドはどのように定義されますか

私はケラを使ってディープネットに取り組んでいます。アクティベーション「ハードシグモイド」があります。その数学的定義は何ですか?

私はS状結腸とは何かを知っています。誰かがQuoraで同様の質問をしました: https://www.quora.com/What-is-hard-sigmoid-in-artificial-neural-networks-Why-is-it-faster-than-standard-sigmoid -標準シグモイドよりも不利な点があります

しかし、正確な数学的定義はどこにも見つかりませんでしたか?

9
Anuj Gupta

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))

12

参考までに、_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)を使用して、パラメーターxp確率で_+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))

2
bobo

ハードシグモイドは通常、ロジスティックシグモイド関数の区分的線形近似です。保持する元のシグモイドのプロパティに応じて、異なる近似を使用できます。

私は個人的に、関数をゼロに正しく保つのが好きです。つまり、σ(0) = 0.5(シフト)とσ'(0) = 0.25(勾配)です。これは次のようにコーディングできます

def hard_sigmoid(x):
    return np.maximum(0, np.minimum(1, (x + 2) / 4))
0
Mr Tsjolder