Saltar para o conteúdo

Função softmax

Origem: Wikipédia, a enciclopédia livre.

A função softmax, também conhecida como softargmax[1]:184 ou função exponencial normalizada,[2]:198 converte um vetor de K números reais em uma distribuição de probabilidade de K resultados possíveis. É uma generalização da função logística para várias dimensões e é usada na regressão logística multinomial [en]. A função softmax é frequentemente usada como a última função de ativação [en] de uma rede neural para normalizar a saída de uma rede para uma distribuição de probabilidade sobre as classes de saída previstas, com base no axioma de escolha de Luce [en].

Definição[editar | editar código-fonte]

A função softmax recebe como entrada um vetor z de K números reais e o normaliza em uma distribuição de probabilidade que consiste em K probabilidades proporcionais aos exponenciais dos números de entrada. Ou seja, antes de aplicar a softmax, alguns componentes do vetor podem ser negativos ou maiores que um e podem não somar 1, mas, após aplicar a softmax, cada componente estará no intervalo , e os componentes serão somados a 1, de modo que possam ser interpretados como probabilidades. Além disso, os componentes de entrada maiores corresponderão a probabilidades maiores.

A função softmax padrão (unitária) , na qual define-se por

Em outras palavras, é aplicada a função exponencial padrão a cada elemento do vetor de entrada e esses valores são normalizados dividindo-se pela soma de todos esses exponenciais. A normalização garante que a soma dos componentes do vetor de saída seja 1. O termo "softmax" deriva dos efeitos de amplificação do exponencial em qualquer máximo no vetor de entrada. Por exemplo, o softmax padrão de é aproximadamente , o que equivale a atribuir quase todo o peso unitário total no resultado à posição do elemento máximo do vetor (de 8).

Em geral, em vez de e, uma Base [en] diferente b > 0 pode ser usada.  Se 0 < b < 1, componentes de entrada menores resultarão em probabilidades de saída maiores, e a diminuição do valor de b criará distribuições de probabilidade mais concentradas em torno das posições dos menores valores de entrada.

Por outro lado, como acima, se b > 1 componentes de entrada maiores resultarão em probabilidades de saída maiores, e o aumento do valor de b criará distribuições de probabilidade mais concentradas em torno das posições dos maiores valores de entrada. Escrever ou [a] (para β real)[b] produz as expressões:[c]Em alguns campos, a base é fixa, correspondendo a uma escala fixa,[d], enquanto em outros o parâmetro β é variado.

Interpretações[editar | editar código-fonte]

Arg max suave[editar | editar código-fonte]

O nome "softmax" é enganoso. A função não é um máximo suave [en] (ou seja, uma aproximação suave da função máxima), mas uma aproximação suave da função arg max [en]: a função cujo valor é o "índice" do maior elemento de um vetor. De fato, o termo "softmax" também é usado para a função LogSumExp [en], que é um máximo suave. Por esse motivo, alguns preferem o termo mais preciso "softargmax", mas o termo "softmax" é convencional no aprendizado de máquina.[3][4] Esta seção usa o termo "softargmax" para enfatizar essa interpretação.

Formalmente, em vez de considerar o arg max como uma função com saída categórica (correspondente ao índice), considere a função arg max com representação one-hot da saída (supondo que haja um arg máximo exclusivo):

em que a coordenada de saída se e somente se for o arg max de , o que significa que é o único valor máximo de . Por exemplo, nessa codificação, já que o terceiro argumento é o máximo.

Isso pode ser generalizado para vários valores de arg max (vários iguais a sendo o máximo) dividindo o 1 entre todos os args max; formalmente 1/k onde k é o número de argumentos que assumem o máximo. Por exemplo, já que o segundo e o terceiro argumento são ambos máximos. No caso de todos os argumentos serem iguais, isso é simplesmente Os pontos z com vários valores de arg max são pontos singulares (ou singularidades, e formam o conjunto singular) - esses são os pontos em que arg max é descontínuo (com uma descontinuidade de salto [en]) - enquanto os pontos com um único arg max são conhecidos como pontos não-singulares ou regulares.

