Qual é o significado da palavra logits no TensorFlow?

250

Na função TensorFlow a seguir, devemos alimentar a ativação de neurônios artificiais na camada final. Isso eu entendo. Mas não entendo por que é chamado logits? Isso não é uma função matemática?

loss_function = tf.nn.softmax_cross_entropy_with_logits(
     logits = last_layer,
     labels = target_output
)
Milad P.
fonte

Respostas:

215

Logits é um termo sobrecarregado que pode significar muitas coisas diferentes:


Em matemática , Logit é uma função que mapeia probabilidades ( [0, 1]) para R ( (-inf, inf))

insira a descrição da imagem aqui

A probabilidade de 0,5 corresponde a um logit de 0. O logit negativo corresponde a probabilidades inferiores a 0,5, positivas a> 0,5.

No ML , pode ser

o vetor de previsões brutas (não normalizadas) que um modelo de classificação gera, que normalmente é passado para uma função de normalização. Se o modelo estiver resolvendo um problema de classificação de várias classes, os logits geralmente se tornam uma entrada para a função softmax. A função softmax gera um vetor de probabilidades (normalizadas) com um valor para cada classe possível.

Às vezes, os logits também se referem ao inverso em elementos da função sigmóide.

Salvador Dalí
fonte
127
Para Tensorflow: É um nome que se pensa sugerir que esse Tensor é a quantidade que está sendo mapeada para probabilidades pelo Softmax.
thertweck
1
isso é igual à coisa exponenciada antes do softmax? ou seja, softmax(logit) = exp(logit)/Z(logit)então logit = h_NN(x)? então logit é o mesmo que "score"?
Charlie Parker
4
Entendimento pessoal, no domínio TensorFlow, logits são os valores a serem usados ​​como entrada no softmax. Cheguei a esse entendimento com base neste tutorial de tensorflow.
Diansheng
2
Não tenho certeza se isso responde à pergunta. Talvez seja por isso que nunca foi aceito. Eu entendo o que é a função logit, mas também me intriga porque o Tensorflow chama esses argumentos de logits. É também a mesma designação para vários dos parâmetros nas funções de Tensorflow
dleal
1
Você pode fazer um exemplo simples? Isto está certo? [1, 0.5, 0.5]através da normalização se tornar [0.5, 0.25, 0.25]e, em seguida, macio max [0,]se tornar um quente [1, 0, 0]? ou apenas colocar [1, 0, 0]porque a saída deve ser um vetor?
Tina Liu
91

Basta adicionar esse esclarecimento para que qualquer pessoa que role isso para baixo possa pelo menos acertar, pois há muitas respostas erradas votadas.

De Diansheng resposta e de JakeJ resposta obtê-lo direito.
Uma nova resposta postada por Shital Shah é uma resposta ainda melhor e mais completa.


Sim, logit como uma função matemática em estatística, mas o logitusado no contexto de redes neurais é diferente. Estatística logitnem faz sentido aqui.


Não consegui encontrar uma definição formal em nenhum lugar, mas logitbasicamente significa:

As previsões brutas que saem da última camada da rede neural.
1. Este é o próprio tensor no qual você aplica a argmaxfunção para obter a classe prevista.
2. Esse é o próprio tensor que você alimenta na softmaxfunção para obter as probabilidades para as classes previstas.


Além disso, em um tutorial no site oficial do tensorflow:

Camada de Logits

A camada final em nossa rede neural é a camada de logits, que retornará os valores brutos para nossas previsões. Criamos uma camada densa com 10 neurônios (um para cada classe de destino de 0 a 9), com ativação linear (o padrão):

logits = tf.layers.dense(inputs=dropout, units=10)

Se você ainda está confuso, a situação é assim:

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)

onde predicted_class_index_by_rawe predicted_class_index_by_probserá igual.

Outro nome para raw_predictionso código acima élogit .


Quanto ao porquê logit ... não faço ideia. Desculpe.
[Editar: Veja esta resposta para as motivações históricas por trás do termo.]


Curiosidades

Embora, se você quiser, você pode aplicar estatística logitpara probabilitiesque sair da softmaxfunção.

Se a probabilidade de uma determinada classe for p,
então as chances de log dessa classe são L = logit(p).

Além disso, a probabilidade dessa classe pode ser recuperada como p = sigmoid(L), usando a sigmoidfunção

