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