Como é difícil Sigmoid definido

votos
5

Eu estou trabalhando em profunda Nets usando keras. Há uma ativação sigmóide duro. Qual é a sua definição matemática?

Eu sei o que é sigmóide. Alguém perguntou pergunta semelhante sobre Quora: https://www.quora.com/What-is-hard-sigmoid-in-artificial-neural-networks-Why-is-it-faster-than-standard-sigmoid-Are-there -os-desvantagens-over-the-padrão-sigmóide

Mas eu não conseguia encontrar a definição matemática precisa em qualquer lugar?

Publicado 15/02/2016 em 11:54
fonte usuário
Em outras línguas...                            


4 respostas

votos
11

Desde Keras suporta tanto Tensorflow e Theano, a implementação exata pode ser diferente para cada backend - Eu vou apenas cobrir Theano. Para Théano backend Keras utiliza T.nnet.hard_sigmoid, o qual por sua vez é linearmente aproximada sigmóide padrão :

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)

ou seja, que é: max(0, min(1, x*0.2 + 0.5))

Respondeu 23/02/2016 em 12:51
fonte usuário

votos
1

Para referência, a hard sigmoid functionpode ser definido de modo diferente em locais diferentes. Em Courbariaux et al. 2016 [1] é definido como:

σ é a função de “duro sigmóide”: σ (x) = grampo ((x + 1) / 2, 0, 1) = Max (0, min (1, (x + 1) / 2))

A intenção é a de fornecer um valor de probabilidade (portanto, restringindo-o a situar-se entre 0e 1) para uso em binarizao estocástica de parâmetros de rede neural (por exemplo, peso, activação, gradiente). Você usa a probabilidade p = σ(x)retornado da função sigmóide difícil definir o parâmetro xpara +1com pa probabilidade, ou -1com probabilidade 1-p.

[1] https://arxiv.org/abs/1602.02830 - "binarizadas Redes Neurais: Treinamento profundas Redes Neurais com pesos e Ativações constrangido a +1 ou -1", Matthieu Courbariaux, Itay Hubara, Daniel Soudry, Ran El-Yaniv , Yoshua Bengio, (Apresentada em 9 Fev 2016 (v1), revista pela última vez décima sétima marco de 2016 (esta versão, v3))

Respondeu 21/09/2016 em 19:14
fonte usuário

votos
-1

isto é

  max(0, min(1, (x + 1)/2)) 
Respondeu 28/02/2018 em 11:18
fonte usuário

votos
0

O sigmóide duro é normalmente uma aproximação linear por partes da função sigmóide logística. Dependendo do que propriedades do sigmóide original que você deseja manter, você pode usar uma aproximação diferente.

Eu, pessoalmente, gosto de manter o funcionamento correto do zero, ou seja, σ(0) = 0.5(turno) e σ'(0) = 0.25(inclinação). Isto poderia ser codificado como a seguir

def hard_sigmoid(x):
    return np.maximum(0, np.minimum(1, (x + 2) / 4))
Respondeu 13/09/2018 em 11:49
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more