Ciência e Dados
Menu
  • Home
  • Sobre
  • Contato
Menu
Customizando Redes Neurais com Funcoes de Ativacao Alternativas

Customizando Redes Neurais com Funções de Ativação Alternativas

Posted on 9 de abril de 202212 de abril de 2022 by David Matos

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.

func

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.

arctan

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

Deep Learning Book

Efficient activation functions for the back-propagation neural network

Compartilhar

  • Clique para compartilhar no Twitter(abre em nova janela)
  • Clique para compartilhar no Facebook(abre em nova janela)
  • Clique para compartilhar no LinkedIn(abre em nova janela)
  • Clique para compartilhar no WhatsApp(abre em nova janela)
  • Clique para compartilhar no Telegram(abre em nova janela)
  • Clique para compartilhar no Tumblr(abre em nova janela)
  • Clique para compartilhar no Pinterest(abre em nova janela)

Relacionado

1 thought on “Customizando Redes Neurais com Funções de Ativação Alternativas”

  1. Walter Santa Cruz disse:
    18 de outubro de 2021 às 10:02 AM

    Achei muito bom o conteúdo do texto.

    Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Buscar

Twitter

Meus Tuítes

Tags Mais Comuns nos Posts

Anaconda Analytics Análise de Negócios Apache Spark AWS Big Data Blockchain Business Intelligence ChatGPT Chief Data Officer Cientista de Dados Cientistas de Dados Ciência de Dados Cloud Computing Data Lake Data Mesh Data Science Data Scientist Data Warehouse Deep Learning Deploy Descriptive Analytics Diagnostic Analytics Engenharia de Dados Engenheiro de Dados Estatística GPU Hadoop Inteligência Artificial Internet of Things Linguagem Python Linguagem R Machine Learning MapReduce Metadados NoSQL NVIDIA Open Data Oracle Predictive Analytics Prescriptive Analytics Probabilidade Python Salários Data Science Visualização

Histórico de Posts

  • março 2023 (3)
  • fevereiro 2023 (3)
  • janeiro 2023 (5)
  • dezembro 2022 (8)
  • novembro 2022 (7)
  • outubro 2022 (2)
  • setembro 2022 (3)
  • agosto 2022 (2)
  • julho 2022 (2)
  • junho 2022 (3)
  • maio 2022 (1)
  • abril 2022 (3)
  • março 2022 (1)
  • fevereiro 2022 (3)
  • janeiro 2022 (2)
  • dezembro 2021 (1)
  • novembro 2021 (5)
  • outubro 2021 (2)
  • setembro 2021 (3)
  • agosto 2021 (1)
  • junho 2021 (1)
  • fevereiro 2021 (2)
  • janeiro 2021 (1)
  • dezembro 2020 (1)
  • novembro 2020 (1)
  • outubro 2020 (2)
  • agosto 2020 (1)
  • abril 2020 (1)
  • março 2020 (1)
  • fevereiro 2020 (2)
  • agosto 2019 (1)
  • abril 2019 (1)
  • setembro 2018 (2)
  • julho 2018 (1)
  • junho 2018 (3)
  • abril 2018 (1)
  • março 2018 (1)
  • fevereiro 2018 (2)
  • janeiro 2018 (1)
  • dezembro 2017 (1)
  • novembro 2017 (1)
  • outubro 2017 (1)
  • setembro 2017 (1)
  • julho 2017 (1)
  • junho 2017 (1)
  • maio 2017 (2)
  • abril 2017 (1)
  • janeiro 2017 (1)
  • novembro 2016 (1)
  • outubro 2016 (1)
  • setembro 2016 (1)
  • julho 2016 (1)
  • junho 2016 (1)
  • maio 2016 (1)
  • abril 2016 (1)
  • fevereiro 2016 (1)
  • janeiro 2016 (3)
  • dezembro 2015 (4)
  • novembro 2015 (6)
  • outubro 2015 (9)
  • setembro 2015 (9)
  • agosto 2015 (9)
©2022 Ciência e Dados
 

Carregando comentários...