Com a última expressão dada na introdução, softargmax é agora uma aproximação suave de arg max: como , softargmax converge para arg max. Há várias noções de convergência de uma função; softargmax converge para arg max pontualmente, o que significa que, para cada entrada fixa z} como , No entanto, softargmax não converge uniformemente para arg max, o que significa intuitivamente que pontos diferentes convergem em taxas diferentes e podem convergir de forma arbitrariamente lenta. De fato, o softargmax é contínuo, mas o arg max não é contínuo no conjunto singular em que duas coordenadas são iguais, enquanto o limite uniforme de funções contínuas é contínuo. O motivo pelo qual ele não converge uniformemente é que, para entradas em que duas coordenadas são quase iguais (e uma é a máxima), o arg max é o índice de uma ou outra, portanto, uma pequena alteração na entrada produz uma grande alteração na saída. Por exemplo, mas e para todas as entradas: quanto mais próximos os pontos estiverem do conjunto singular , mais lentamente eles convergem. No entanto, o softargmax faz converge de forma compacta [en] no conjunto não-singular.

Por outro lado, como , softargmax converge para arg min da mesma forma, onde aqui o conjunto singular são pontos com dois valores de arg min. Na linguagem da análise tropical [en], o softmax é uma deformação [en] ou "quantização" de arg max e arg min, correspondendo ao uso do semi-anel logarítmico [en] em vez do semi-anel tropical máximo [en] (respectivamente semi-anel tropical mínimo [en]), e a recuperação do arg max ou arg min tomando o limite é chamada de "tropicalização" ou "dequantização".

Também ocorre que, para qualquer β fixo, se uma entrada for muito maior do que as outras "relativas" à temperatura, , o resultado será aproximadamente o arg max. Por exemplo, uma diferença de 10 é grande em relação a uma temperatura de 1:No entanto, se a diferença for pequena em relação à temperatura, o valor não estará próximo do valor máximo de arg. Por exemplo, uma diferença de 10 é pequena em relação a uma temperatura de 100:Como , a temperatura vai para zero, , portanto, todas as diferenças acabam se tornando grandes (em relação a uma temperatura cada vez menor), o que proporciona outra interpretação para o comportamento limite.

Teoria da probabilidade[editar | editar código-fonte]

Na teoria da probabilidade, a saída da função softargmax pode ser usada para representar uma distribuição categórica [en], ou seja, uma distribuição de probabilidade sobre K diferentes resultados possíveis.

Mecânica estatística[editar | editar código-fonte]

Na mecânica estatística, a função softargmax é conhecida como distribuição de Boltzmann (ou distribuição de Gibbs):[5]:7 o conjunto de índices são os microestados do sistema; as entradas são as energias desse estado; o denominador é conhecido como a função de partição, geralmente denotada por Z; e o fator β é chamado de frieza (ou beta termodinâmico, ou temperatura inversa).

Aplicações[editar | editar código-fonte]

A função softmax é usada em vários métodos de classificação multiclasse [en], como a regressão logística multinomial [en] (também conhecida como regressão softmax)[2]:206–209 [1] análise discriminante linear [en] multiclasse, classificador Naive Bayes e redes neurais artificiais.[6] Especificamente, na regressão logística multinomial e na análise discriminante linear, a entrada para a função é o resultado de K funções lineares distintas, e a probabilidade prevista para a j-ésima classe, dado um vetor de amostra x e um vetor de ponderação w é:

Isso pode ser visto como a composição de funções lineares K e a função softmax (em que denota o produto interno de e ). A operação é equivalente à aplicação de um operador linear definido por aos vetores , transformando assim a entrada original, provavelmente altamente dimensional, em vetores em um espaço dimensional K.

Redes neurais[editar | editar código-fonte]

A função softmax padrão é frequentemente usada na camada final de um classificador baseado em rede neural. Essas redes são comumente treinadas em um regime de perda logarítmica (ou entropia cruzada), fornecendo uma variante não linear da regressão logística multinomial. Como a função mapeia um vetor e um índice específico para um valor real, a derivada precisa levar o índice em consideração:Essa expressão é simétrica nos índices e, portanto, também pode ser expressa como

Aqui, o delta de Kronecker é usado por simplicidade (cf. a derivada de uma função sigmoide, sendo expressa por meio da própria função).

Para obter cálculos numéricos estáveis da derivada, geralmente subtrai-se uma constante do vetor de entrada. Em teoria, isso não altera a saída e nem a derivada. Mas é mais estável, pois pode controlar explicitamente o maior valor computado em cada expoente. Se a função for dimensionada com o parâmetro , essas expressões deverão ser multiplicadas por .

Aprendizado por reforço[editar | editar código-fonte]

No segmento de aprendizado por reforço [en], uma função softmax pode ser usada para converter valores em probabilidades de ação. A função comumente usada é:[7]em que o valor da ação corresponde à recompensa esperada de seguir a ação a e é chamado de parâmetro de temperatura (em alusão à mecânica estatística). Para temperaturas altas (), todas as ações têm praticamente a mesma probabilidade e, quanto mais baixa a temperatura, mais as recompensas esperadas afetam a probabilidade. Para uma temperatura baixa (), a probabilidade da ação com a maior recompensa esperada tende a 1.