Não é muito útil para calcular as probabilidades de log.

AneesAhmed777
fonte
80

Logit é uma função que mapeia probabilidades [0, 1]para [-inf, +inf].

Softmax é uma função que mapeia [-inf, +inf]para [0, 1]semelhante ao Sigmoid. Mas o Softmax também normaliza a soma dos valores (vetor de saída) para 1.

Fluxo de tensor "com logit" : significa que você está aplicando uma função softmax aos números de logit para normalizá-la. O input_vector / logit não é normalizado e pode ser dimensionado de [-inf, inf].

Essa normalização é usada para problemas de classificação em várias classes. E, para problemas de classificação de múltiplas etiquetas, é utilizada a normalização sigmóide, ou seja,tf.nn.sigmoid_cross_entropy_with_logits

Trideep Rath
fonte
10
então logit é o mesmo que a "pontuação"
Charlie Parker
1
Sugiro adicionando uma linha em sua resposta diferenciar explicitamente Logitfunção (estatísticas) e logitscamada (tensorflow)
AneesAhmed777
62

Resumo

No contexto de aprendizagem profunda a camada logitos significa que a camada que as alimentações em que softmax (ou outro tal normalização). A saída do softmax são as probabilidades para a tarefa de classificação e sua entrada é a camada de logits. A camada de logits normalmente produz valores de -in infinito a + infinito e a camada softmax o transforma em valores de 0 a 1.

Contexto histórico

De onde vem esse termo? Nas décadas de 1930 e 40, várias pessoas estavam tentando adaptar a regressão linear ao problema de previsão de probabilidades. No entanto, a regressão linear produz saída de-infinito para + infinito, enquanto que para as probabilidades, nossa saída desejada é de 0 a 1. Uma maneira de fazer isso é mapear de alguma forma as probabilidades de 0 a 1 a infinito + infinito e, em seguida, usar a regressão linear como de costume. Um desses mapeamentos é a distribuição normal cumulativa usada por Chester Ittner Bliss em 1934 e ele chamou esse modelo de "probit", abreviação de "probability unit". No entanto, essa função é computacionalmente cara, enquanto falta algumas das propriedades desejáveis ​​para a classificação de várias classes. Em 1944, Joseph Berkson usou a funçãolog(p/(1-p))para fazer esse mapeamento e o chamou de logit, abreviação de "unidade logística". O termo regressão logística também derivou disso.

A confusão

Infelizmente, o termo logits é abusado no aprendizado profundo. Da perspectiva matemática pura, logit é uma função que executa acima do mapeamento. No aprendizado profundo, as pessoas começaram a chamar a camada de "camada de logits" que alimenta a função de logit. Então, as pessoas começaram a chamar os valores de saída dessa camada "logit", criando a confusão com a função logit .

Código de fluxo

Infelizmente, o código TensorFlow aumenta ainda mais a confusão por nomes como tf.nn.softmax_cross_entropy_with_logits. O que significa logits aqui? Significa apenas que a entrada da função deve ser a saída da última camada de neurônios, conforme descrito acima. O _with_logitssufixo é redundante, confuso e sem sentido . As funções devem ser nomeadas sem considerar contextos muito específicos, porque são simplesmente operações matemáticas que podem ser executadas em valores derivados de muitos outros domínios. De fato, o TensorFlow tem outra função semelhante, sparse_softmax_cross_entropyonde felizmente se esqueceram de adicionar _with_logitssufixos, criando inconsistências e aumentando a confusão. Por outro lado, o PyTorch simplesmente nomeia sua função sem esse tipo de sufixo.

Referência

Os slides da palestra Logit / Probit são um dos melhores recursos para entender o logit. Também atualizei o artigo da Wikipedia com algumas das informações acima.

Shital Shah
fonte
31

Entendimento pessoal, no domínio TensorFlow, logits são os valores a serem usados ​​como entrada no softmax. Cheguei a esse entendimento com base neste tutorial de tensorflow.

https://www.tensorflow.org/tutorials/layers


Embora seja verdade que o logit é uma função em matemática (especialmente em estatística), não acho que seja o mesmo 'logit' que você está procurando. No livro Deep Learning, de Ian Goodfellow, ele mencionou:

A função σ −1 (x) é chamada de logit nas estatísticas, mas esse termo é mais raramente usado no aprendizado de máquina. σ −1 (x) representa a função inversa da função sigmóide logística.

