Você viu no exercício anterior que adicionar apenas para a rede não foi suficiente para representar não linearidades. As operações lineares realizadas em operações lineares ainda são lineares.
Como configurar uma rede neural para aprender relações não lineares entre valores? Precisamos de alguma forma de inserir dados operações matemáticas em um modelo.
Se isso parece familiar, é porque aplicamos operações matemáticas não lineares para a saída de um modelo linear no início neste curso. Na regressão logística adaptamos um modelo de regressão linear para gerar um valor contínuo de 0 para 1 (que representa uma probabilidade) passando a saída do modelo através de uma função sigmoide.
Podemos aplicar o mesmo princípio à nossa rede neural. Vamos rever nosso modelo do Exercício 2 anterior, mas desta vez, antes para gerar o valor de cada nó, primeiro aplicaremos a função sigmoide:
Tente percorrer os cálculos de cada nó clicando no botão >|. (à direita do botão de reprodução). Revisar as operações matemáticas realizadas para calcular cada valor de nó no painel Cálculos abaixo do gráfico. Observe que a saída de cada nó agora é uma transformação sigmoide da dos nós da camada anterior, e os valores de saída são todos comprimidos entre 0 e 1.
Aqui, o sigmoide serve como função de ativação para a rede neural, uma transformação não linear do valor de saída de um neurônio antes de o valor ser passado como entrada para os cálculos da próxima camada da rede neural.
Agora que adicionamos uma função de ativação, a adição de camadas tem mais impacto. Empilhar não linearidades em não linearidades nos permite criar modelos muito complicados relações entre as entradas e as saídas previstas. Em resumo, cada camada é aprender uma função mais complexa e de alto nível com dados brutos de entrada. Se quiser entender melhor como isso funciona, consulte a excelente postagem do blog de Chris Olah.
Funções de ativação comuns
Três funções matemáticas que são comumente usadas como funções de ativação são sigmoide, tanh e ReLU.
A função sigmoide (discutida acima) executa a seguinte transformação na entrada $x$, produzindo um valor de saída entre 0 e 1:
\[F(x)=\frac{1} {1+e^{-x}}\]
Veja um gráfico dessa função:
![Figura 4. Representação da função sigmoide: uma curva em forma de s que
se aproxima assintoticamente do eixo x conforme x se aproxima do negativo
infinito e 1 à medida que x se aproxima do infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=0000&hl=pt-br)
A função tanh (abreviação de "tangente hiperbólica") transforma a entrada $x$ em produz um valor de saída entre –1 e 1:
\[F(x)=tanh(x)\]
Veja um gráfico dessa função:
![Figura 5. Gráfico da função tanh: um valor ligeiramente
curva em forma de S mais acentuada do que a função sigmoide, que, de modo assintomático,
se aproxima de -1 à medida que x se aproxima do infinito negativo e 1 à medida que x se aproxima do
infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=0000&hl=pt-br)
A função de ativação de unidade linear retificada (ou ReLU, para short) transforma a saída usando o seguinte algoritmo:
- Se o valor de entrada $x$ for menor que 0, retornará 0.
- Se o valor de entrada $x$ for maior ou igual a 0, retorna o valor de entrada.
A ReLU pode ser representada matematicamente usando a função max():
Veja um gráfico dessa função:
![Figura 6. Diagrama da função ReLU: uma linha horizontal
ao longo do eixo x do infinito negativo até 0, que se torna uma linha diagonal
subindo e para a direita com inclinação 1 (y=x) de 0 a infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=0000&hl=pt-br)
A ReLU geralmente funciona um pouco melhor como uma função de ativação do que uma função como sigmoide ou tanh, porque é menos suscetível ao problema de evasão do gradiente durante o treinamento de redes neurais. A ReLU também é muito mais fácil para computar do que essas funções.
Outras funções de ativação
Na prática, qualquer função matemática pode servir como uma função de ativação. Suponha que \(\sigma\) representa nossa função de ativação. O valor de um nó na rede é fornecido pelo seguinte fórmula:
O Keras fornece suporte pronto para uso em vários funções de ativação. Dito isso, ainda recomendamos começar com ReLU.
Resumo
O vídeo a seguir oferece um resumo de tudo o que você aprendeu até agora sobre como as redes neurais são construídas:
Agora, nosso modelo tem todos os componentes padrão do que as pessoas significam quando se referem a uma rede neural:
- Um conjunto de nós, análogos aos neurônios, organizados em camadas.
- Conjunto de pesos que representam as conexões entre cada rede neural camada e a camada abaixo dela. A camada abaixo pode ser outra camada de rede neural ou algum outro tipo de camada.
- Um conjunto de vieses, um para cada nó.
- Uma função de ativação que transforma a saída de cada nó em uma camada. Diferentes camadas podem ter diferentes funções de ativação.
Uma ressalva: as redes neurais nem sempre são melhores do que cruzamentos de atributos, mas as redes neurais oferecem uma alternativa flexível que funciona funciona bem em muitos casos.