Explica softmax y sigmoid en detalle

Introducción a las funciones de activación

Para aquellos que están involucrados o tienen conocimiento de la industria de la inteligencia artificial, creo que las dos funciones de activación de softmax y sigmoid no son desconocidas. Estas dos funciones de activación no solo se usan en regresión logística, sino que también se incluyen en entrevistas o exámenes escritos. Es muy importante y lo más básico dominar estas dos funciones de activación y sus funciones derivadas. Los siguientes detalles softmax y sigmoide:

función softmax

En matemáticas, la función softmax, también conocida como función exponencial normalizada, es una extensión de la función lógica. Puede "comprimir" un vector z de k-dimensión llamando a cualquier número real en dos vectores de k-dimensión σ (z), de modo que el rango de cada elemento esté entre (0, 1), y la suma de todos los elementos sea 1.

Propiedades de la función softmax

La fórmula de la función softmax es:
F (xi) = exp (xi) ∑ i = 0 kexp (xi) (i = 0, 1, 2, ... k) F (x_i) = \ frac {exp (x_i)} {\ sum_ {i = 0} ^ k {exp (x_i)}} (i = 0,1,2, ... k)F ( xyo)=i = 0ke x p ( xyo)e x p ( xyo)Yo=0 ,1 ,2 ,. . . K )
  x: los datos de entrada;
  exp: exponenciación;
  F (x): salida función;
  todos los mapas de los valores de x en el intervalo de 0 a 1;
 mapeo de todos los valores de x y es igual a 1.

Uso de la función softmax

  • Se utiliza para modelos de regresión logística de clasificación múltiple.
  • Al construir una red neuronal, use la función softmax en diferentes capas; softmax aparece como una capa completamente conectada en la red neuronal, y la función es mapear el resultado del cálculo de la red al intervalo (0, 1), dando cada categoría La probabilidad.

Código de implementación de softmax

implementación de python

import numpy as np

def softmax(x):
    orig_shape=x.shape
    #根据输入类型是矩阵还是向量分别做softmax
    if len(x.shape)>1:
        #矩阵
        #找到每一行的最大值max,并减去该max值,目的是为了防止exp溢出
        constant_shift=np.max(x,axis=1).reshape(1,-1)
        x-=constant_shift
        #计算exp
        x=np.exp(x)
        #每行求和
        normlize=np.sum(x,axis=1).reshape(1,-1)
        #求softmax
        x/=normlize
    else:
        #向量
        constant_shift=np.max(x)
        x-=constant_shift
        x=np.exp(x)
        normlize=np.sum(x)
        x/=normlize
    assert x.shape==orig_shape
    return x

imagen de la función softmax

import numpy as np
import matplotlib.pyplot as plt
def softmax(x):
    orig_shape=x.shape
    if len(x.shape)>1:
        constant_shift=np.max(x,axis=1).reshape(1,-1)
        x-=constant_shift
        x=np.exp(x)
        normlize=np.sum(x,axis=1).reshape(1,-1)
        x/=normlize
    else:
        constant_shift=np.max(x)
        x-=constant_shift
        x=np.exp(x)
        normlize=np.sum(x)
        x/=normlize
    assert x.shape==orig_shape
    return x

softmax_inputs = np.arange(0,5)
softmax_outputs=softmax(softmax_inputs)
print("softmax input:: {}".format(softmax_inputs))
print("softmax output:: {}".format(softmax_outputs))
# 画图像
plt.plot(softmax_inputs,softmax_outputs)
plt.xlabel("Softmax Inputs")
plt.ylabel("Softmax Outputs")
plt.show()

Inserte la descripción de la imagen aquí
Puede verse en la figura que cuanto mayor es el valor de entrada de softmax, mayor es su valor de salida.

función sigmoidea

La función sigmoidea es una función sigmoidea común en biología, también conocida como curva de crecimiento sigmoidea. La función sigmoidea se usa a menudo como la función de umbral de las redes neuronales para mapear variables entre 0 y 1.

La naturaleza de la función sigmoidea

La fórmula de la función sigmoidea es:
F (x) = 1 1 + exp (- x) F (x) = \ frac {1} {1 + exp (-x)}F ( x )=1+e x p ( - x )1
  x: datos de entrada;
  exp: operación exponencial;
  f (x): salida de función, que es un número de coma flotante;

Uso de la función sigmoidea

  • La función sigmoidea se utiliza para la clasificación binaria en el modelo de regresión logística.
  • En las redes neuronales, la función sigmoidea se utiliza como función de activación.
  • En estadística, la imagen de la función sigmoidea es una función de distribución acumulativa común.

Código de implementación de sigmoide

implementación de python

import numpy as np
def sigmoid(x):
    return 1.0/(1+np.exp(-x))

dibujo de la función sigmoidea

def sigmoid(x):
    return 1.0/(1+np.exp(-x))

sigmoid_inputs = np.arange(-10,10)
sigmoid_outputs=sigmoid(sigmoid(sigmoid_inputs))
print("sigmoid Input :: {}".format(sigmoid_inputs))
print("sigmoid Output :: {}".format(sigmoid_outputs))

plt.plot(sigmoid_inputs,sigmoid_outputs)
plt.xlabel("Sigmoid Inputs")
plt.ylabel("Sigmoid Outputs")
plt.show()

Inserte la descripción de la imagen aquí

Comparación de softmax y sigmoid

común softmax sigmoideo
oficial F (xi) = exp (xi) ∑ i = 0 kexp (xi) F (x_i) = \ frac {exp (x_i)} {\ sum_ {i = 0} ^ k {exp (x_i)}} F ( xyo)=i = 0ke x p ( xyo)e x p ( xyo) F (x) = 1 1 + exp (- x) F (x) = \ frac {1} {1 + exp (-x)} F ( x )=1 + e x p ( - x )1
Naturaleza Distribución de probabilidad discreta Mapeo no lineal
tarea Multi-categoría Dos categorias
Dominio Un vector unidimensional Valor único
rango [0, 1] (0, 1)
Suma de resultados Debe ser 1 Es un numero positivo

Supongo que te gusta

Origin blog.csdn.net/CFH1021/article/details/104841428
Recomendado
Clasificación