2016-02-15 12 views
6

Sto lavorando a Deep Nets utilizzando keras. C'è un'attivazione "hard sigmoid". Qual è la sua definizione matematica?Come è definito il sigmoide rigido

So cosa è Sigmoid. Qualcuno ha fatto una domanda simile su Quora: https://www.quora.com/What-is-hard-sigmoid-in-artificial-neural-networks-Why-is-it-faster-than-standard-sigmoid-Are-there-any-disadvantages-over-the-standard-sigmoid

Ma non sono riuscito a trovare la precisa definizione matematica da nessuna parte?

+0

è vero max (0, min (1, (x + 1)/2) –

risposta

0

è

max(0, min(1, (x + 1)/2)) 
10

Poiché Keras supporta Tensorflow e Theano, l'implementazione esatta potrebbe essere diversa per ogni back-end: coprirò solo Theano. Per Teanò backend Keras utilizza T.nnet.hard_sigmoid, che è a sua volta linearly approximated standard 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) 

cioè è max (0, min (1, x * 0,2 + 0,5))

+1

Il backend TensorFlow di Keras ha la stessa matematica, anche se implementato a mano. https://github.com/fchollet/keras/blob/master/keras/backend/tensorflow_backend.py#L1487 –

1

per riferimento, possono essere definiti il ​​hard sigmoid function diversamente in posti diversi. In Courbariaux et al. 2016 [1] è definito come:

σ è la funzione “sigmoide hard”: σ (x) = fermaglio ((x + 1)/2, 0, 1) = max (0, min (1, (x + 1)/2))

L'intento è quello di fornire un valore di probabilità (quindi vincolante per essere tra 0 e 1) per l'uso in stocastico binarizzazione dei parametri della rete neurale (es peso, attivazione , gradiente). Si utilizza la probabilità p = σ(x) restituita dalla funzione hard sigmoid per impostare il parametro x su +1 con probabilità p o -1 con probabilità 1-p.

[1] https://arxiv.org/abs/1602.02830 - "binarizzata Reti Neurali: formazione profonde reti neurali con pesi e Attivazioni Constrained a +1 o -1", Matthieu Courbariaux, Itay Hubara, Daniel Soudry, Ran El-Yaniv, Yoshua Bengio, (Presentata il 9 Feb 2016 (v1), ultima revisione 17 Mar 2016 (questa versione, v3))