softmax_cross_entropy_with_logits_v2 - ¿Cuál es el significado de la palabra logits en TensorFlow?
tf nn softmax_cross_entropy_with_logits_v2 (10)
La función logit (/ ˈloʊdʒɪt / LOH-jit) es la inversa de la función "logística" sigmoidal o la transformación logística utilizada en matemáticas, especialmente en estadística. Cuando la variable de la función representa una probabilidad p, la función logit da las probabilidades de registro, o el logaritmo de las probabilidades p / (1 - p).
Ver aquí: Logit
En la siguiente función TensorFlow, debemos alimentar la activación de neuronas artificiales en la capa final. Eso lo entiendo. Pero no entiendo por qué se llama logits? ¿No es esa una función matemática?
loss_function = tf.nn.softmax_cross_entropy_with_logits(
logits = last_layer,
labels = target_output
)
( FOMO sapiens).
Si marca la función matemática Logit, convierte el espacio real del intervalo
[0,1]
al infinito
[-inf, inf]
.
Sigmoid y softmax harán exactamente lo contrario.
Convertirán el espacio real
[-inf, inf]
en
[0, 1]
espacio real.
Es por eso que tiene sentido en el aprendizaje automático que podemos usar logit antes de la función sigmoide y softmax (ya que coinciden).
Y esta es la razón por la que "podemos llamar" cualquier cosa en el aprendizaje automático que va por delante de sigmoid o softmax funciona como logit.
Aquí está el video J. Hinton usign este término.
PD. No te recomiendo que veas el video solo para verificar el término.
Aquí hay una respuesta concisa para futuros lectores.
El
logit
Tensorflow
se define como la salida de una neurona sin aplicar la función de activación:
logit = w*x + b,
x: entrada, w: peso, b: sesgo. Eso es.
Lo siguiente es irrelevante para esta pregunta.
Para conferencias históricas, lea otras respuestas.
Tensorflow
la convención de nombres "creativamente" confusa de
Tensorflow
.
En
PyTorch
, solo hay un
CrossEntropyLoss
y acepta salidas no activadas.
Las convoluciones, las multiplicaciones de matrices y las activaciones son operaciones del mismo nivel.
El diseño es mucho más modular y menos confuso.
Esta es una de las razones por las que
Tensorflow
de
Tensorflow
a
PyTorch
.
Básicamente, son el modelo más completo que puede obtener de la red, antes de que se reduzca para aplicar solo a la cantidad de clases que nos interesan. Vea cómo algunos investigadores los usan para entrenar una red neuronal poco profunda en función de lo profundo que es la red ha aprendido: https://arxiv.org/pdf/1312.6184.pdf
Es como cuando aprendes una materia en detalle, aprenderás muchos puntos menores, pero luego, cuando enseñes a un estudiante, tratarás de comprimirlo en el caso más simple. Si el estudiante ahora intentara enseñar, sería bastante difícil, pero podría describirlo lo suficientemente bien como para usar el lenguaje.
La comprensión personal, en el dominio TensorFlow, los logits son los valores que se utilizarán como entrada para softmax. Llegué a este entendimiento basado en este tutorial de tensorflow.
Aunque es cierto que logit es una función en matemáticas (especialmente en estadísticas), no creo que sea el mismo ''logit'' que estás viendo. En el libro Deep Learning de Ian Goodfellow, mencionó:
La función σ −1 (x) se llama logit en estadística, pero este término se usa con menos frecuencia en el aprendizaje automático. σ −1 (x) representa la función inversa de la función sigmoidea logística.
En TensorFlow, se ve con frecuencia como el nombre de la última capa.
En el Capítulo 10 del libro
Aprendizaje automático práctico
con
Scikit-learn y TensorFLow
de Aurélien Géron, me encontré con este párrafo, que indicaba claramente la capa
logits
.
tenga en cuenta que
logits
es la salida de la red neuronal antes de pasar por la función de activación de softmax: por razones de optimización, manejaremos el cálculo de softmax más adelante.
Es decir, aunque usamos softmax como la función de activación en la última capa de nuestro diseño, para facilitar el cálculo, sacamos
logits
separado.
Esto se debe a que es más eficiente calcular el
softmax
y la pérdida de
cross-entropy
juntos.
Recuerde que
cross-entropy
es una función de costo, no utilizada en la propagación directa.
Logits es un término sobrecargado que puede significar muchas cosas diferentes:
En matemáticas
,
Logit
es una función que asigna probabilidades (
[0, 1]
) a R (
(-inf, inf)
)
La probabilidad de 0.5 corresponde a un logit de 0. El logit negativo corresponde a probabilidades menores de 0.5, positivas a> 0.5.
En ML , puede ser
El vector de predicciones sin procesar (no normalizadas) que genera un modelo de clasificación, que normalmente se pasa a una función de normalización. Si el modelo está resolviendo un problema de clasificación de varias clases, los logits generalmente se convierten en una entrada a la función softmax. La función softmax genera un vector de probabilidades (normalizadas) con un valor para cada clase posible.
Los logits a veces también se refieren al elemento inverso de la función sigmoidea.
Los logits a menudo son los valores de la función Z de la capa de salida en Tensorflow.
Simplemente agregue esta aclaración para que cualquiera que se desplace tanto pueda al menos hacerlo bien, ya que hay muchas respuestas incorrectas que se votaron.
La
answer
Diansheng y la
answer
de JakeJ son correctas.
Una nueva respuesta
publicada por Shital Shah es una respuesta aún mejor y más completa.
Sí,
logit
como una
Logit
matemática en estadística,
pero el
logit
utilizado en el contexto de redes neuronales es diferente.
El
logit
estadístico ni siquiera tiene sentido aquí.
No pude encontrar una definición formal en ningún lado, pero
logit
básicamente significa:
Las predicciones en bruto que salen de la última capa de la red neuronal.
1. Este es el tensor en el que aplica la funciónargmax
para obtener la clase predicha.
2. Este es el mismo tensor que introduces en la funciónsoftmax
para obtener las probabilidades para las clases predichas.
Además, de un tutorial en el sitio web oficial de tensorflow:
Capa de logits
La capa final en nuestra red neuronal es la capa logits, que devolverá los valores brutos de nuestras predicciones. Creamos una capa densa con 10 neuronas (una para cada clase objetivo 0–9), con activación lineal (el valor predeterminado):
logits = tf.layers.dense(inputs=dropout, units=10)
Si todavía está confundido, la situación es la siguiente:
raw_predictions = neural_net(input_layer)
predicted_class_index_by_raw = argmax(raw_predictions)
probabilities = softmax(raw_predictions)
predicted_class_index_by_prob = argmax(probabilities)
donde,
predicted_class_index_by_raw
y
predicted_class_index_by_prob
serán iguales.
Otro nombre para
raw_predictions
en el código anterior es
logit
.
En cuanto al
por qué
logit
... No tengo idea.
Lo siento.
[Editar: Vea
esta respuesta
para las motivaciones históricas detrás del término.]
Trivialidades
Aunque, si lo desea, puede aplicar
logit
estadístico a las
probabilities
que surgen de la función
softmax
.
Si la probabilidad de cierta clase es
p
,
Entonces las
probabilidades
de
log
de esa clase son
L = logit(p)
.
Además, la probabilidad de esa clase se puede recuperar como
p = sigmoid(L)
, utilizando la función
sigmoid
.
Sin embargo, no es muy útil para calcular las probabilidades de registro.
Logit
es una función que asigna probabilidades
[0, 1]
a
[-inf, +inf]
.
Softmax
es una función que asigna
[-inf, +inf]
a
[0, 1]
similar a Sigmoid.
Pero Softmax también normaliza la suma de los valores (vector de salida) a 1.
Tensorflow "con logit" : significa que está aplicando una función softmax para registrar números para normalizarlo. Input_vector / logit no está normalizado y puede escalar desde [-inf, inf].
Esta normalización se usa para problemas de clasificación multiclase.
Y para problemas de clasificación de múltiples etiquetas se utiliza la normalización sigmoidea, es decir,
tf.nn.sigmoid_cross_entropy_with_logits
Resumen
En el contexto del aprendizaje profundo, la capa logits significa la capa que se alimenta a softmax (u otra normalización similar). La salida del softmax son las probabilidades para la tarea de clasificación y su entrada es la capa logits. La capa logits generalmente produce valores desde -infinito hasta + infinito y la capa softmax la transforma en valores de 0 a 1.
Contexto histórico
¿De dónde viene este término?
En los años treinta y cuarenta, varias personas intentaban adaptar la regresión lineal al problema de predicción de probabilidades.
Sin embargo, la regresión lineal produce una salida desde -infinito a + infinito, mientras que para las probabilidades nuestra salida deseada es de 0 a 1. Una forma de hacerlo es mapear de alguna manera las probabilidades de 0 a 1 a -infinito a + infinito y luego usar la regresión lineal como de costumbre.
Uno de estos mapas es la distribución normal acumulativa que fue utilizada por Chester Ittner Bliss en 1934 y llamó a este modelo "probit", abreviatura de "unidad de probabilidad".
Sin embargo, esta función es computacionalmente costosa y carece de algunas de las propiedades deseables para la clasificación de varias clases.
En 1944, Joseph Berkson usó la función
log(p/(1-p))
para hacer este mapeo y lo llamó logit, abreviatura de "unidad logística".
El término regresión logística deriva de esto también.
La confusión
Lamentablemente, el término logits se abusa en el aprendizaje profundo. Desde una perspectiva matemática pura, logit es una función que realiza el mapeo anterior. En el aprendizaje profundo, la gente comenzó a llamar a la capa "capa logits" que se alimenta a la función logit. Entonces la gente comenzó a llamar a los valores de salida de esta capa "logit" creando la confusión con logit la función .
Código TensorFlow
Desafortunadamente, el código TensorFlow se suma a la confusión por nombres como
tf.nn.softmax_cross_entropy_with_logits
.
¿Qué significa logits aquí?
Simplemente significa que se supone que la entrada de la función es la salida de la última capa de neuronas como se describió anteriormente.
El sufijo
_with_logits
es
redundante, confuso e inútil
.
Las funciones deben nombrarse sin tener en cuenta contextos tan específicos porque son simplemente operaciones matemáticas que pueden realizarse en valores derivados de muchos otros dominios.
De hecho, TensorFlow tiene otra función similar
sparse_softmax_cross_entropy
donde afortunadamente olvidaron agregar el sufijo
_with_logits
creando inconsistencia y agregando confusión.
PyTorch, por otro lado, simplemente nombra su función sin este tipo de sufijos.
Referencia
Las diapositivas de conferencias Logit / Probit son uno de los mejores recursos para comprender logit. También he actualizado el Logit con parte de la información anterior.