Nos exercícios interativos abaixo, você explorará mais a fundo o funcionamento interno das redes neurais. Primeiro, você verá como as alterações de parâmetros e hiperparâmetros afetam as previsões da rede. Em seguida, você usará o que aprendeu para treinar uma rede neural para ajustar dados não lineares.
Exercício 1
O widget a seguir configura uma rede neural com a seguinte configuração:
- Camada de entrada com 3 neurônios contendo os valores
0.00 , 0.00 e 0.00 - Camada oculta com 4 neurônios
- Camada de saída com 1 neurônio
- A função de ativação ReLU foi aplicada a todos os nós da camada oculta e ao nó de saída.
Revise a configuração inicial da rede (nota: não clique nos botões ▶️ ou >| ainda) e, em seguida, conclua as tarefas abaixo do widget.
Tarefa 1
Os valores das três variáveis de entrada do modelo de rede neural são todos 0.00 . Clique em cada um dos nós da rede para ver todos os valores inicializados. Antes de clicar no botão Reproduzir ( ▶️ ), responda a esta pergunta:
Que tipo de valor de saída você acha que será produzido: positivo, negativo ou 0?
Valor de saída positivo
Você escolheu um valor de saída positivo . Siga as instruções abaixo para realizar a inferência nos dados de entrada e verificar se você está correto.
Valor de saída negativo
Você escolheu um valor de saída negativo . Siga as instruções abaixo para realizar a inferência nos dados de entrada e verificar se você está correto.
Valor de saída igual a 0
Você escolheu o valor de saída 0. Siga as instruções abaixo para realizar a inferência nos dados de entrada e verificar se você está correto.
Agora clique no botão Reproduzir (▶️) acima da rede e observe os valores de todos os nós da camada oculta e de saída serem preenchidos. Sua resposta acima estava correta?
Clique aqui para obter uma explicação.
O valor de saída exato que você obtém varia de acordo com a forma como os parâmetros de peso e viés são inicializados aleatoriamente. No entanto, como cada neurônio na camada de entrada tem o valor 0, os pesos usados para calcular os valores dos nós da camada oculta serão todos zerados. Por exemplo, o cálculo do primeiro nó da camada oculta será:
y = ReLU(w 11 * 0,00 + w 21 * 0,00 + w 31 * 0,00 + b)
y = ReLU(b)
Assim, o valor de cada nó da camada oculta será igual ao valor ReLU do viés (b), que será 0 se b for negativo e o próprio b se b for 0 ou positivo.
O valor do nó de saída será então calculado da seguinte forma:
y = ReLU(w 11 * x 11 + w 21 * x 21 + w 31 * x 31 + w 41 * x 41 + b)
Tarefa 2
Antes de modificar a rede neural, responda à seguinte pergunta:
Se você adicionar outra camada oculta à rede neural após a primeira camada oculta, e atribuir 3 nós a essa nova camada, mantendo todos os parâmetros de entrada e peso/viés iguais, quais cálculos dos outros nós serão afetados?
Todos os nós da rede, exceto os nós de entrada.
Você selecionou todos os nós da rede, exceto os nós de entrada . Siga as instruções abaixo para atualizar a rede neural e verificar se sua escolha está correta.
Apenas os nós na primeira camada oculta.
Você selecionou apenas os nós da primeira camada oculta . Siga as instruções abaixo para atualizar a rede neural e verificar se sua escolha está correta.
Apenas o nó de saída
Você selecionou apenas o nó de saída . Siga as instruções abaixo para atualizar a rede neural e verificar se sua escolha está correta.
Agora, modifique a rede neural para adicionar uma nova camada oculta com 3 nós, da seguinte forma:
- Clique no botão + à esquerda do texto "1 camada oculta" para adicionar uma nova camada oculta antes da camada de saída.
- Clique duas vezes no botão + acima da nova camada oculta para adicionar mais 2 nós à camada.
Sua resposta acima estava correta?
Clique aqui para obter uma explicação.
Apenas o nó de saída é alterado. Como a inferência para esta rede neural é "feed-forward" (os cálculos progridem do início ao fim), a adição de uma nova camada à rede afetará apenas os nós posteriores à nova camada, e não os anteriores.
Tarefa 3
Clique no segundo nó (de cima para baixo) na primeira camada oculta do gráfico de rede. Antes de fazer qualquer alteração na configuração da rede, responda à seguinte pergunta:
Se você alterar o valor do peso w 12 (exibido abaixo do primeiro nó de entrada, x 1 ), quais outros cálculos de nós poderão ser afetados para alguns valores de entrada?
Nenhum
Você não selecionou nenhuma opção . Siga as instruções abaixo para atualizar a rede neural e verificar se sua resposta está correta.
O segundo nó na primeira camada oculta, todos os nós na segunda camada oculta e o nó de saída.
Você escolheu o segundo nó na primeira camada oculta, todos os nós na segunda camada oculta e o nó de saída . Siga as instruções abaixo para atualizar a rede neural e verificar se sua escolha está correta.
Todos os nós na primeira camada oculta, na segunda camada oculta e na camada de saída.
Você selecionou todos os nós na primeira camada oculta, na segunda camada oculta e na camada de saída . Siga as instruções abaixo para atualizar a rede neural e verificar se sua escolha está correta.
Agora, clique no campo de texto do peso w 12 (exibido abaixo do primeiro nó de entrada, x 1 ), altere seu valor para 5.00 e pressione Enter. Observe as atualizações no gráfico.
Sua resposta estava correta? Tenha cuidado ao verificar sua resposta: se o valor de um nó não mudar, isso significa que o cálculo subjacente não mudou?
Clique aqui para obter uma explicação.
O único nó afetado na primeira camada oculta é o segundo nó (aquele em que você clicou). Os cálculos de valor para os outros nós na primeira camada oculta não contêm w 12 como parâmetro, portanto, não são afetados. Todos os nós na segunda camada oculta são afetados, pois seus cálculos dependem do valor do segundo nó na primeira camada oculta. Da mesma forma, o valor do nó de saída é afetado porque seus cálculos dependem dos valores dos nós na segunda camada oculta.
Você achou que a resposta era "nenhuma" porque nenhum dos valores dos nós na rede mudou quando você alterou o valor do peso? Observe que um cálculo subjacente para um nó pode mudar sem alterar o valor do nó (por exemplo, ReLU(0) e ReLU(-5) produzem uma saída de 0). Não faça suposições sobre como a rede foi afetada apenas observando os valores dos nós; certifique-se de revisar também os cálculos.
Exercício 2
Nos exercícios de cruzamento de características do módulo de dados categóricos , você construiu manualmente cruzamentos de características para ajustar dados não lineares. Agora, você verá se consegue construir uma rede neural que aprenda automaticamente a ajustar dados não lineares durante o treinamento.
Sua tarefa: configure uma rede neural que consiga separar os pontos laranja dos pontos azuis no diagrama abaixo, obtendo uma perda inferior a 0,2 tanto nos dados de treinamento quanto nos de teste.
Instruções:
No widget interativo abaixo:
- Modifique os hiperparâmetros da rede neural experimentando algumas das seguintes configurações:
- Adicione ou remova camadas ocultas clicando nos botões + e - à esquerda do cabeçalho CAMADAS OCULTAS no diagrama de rede.
- Adicione ou remova neurônios de uma camada oculta clicando nos botões + e - acima da coluna da camada oculta.
- Altere a taxa de aprendizagem selecionando um novo valor no menu suspenso "Taxa de aprendizagem" acima do diagrama.
- Altere a função de ativação selecionando um novo valor no menu suspenso "Ativação" acima do diagrama.
- Clique no botão Reproduzir (▶️) acima do diagrama para treinar o modelo de rede neural usando os parâmetros especificados.
- Observe a visualização do modelo ajustando-se aos dados à medida que o treinamento progride, bem como os valores de perda de teste e perda de treinamento na seção de saída .
- Se o modelo não atingir uma perda inferior a 0,2 nos dados de teste e treinamento, clique em "Redefinir" e repita os passos 1 a 3 com um conjunto diferente de configurações. Repita esse processo até obter os resultados desejados.
Clique aqui para ver nossa solução.
Conseguimos atingir taxas de perda abaixo de 0,2 tanto nos testes quanto nos treinamentos, graças a:
- Adicionando 1 camada oculta contendo 3 neurônios.
- Selecionando uma taxa de aprendizagem de 0,01.
- Escolhendo uma função de ativação ReLU.