Este artigo considera que você tem familiaridade com redes neurais artificiais. Caso esteja iniciando seus estudos, recomendo primeiro a leitura do excelente material em português no Deep Learning Book.
Entender como usar funções de ativação “não padrão” permite que você personalize um sistema de rede neural artificial. Uma rede neural modela vagamente sinapses e neurônios biológicos. Os classificadores da rede neural (NN – Neural Network) possuem duas funções de ativação. Uma função de ativação é usada ao calcular os valores dos nós no meio da rede, na(s) camada(s) oculta(s), e uma função é usada ao calcular o valor dos nós finais, na camada de saída.
A computação dos valores dos nós de saída de um classificador NN normalmente usa a função de ativação softmax porque a soma dos valores de saída é 1.0 e, portanto, os valores podem ser interpretados como probabilidades para cada classe. Por exemplo, se seu objetivo é prever a inclinação política (conservadora, moderada, liberal) de uma pessoa com base em características preditoras como idade, renda anual, estado de residência e assim por diante, o classificador NN terá três nós de saída. Um conjunto de valores de saída pode ser algo como (0,20, 0,70, 0,10), o que indicaria que a tendência política prevista é moderada, nesse exemplo..
Existem duas funções comuns de ativação usadas para os nós da camada oculta de uma NN, a função sigmoide logística (muitas vezes encurtada para log-sigmoide ou apenas sigmoide) e a função tangente hiperbólica (geralmente encurtada para tanh). Mas o uso de outras funções de ativação na camada oculta é possível.
Noções básicas sobre funções de ativação
A figura abaixo ilustra como funciona a ativação de um nó oculto de uma NN. O diagrama representa três nós de entrada e apenas um nó oculto para manter as ideias principais claras. Os três nós de entrada possuem valores 2.0, 3.0 e 4.0. Os três valores de peso de entrada associados são 0,05, 0,07 e 0,09. O nó oculto tem um valor de bias de 0,60. Muitas referências tratam um valor de bias como um peso adicional que tem um valor de entrada fictício de 1.
Para calcular o valor do nó oculto, primeiro calcula-se a soma das entradas vezes seus pesos, mais o valor de bias: (2,0) (0,05) + (3,0) (0,07) + (4,0) (0,09) + 0,60 = 1,27. O valor do nó oculto é determinado alimentando o valor da soma na função de ativação. No caso da função tanh, tanh (1,27) = 0,8538. Esse valor seria usado posteriormente ao calcular o valor dos nós de saída.
Como se constatou, a soma preliminar de pré-ativação (1,27 no exemplo) não é importante ao usar as funções de ativação log-sigmoid ou tanh comuns, mas a soma é necessária durante o treinamento ao usar uma função de ativação alternativa como arctan .
O gráfico da figura abaixo mostra as funções log-sigmoid, tanh e arctan. Todas as três funções têm uma forma S achatada. A função comum log-sigmoid aceita qualquer valor e retorna um resultado entre 0 e 1. A função tanh aceita qualquer valor e retorna um resultado entre -1 e +1. A função arctan aceita qualquer valor e retorna um resultado entre -Pi / 2 e + Pi / 2, ou aproximadamente entre -1,6 e +1,6. Em teoria, como a função arctan é ligeiramente mais plana que as funções log-sigmoid e tanh, o arctan pode ter uma capacidade ligeiramente melhor de discriminar entre valores de entrada similares.
O efeito da função de ativação no treinamento
Treinar uma NN é o processo de encontrar valores para os pesos e vieses (biases). Isso é feito examinando diferentes valores de pesos e de bias para encontrar os valores em que a diferença entre os valores de saída calculados (usando valores de entrada de dados de treinamento) e os valores de saída de destino conhecidos nos dados de treinamento, é minimizada.
Existem vários algoritmos diferentes de treinamento para NNs, mas de longe a técnica mais comum é chamada de propagação reversa ou retropropagação (backpropagation). A propagação reversa usa a derivada de cálculo da função de ativação da camada oculta. Suponha que uma função matemática seja y = 4x ^ 3 (onde o caractere ^ significa exponenciação). A derivada da função é y’ = 12x ^ 2. O ponto é que a derivada de uma função quase sempre depende de x, o valor de entrada.
A função log-sigmóide é y = 1 / (1 + e ^ -x) onde e é a constante matemática especial 2.71828. Então você esperaria que a derivada tivesse o termo x nele. No entanto, devido a algumas coincidências de álgebra, a derivada de log-sigmóide é (y) (1 – y). Em outras palavras, a derivada log-sigmóide pode ser expressa em termos do valor de saída y. E isso é muito conveniente na hora de codificar o algoritmo.
Da mesma forma, a função tanh é y = (e ^ x – e ^ -x) / (e ^ x + e ^ -x). Sua derivada é (1 – y) (1 + y). Novamente, por uma coincidência de álgebra, a derivada da função tanh pode ser expressa em termos do valor de saída y.
Todas as funções alternativas de ativação da NN possuem derivadas que contêm x. Por exemplo, a função arctan é y = 1/2 * log ((1 + x) / (1 – x)). Sua derivada é 1 / (1 + x ^ 2).
A chamada versão estocástica do algoritmo backpropagation, expressa em pseudocódigo de alto nível com alguns detalhes importantes omitidos, é:
loop até satisfeito
para cada item de treinamento
retire os valores de entrada de treinamento e os valores de saída de destino
calcular valores de saída da NN usando pesos atuais
derivada de computação da função de ativação da camada de saída
derivada de computação da função de ativação de camada oculta
usar derivadas para atualizar pesos e vieses
fim para
loop final
retornar o peso final e os valores de bias
Se você examinar o pseudo-código, verá que a derivada da função de ativação da camada oculta é necessária. Mas, pouco antes da derivação ser necessária, os valores de nós ocultos são calculados como parte do processo que calcula os valores dos nós de saída. Esses valores de nós ocultos são exatamente o que é necessário para calcular a derivada da função log-sigmoid ou a função tanh. Isso torna a codificação relativamente fácil.
Para funções de ativação alternativas, como arctan, você precisa salvar os valores de entrada. Mas se você usar a ativação log-sigmoid ou tanh padrão, precisará apenas do valor de saída (0,8538), que já está salvo como o valor do nó oculto. Se você estiver usando a função tanh comum, o termo derivado será (y) (1 – y) = (0.8538) (1 – 0.8538). Mas se você estiver usando a função arctan, o termo derivado é 1 / (1 + x ^ 2) = 1 / (1 – (1.27) ^ 2).
Para resumir, ao usar as funções log-sigmoid ou tanh comuns para ativação de nó oculto, se você usar o treinamento de propagação reversa, calcular a derivada da função de camada oculta será fácil, pois o valor necessário já foi calculado e salvo. Mas se você usar uma função de ativação alternativa, como arctan, deverá salvar a soma de pré-ativação ao calcular os valores do nó oculto.
Conclusão
O uso de funções de ativação alternativas foi estudado por pesquisadores na década de 1990. Embora não tenham sido feitos muitos estudos, a conclusão consensual foi que o uso de uma função de ativação alternativa às vezes melhorava a precisão do modelo NN e algumas vezes não. No final da década de 1990, o uso das funções log-sigmoid e tanh para ativação de nó oculto tornou-se a norma.
Então, a questão é, você deve usar uma função de ativação alternativa? Para o uso do dia-a-dia, a função tanh para ativação de nó oculto é boa. Mas isso não quer dizer de que tanh e log sigmoid são sempre as melhores escolhas. Para alguns problemas de classificação, uma função de ativação alternativa possa produzir um modelo NN significativamente melhor. Vai depender dos dados e do objetivo final do seu modelo.
David Matos
Referências:
Customize Neural Networks with Alternative Activation Functions
Matemática Para Machine Learning
Efficient activation functions for the back-propagation neural network
Achei muito bom o conteúdo do texto.