Complexidade computacional e soluções[editar | editar código-fonte]

Em aplicações de redes neurais, o número K de resultados possíveis costuma ser grande, por exemplo, no caso de modelos de linguagem neural que preveem o resultado provável de um vocabulário que pode conter milhões de palavras possíveis.[8]

Isso pode tornar os cálculos para a camada softmax (ou seja, as multiplicações de matriz para determinar o , seguidas pela aplicação da própria função softmax) computacionalmente caros.[8][9] Além disso, o método de retropropagação [en] de declive gradiente para treinar essa rede neural envolve o cálculo do softmax para cada exemplo de treinamento, e o número de exemplos de treinamento também pode se tornar grande. O esforço computacional para o softmax tornou-se um fator limitante importante no desenvolvimento de modelos de linguagem neural maiores, motivando várias soluções para reduzir o tempo de treinamento.[8][9]

As abordagens que reorganizam a camada de softmax para um cálculo mais eficiente incluem o softmax hierárquico e o softmax diferenciado.[8] O softmax hierárquico (introduzido por Morin e Bengio em 2005) usa uma estrutura de árvore binária em que os resultados (palavras do vocabulário) são as folhas e os nós intermediários são "classes" de resultados adequadamente selecionadas, formando variáveis latentes.[9][10] A probabilidade desejada (valor softmax) de uma folha (resultado) pode então ser calculada como o produto das probabilidades de todos os nós no caminho da raiz até essa folha.[9] Idealmente, quando a árvore estiver equilibrada, isso reduziria a complexidade computacional de para .[10] Na prática, os resultados dependem da escolha de uma boa estratégia para agrupar os resultados em classes.[9][10] Uma árvore de Huffman foi usada para isso nos modelos word2vec [en] do Google (introduzidos em 2013) para obter escalabilidade.

Um segundo tipo de solução se baseia na aproximação do softmax (durante o treinamento) com funções de perda modificadas que evitam o cálculo do fator de normalização completo.[8] Isso inclui métodos que restringem a soma de normalização a uma amostra de resultados (amostragem de importância, amostragem de alvo, por exemplo).[8][9]

Propriedades matemáticas[editar | editar código-fonte]

Geometricamente, a função softmax mapeia o espaço vetorial para a fronteira do simplex padrão , reduzindo a dimensão em um (o intervalo é um simplex -dimensional em um espaço -dimensional), devido à restrição linear de que todos os resultados somam 1, o que significa que ele está em um hiperplano. Ao longo da diagonal principal a softmax é apenas a distribuição uniforme nos resultados, : pontuações iguais geram probabilidades iguais. De modo geral, o softmax é invariável sob tradução pelo mesmo valor em cada coordenada: adicionando às entradas , obtém-se , porque ele multiplica cada expoente pelo mesmo fator, (porque ), de modo que as proporções não mudam:

Geometricamente, a softmax é constante ao longo das diagonais: essa é a dimensão que é eliminada e corresponde ao resultado da softmax ser independente de uma tradução nas pontuações de entrada (uma escolha de pontuação 0). É possível normalizar as pontuações de entrada supondo que a soma seja zero (subtraia a média: onde ) e, em seguida, a softmax usa o hiperplano de pontos que somam zero, , para o simplex aberto de valores positivos que somam 1, de forma análoga a como o expoente leva de 0 a 1, e é positivo.

Por outro lado, a softmax não é invariável sob escala. Por exemplo, mas

A função logística padrão é o caso especial de um eixo unidimensional em um espaço bidimensional, por exemplo, o eixo x no plano (x, y). Uma variável é fixada em 0 (digamos ), portanto , e a outra variável pode variar, denotando , portanto a função logística padrão, e seu complemento (o que significa que eles somam 1). A entrada unidimensional poderia, alternativamente, ser expressa como a linha , com saídas e

A função softmax também é o gradiente da função LogSumExp [en], um máximo suave [en]:

em que a função LogSumExp é definida como .

Histórico[editar | editar código-fonte]

A função softmax foi usada na mecânica estatística como a distribuição de Boltzmann no artigo fundamental Boltzmann (1868),[11]formalizada e popularizada no influente livro-texto Gibbs (1902).[12]

O uso da softmax na teoria da decisão é creditado a Luce (1959),[13]:1 que usou o axioma da independência de alternativas irrelevantes [en] na teoria da escolha racional para deduzir a softmax no axioma de escolha de Luce [en] para preferências relativas.