No TensorFlow, é frequentemente visto como o nome da última camada. No capítulo 10 do livro Hands-on Machine Learning com Scikit-learn e TensorFLow de Aurélien Géron, deparei-me com este parágrafo, que afirmava logitsclaramente a camada.

note que logitsé a saída da rede neural antes de passar pela função de ativação do softmax: por razões de otimização, trataremos do cálculo do softmax posteriormente.

Ou seja, embora usemos o softmax como a função de ativação na última camada do nosso design, para facilitar o cálculo, retiramos logitsseparadamente. Isso ocorre porque é mais eficiente calcular softmaxe cross-entropyperder juntos. Lembre-se de que cross-entropyé uma função de custo, não usada na propagação direta.

Diansheng
fonte
12

Aqui está uma resposta concisa para futuros leitores. Tensorflow's logité definido como a saída de um neurónio sem aplicar a função de activação:

logit = w*x + b,

x: entrada, w: peso, b: viés. É isso aí.


O seguinte é irrelevante para esta pergunta.

Para palestras históricas, leia outras respostas. Tiramos o chapéu para Tensorflowa convenção de nomenclatura "criativamente" confusa. Em PyTorch, existe apenas um CrossEntropyLosse ele aceita saídas não ativadas. Convoluções, multiplicações de matrizes e ativações são operações do mesmo nível. O design é muito mais modular e menos confuso. Essa é uma das razões pelas quais mudei Tensorflowpara PyTorch.

Jonathan Lee
fonte
8

( FOMO sapiens).

Se você marcar a função Logit matemática, ela converterá o espaço real do [0,1]intervalo para o infinito [-inf, inf].

Sigmoid e softmax farão exatamente o oposto. Eles converterão o [-inf, inf]espaço [0, 1]real em espaço real.

É por isso que, no aprendizado de máquina, podemos usar o logit antes das funções sigmóide e softmax (uma vez que elas correspondem).

E é por isso que "podemos chamar" qualquer coisa no aprendizado de máquina que esteja na frente da função sigmóide ou softmax do logit .

Aqui está o vídeo de J. Hinton usando esse termo.

PS. Não estou recomendando assistir ao vídeo apenas para verificar o termo.

prosti
fonte
5

Eles são basicamente o modelo mais completo que você pode obter da rede, antes de ser compactado para aplicar apenas ao número de classes em que estamos interessados. Veja como alguns pesquisadores os usam para treinar uma rede neural rasa com base em uma profundidade profunda. rede aprendeu: https://arxiv.org/pdf/1312.6184.pdf

É como se, ao aprender uma matéria em detalhes, você aprendesse muitos pontos menores, mas, ao ensinar um aluno, tentaria compactá-la para o caso mais simples. Se o aluno agora tentasse ensinar, seria bastante difícil, mas seria capaz de descrevê-lo apenas o suficiente para usar o idioma.

JakeJ
fonte
1

A função logit (/ ˈloʊdʒɪt / LOH-jit) é o inverso da função "logística" sigmoidal ou transformação logística usada em matemática, especialmente em estatística. Quando a variável da função representa uma probabilidade p, a função logit fornece as probabilidades do log ou o logaritmo das probabilidades p / (1 - p).

Veja aqui: https://en.wikipedia.org/wiki/Logit

Jagger Yu
fonte
4
Isso é em estatística / matemática. Estamos falando de aprendizado de máquina aqui, onde logittem um significado diferente. Veja isto , isto , isto .
precisa saber é o seguinte
1

logits

O vetor de previsões brutas (não normalizadas) que um modelo de classificação gera, que normalmente é passado para uma função de normalização. Se o modelo estiver resolvendo um problema de classificação de várias classes, os logits geralmente se tornam uma entrada para a função softmax. A função softmax gera um vetor de probabilidades (normalizadas) com um valor para cada classe possível.

Além disso, os logits às vezes se referem ao inverso em elementos da função sigmóide. Para obter mais informações, consulte tf.nn.sigmoid_cross_entropy_with_logits.

documentação oficial do tensorflow

Vinay Jaju
fonte
-3

Os logits geralmente são os valores da função Z da camada de saída no Tensorflow.

Myron Leskiv
fonte
Não necessariamente, veja as outras respostas.
quant