Função softmax
Predefinição:Barra de aprendizagem de máquina
A função softmax, também conhecida como softargmax[1]Predefinição:Rp ou função exponencial normalizada,[2]Predefinição:Rp converte um vetor de Predefinição:Mvar números reais em uma distribuição de probabilidade de Predefinição:Mvar resultados possíveis. É uma generalização da função logística para várias dimensões e é usada na Predefinição:Ill. A função softmax é frequentemente usada como a última Predefinição:Ill 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 Predefinição:Ill.
Definição
A função softmax recebe como entrada um vetor Predefinição:Mvar de Predefinição:Mvar números reais e o normaliza em uma distribuição de probabilidade que consiste em Predefinição:Mvar 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 Predefinição:Mvar, uma Predefinição:Ill diferente Predefinição:Math pode ser usada. Se Predefinição:Math, componentes de entrada menores resultarão em probabilidades de saída maiores, e a diminuição do valor de Predefinição:Mvar criará distribuições de probabilidade mais concentradas em torno das posições dos menores valores de entrada.
Por outro lado, como acima, se Predefinição:Math componentes de entrada maiores resultarão em probabilidades de saída maiores, e o aumento do valor de Predefinição:Mvar criará distribuições de probabilidade mais concentradas em torno das posições dos maiores valores de entrada. Escrever ou Predefinição:Efn (para Predefinição:Mvar real)Predefinição:Efn produz as expressões:Predefinição:EfnEm alguns campos, a base é fixa, correspondendo a uma escala fixa,Predefinição:Efn, enquanto em outros o parâmetro Predefinição:Mvar é variado.
Interpretações
Arg max suave
O nome "softmax" é enganoso. A função não é um Predefinição:Ill (ou seja, uma aproximação suave da função máxima), mas uma aproximação suave da função Predefinição:Ill: 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 Predefinição:Ill, 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]Predefinição:Sfn 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 Predefinição:Math onde Predefinição:Mvar é 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 Predefinição:Mvar 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 Predefinição:Ill) - 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 Predefinição:Tmath, 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 Predefinição:Math} como Predefinição:Tmath, 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 Predefinição:Ill no conjunto não-singular.
Por outro lado, como Predefinição:Tmath, 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 Predefinição:Ill, o softmax é uma Predefinição:Ill ou "quantização" de arg max e arg min, correspondendo ao uso do Predefinição:Ill em vez do Predefinição:Ill (respectivamente Predefinição:Ill), 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 Predefinição:Mvar fixo, se uma entrada Predefinição:Tmath 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 Predefinição:Tmath, 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
Na teoria da probabilidade, a saída da função softargmax pode ser usada para representar uma Predefinição:Ill, ou seja, uma distribuição de probabilidade sobre Predefinição:Mvar diferentes resultados possíveis.
Mecânica estatística
Na mecânica estatística, a função softargmax é conhecida como distribuição de Boltzmann (ou distribuição de Gibbs):[4]Predefinição:Rp 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 Predefinição:Mvar; e o fator Predefinição:Mvar é chamado de frieza (ou beta termodinâmico, ou temperatura inversa).
Aplicações
A função softmax é usada em vários métodos de Predefinição:Ill, como a Predefinição:Ill (também conhecida como regressão softmax)[2]Predefinição:Rp [1] Predefinição:Ill multiclasse, classificador Naive Bayes e redes neurais artificiais.[5] Especificamente, na regressão logística multinomial e na análise discriminante linear, a entrada para a função é o resultado de Predefinição:Mvar funções lineares distintas, e a probabilidade prevista para a Predefinição:Mvar-ésima classe, dado um vetor de amostra Predefinição:Math e um vetor de ponderação Predefinição:Math é:
Isso pode ser visto como a composição de funções lineares Predefinição:Mvar 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 Predefinição:Mvar.
Redes neurais
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
No segmento de Predefinição:Ill, uma função softmax pode ser usada para converter valores em probabilidades de ação. A função comumente usada é:[6]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
Em aplicações de redes neurais, o número Predefinição:Mvar 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.[7]
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.[7][8] Além disso, o método de Predefinição:Ill 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.[7][8]
As abordagens que reorganizam a camada de softmax para um cálculo mais eficiente incluem o softmax hierárquico e o softmax diferenciado.[7] 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.[8][9] 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.[8] Idealmente, quando a árvore estiver equilibrada, isso reduziria a complexidade computacional de para .[9] Na prática, os resultados dependem da escolha de uma boa estratégia para agrupar os resultados em classes.[8][9] Uma árvore de Huffman foi usada para isso nos modelos Predefinição:Ill 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.[7] 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).[7][8]
Propriedades matemáticas
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 Predefinição:Math. 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 Predefinição:Ill, um Predefinição:Ill:
em que a função LogSumExp é definida como .
Histórico
A função softmax foi usada na mecânica estatística como a distribuição de Boltzmann no artigo fundamental Predefinição:Harvtxt,[10]formalizada e popularizada no influente livro-texto Predefinição:Harvtxt.[11]
O uso da softmax na teoria da decisão é creditado a Predefinição:Harvtxt,[12]Predefinição:Rp que usou o axioma da Predefinição:Ill na teoria da escolha racional para deduzir a softmax no Predefinição:Ill 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, Predefinição:Harvtxt:[12]Predefinição:Rp e Predefinição:Harvtxt:[3] Predefinição:QuotePredefinição:Quote
Exemplo
Se pegarmos uma entrada de Predefinição:Math, a softmax disso é Predefinição:Math. 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 Predefinição:Math (que soma 1,6), a softmax seria Predefinição:Math. 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 Predefinição:Math). 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
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 Predefinição:Ill:
> 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
- Distribuição de Dirichlet - uma maneira alternativa de amostrar distribuições categóricas
- Função de partição
Notas
Referências
- ↑ Predefinição:Cite book
- ↑ 2,0 2,1 Predefinição:Cite book
- ↑ 3,0 3,1 Predefinição:Cite book
- ↑ Predefinição:Cite book
- ↑ Predefinição:Citar web
- ↑ Predefinição:Citar web
- ↑ 7,0 7,1 7,2 7,3 7,4 7,5 {Predefinição:Cite journal
- ↑ 8,0 8,1 8,2 8,3 8,4 8,5 Predefinição:Cite journal
- ↑ 9,0 9,1 9,2 Predefinição:Cite journal
- ↑ Predefinição:Cite journal
- ↑ Predefinição:Cite book
- ↑ 12,0 12,1 {Predefinição:Cite arXiv
- ↑ Predefinição:Cite web