No aprendizado de máquina, o termo "softmax" é creditado a John S. Bridle em dois artigos de conferência de 1989, Bridle (1990a):[13]:1 e Bridle (1990b):[3]

Estamos preocupados com redes não lineares pré-alimentadas (perceptrons multicamadas, ou MLPs) com várias saídas. Queremos tratar as saídas da rede como probabilidades de alternativas ("por exemplo," classes de padrões), condicionadas às entradas. Procuramos não linearidades de saída apropriadas e critérios apropriados para a adaptação dos parâmetros da rede (por exemplo, pesos). Explicamos duas modificações: pontuação de probabilidade, que é uma alternativa à minimização do erro quadrático, e uma generalização exponencial normalizada (softmax) de várias entradas da não linearidade logística.[14]:227
Para qualquer entrada, as saídas devem ser todas positivas e devem somar a unidade...

Dado um conjunto de valores sem restrições, , podemos garantir ambas as condições usando uma transformação exponencial normalizada:

Essa transformação pode ser considerada uma generalização de várias entradas da logística, operando em toda a camada de saída. Ela preserva a ordem de classificação de seus valores de entrada e é uma generalização diferenciável da operação "winner-take-all" de escolher o valor máximo. Por esse motivo, gostamos de nos referir a ela como softmax.[15]:213


Exemplo[editar | editar código-fonte]

Se pegarmos uma entrada de [1, 2, 3, 4, 1, 2, 3], a softmax disso é [0,024, 0,064, 0,175, 0,475, 0,024, 0,064, 0,175]. A saída tem a maior parte de seu peso onde o "4" estava na entrada original. É para isso que a função é normalmente usada: para destacar os maiores valores e suprimir os valores que estão significativamente abaixo do valor máximo. Mas observe: a softmax não é invariante em escala, portanto, se a entrada fosse [0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3] (que soma 1,6), a softmax seria [0.125, 0.138, 0.153, 0.169, 0.125, 0.138, 0.153]. Isso mostra que, para valores entre 0 e 1, a softmax, de fato, reduz a ênfase no valor máximo (observe que 0,169 não é apenas menor que 0,475, mas também é menor que a proporção inicial de 0,4/1,6=0,25). Cálculo desse exemplo usando o código Python:

>>> import numpy as np
>>> a = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
>>> np.exp(a) / np.sum(np.exp(a)) 
array([0.02364054, 0.06426166, 0.1746813, 0.474833, 0.02364054,
       0.06426166, 0.1746813])

Confira um exemplo de código Julia:

julia> A = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]; # semicolon to suppress interactive output

ulia> exp.(A) ./ sum(exp, A)
7-element Array{Float64,1}:
 0.0236405
 0.0642617
 0.174681
 0.474833
 0.0236405
 0.0642617
 0.174681

Exemplo de código R:

> z <- c(1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0)
> softmax <- exp(z)/sum(exp(z))
> softmax
[1] 0.02364054 0.06426166 0.17468130 0.47483300 0.02364054 0.06426166 0.17468130

Exemplo de código Elixir:[16]

iex> t = Nx.tensor([[1, 2], [3, 4]])
iex> Nx.divide(Nx.exp(t), Nx.sum(Nx.exp(t)))

#Nx.Tensor<
  f64[2][2]
  [
    [0.03205860328008499, 0.08714431874203257],
    [0.23688281808991013, 0.6439142598879722]
  ]
>

Exemplo de código Raku [en]:

> my @z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0];
> say @z.map: {exp($_)/sum(@z.map: {exp($_)})}

(0.023640543021591385 0.06426165851049616 0.17468129859572226 0.4748329997443803 0.023640543021591385 0.06426165851049616 0.17468129859572226)

Ver também[editar | editar código-fonte]

Notas[editar | editar código-fonte]

  1. β positivo corresponde à convenção máxima e é comum no aprendizado de máquina, correspondendo à pontuação mais alta com maior probabilidade. O negativo corresponde à convenção mínima e é convencional em termodinâmica, correspondendo ao estado de energia mais baixo com a probabilidade mais alta; isso corresponde à convenção na distribuição de Gibbs, interpretando β como frieza.
  2. A notação β é para o beta termodinâmico, que é o inverso da temperatura: ,
  3. Para (frieza zero, temperatura infinita), , e isso se torna a função constante , correspondente à distribuição uniforme discreta.
  4. Na mecânica estatística, a fixação de β é interpretada como tendo frio e temperatura de 1.

Referências[editar | editar código-fonte]

  1. Goodfellow, Ian; Bengio, Yoshua; Courville, Aaron (2016). Deep Learning (em inglês). [S.l.]: MIT Press. pp. 180–184. ISBN 978-0-26203561-3 
  2. a b Bishop, Christopher M. (2006). Pattern Recognition and Machine Learning (em inglês). [S.l.]: Springer. ISBN 0-387-31073-8 
  3. a b Yusaku, Sako (2018). "Is the term "softmax" driving you nuts?". [S.l.: s.n.] 
  4. Goodfellow, Bengio & Courville 2016, pp. 183-184: O nome "softmax" pode ser um pouco confuso. A função está mais relacionada à função arg max do que à função máxima. O termo "soft" deriva do fato de que a função softmax é contínua e diferenciável. A função arg max, com seu resultado representado como um vetor de um único disparo, não é contínua nem diferenciável. Assim, a função softmax fornece uma versão "suavizada" da arg max. A versão suave correspondente da função máxima é . Talvez fosse melhor chamar a função softmax de "softargmax", mas o nome atual é uma convenção arraigada
  5. LeCun, Yann; Chopra, Sumit; Hadsell, Raia; Ranzato, Marc’Aurelio; Huang, Fu Jie (2006). «A Tutorial on Energy-Based Learning» (PDF). In: Gökhan Bakır; Thomas Hofmann; Bernhard Schölkopf; Alexander J. Smola; Ben Taskar; S.V.N Vishwanathan. Predicting Structured Data. Col: Neural Information Processing series (em inglês). [S.l.]: MIT Press. ISBN 978-0-26202617-8 
  6. «comp.ai.neural-nets FAQ, Part 2 of 7: LearningSection - What is a softmax activation function?». www.faqs.org (em inglês) 
  7. Sutton, R. S.; Barto, A. G. (1998). «2.3 Softmax Action Selection». incompleteideas.net (em inglês). Cambridge, MA: The MIT Press 
  8. a b c d e f {Onal, Kezban Dilek; Zhang, Ye; Altingovde, Ismail Sengor; Rahman, Md Mustafizur; Karagoz, Pinar; Braylan, Alex; Dang, Brandon; Chang, Heng- Lu; Kim, Henna; McNamara, Quinten; Angert, Aaron (1 de junho de 2018). «Recuperação de informações neurais: at the end of the early years». Information Retrieval Journal (em inglês). 21 (2): 111-182. ISSN 1573-7659. doi:10.1007/s10791-017-9321-y 
  9. a b c d e f Chen, Wenlin; Grangier, David; Auli, Michael (agosto de 2016). «Strategies for Training Large Vocabulary Neural Language Models». Berlin, Germany: Association for Computational Linguistics. Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (em inglês): 1975-1985. doi:10.18653/v1/P16-1186Acessível livremente 
  10. a b c Morin, Frederic; Bengio, Yoshua (6 de janeiro de 2005). «Hierarchical Probabilistic Neural Network Language Model» (PDF). PMLR. International Workshop on Artificial Intelligence and Statistics (em inglês): 246-252 
  11. Boltzmann, Ludwig (1868). «Studien über das Gleichgewicht der lebendigen Kraft zwischen bewegten materiellen Punkten» [Studies on the balance of living force between moving material points]. Wiener Berichte (em alemão). 58: 517–560 
  12. Gibbs, Josiah Willard (1902). Elementary Principles in Statistical Mechanics (em inglês). [S.l.: s.n.] 
  13. a b {Gao, Bolin; Pavel, Lacra (2017). «On the Properties of the Softmax Function with Application in Game Theory and Reinforcement Learning». arXiv:1704.00805Acessível livremente [OC math. OC] 
  14. Bridle, John S. (1990a). Soulié F.F.; Hérault J., eds. Probabilistic Interpretation of Feedforward Classification Network Outputs, with Relationships to Statistical Pattern Recognition. Neurocomputing: Algorithms, Architectures and Applications (1989). NATO ASI Series (Series F: Computer and Systems Sciences). 68. Berlin, Heidelberg: Springer. pp. 227–236. doi:10.1007/978-3-642-76153-9_28 
  15. Bridle, John S. (1990b). D. S. Touretzky, ed. Training Stochastic Model Recognition Algorithms as Networks can Lead to Maximum Mutual Information Estimation of Parameters. Advances in Neural Information Processing Systems 2 (1989). Morgan-Kaufmann 
  16. «Nx/Nx at main - elixir-nx/Nx». GitHub (em inglês)