Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Uma primeira rede neural
Neste exercício, vamos treinar nossa primeira rede neural.
As redes neurais vão nos permitir aprender modelos não lineares sem
usar cruzamentos de atributos explícitos.
Tarefa 1: o modelo fornecido combina nossos dois recursos de entrada em um
único neurônio. Esse modelo vai aprender alguma não linearidade? Execute-o para confirmar sua
chute.
Tarefa 2: tente aumentar o número de neurônios na camada escondida de
1 para 2 e também mude de uma ativação linear para uma ativação não linear, como ReLU. Você consegue criar um modelo para aprender não linearidades? Ele consegue modelar os dados de maneira eficaz?
Tarefa 3: tente aumentar o número de neurônios na camada oculta de
2 para 3, usando uma ativação não linear, como a ReLU. Ele pode modelar os dados de maneira eficaz? Como a qualidade dos modelos varia de uma execução para outra?
Tarefa 4: continue o experimento adicionando ou removendo camadas e neurônios ocultos por camada. Também é possível alterar as taxas de aprendizado, a regularização e outras configurações de aprendizado. Qual é o menor
número de neurônios e camadas que podem ser usados, resultando em uma perda de teste
de 0,177 ou menor?
O aumento do tamanho do modelo melhora a adequação ou a convergência?
Isso muda a frequência com que ele converge para um bom modelo? Por exemplo, teste a
seguinte arquitetura:
Primeira camada escondida com três neurônios.
Segunda camada escondida com três neurônios.
Terceira camada escondida com dois neurônios.
As respostas aparecem logo abaixo do exercício.
Clique no ícone de adição para ver uma resposta à Tarefa 1.
A ativação é definida como Linear. Portanto, esse modelo não pode aprender
nenhuma não linearidade. A perda é muito alta, e dizemos que o modelo subajusta os dados.
Clique no ícone de adição para ver uma resposta à Tarefa 2.
A função de ativação não linear pode aprender modelos não lineares. No entanto,
uma única camada escondida com dois neurônios não pode refletir todas as não linearidades desse
conjunto de dados e terá alta perda, mesmo sem ruído, porque ainda
subestima os dados. Esses exercícios não são determinísticos, então algumas execuções
não aprendem um modelo eficaz, enquanto outras fazem um bom trabalho.
O melhor modelo pode não ter o formato que você espera.
Clique no ícone de adição para ver uma resposta à Tarefa 3.
A natureza não determinística do Playground se destaca neste exercício. Uma
única camada escondida com três neurônios é suficiente para modelar o conjunto de dados (ruído
ausente), mas nem todas as execuções convergirão para um bom modelo.
Três neurônios são suficientes porque a função XOR pode ser expressa como uma combinação de três meios de superfície (ativação ReLU). Isso pode ser visto nas imagens de neurônios, que mostram a saída de neurônios individuais. Em um bom modelo
com três neurônios e ativação de ReLU, haverá uma imagem com uma linha quase
vertical, detectando X1 sendo positivo (ou negativo, o sinal pode
ser trocado), uma imagem com uma linha quase horizontal, detectando o sinal de
X2 e uma imagem com uma linha diagonal, detectando a
interação.
No entanto, nem todas as execuções convergirão para um bom modelo. Algumas execuções não funcionam melhor que um modelo com dois neurônios, e é possível ver neurônios duplicados nesses casos.
Clique no ícone de adição para ver uma resposta à Tarefa 4.
Os dados podem ser modelados por uma única camada escondida com três neurônios, mas não há redundância. Portanto, em muitas execuções, ela perde um neurônio e não aprende um bom modelo. Uma única camada com mais de três neurônios tem mais redundância e, portanto, tem mais chances de convergir para um bom modelo.
Como vimos, uma única camada escondida com apenas dois neurônios não pode modelar bem os dados. Se você testar, verá que todos os itens na camada de saída
só podem ser formas compostas das linhas desses dois nós. Nesse caso, uma
rede mais profunda pode modelar melhor o conjunto de dados do que a primeira camada escondida:
neurônios individuais na segunda camada podem modelar formas mais complexas, como o
quadrante superior direito, combinando neurônios na primeira camada. Mesmo que adicionar essa segunda camada escondida ainda possa modelar o conjunto de dados melhor do que a primeira camada escondida, pode fazer mais sentido adicionar mais nós à primeira camada para permitir que mais linhas façam parte do kit de onde a segunda camada cria formas.
No entanto, um modelo com um neurônio na primeira camada escondida não consegue aprender um bom
modelo, independentemente da profundidade. Isso ocorre porque o resultado da primeira
camada varia apenas ao longo de uma dimensão (geralmente uma linha diagonal), que não é
suficiente para modelar bem esse conjunto de dados. As camadas posteriores não podem compensar isso, não importa a complexidade, as informações nos dados de entrada foram irrecuperáveis
perdidas.
E se, em vez de tentar ter uma rede pequena, tivéssemos muitas camadas com
muitos neurônios, para um problema simples como esse? Como vimos, a primeira
camada terá a capacidade de experimentar muitas inclinações de linha diferentes. E a segunda
camada terá a capacidade de os acumular em muitas formas diferentes,
com muitas formas passando pelas camadas subsequentes.
Ao permitir que o modelo considere muitas formas diferentes por vários
neurônios ocultos diferentes, você criou espaço suficiente para que o modelo comece
a overfitting facilmente no ruído do conjunto de treinamento, permitindo que essas
formas complexas correspondam aos fragmentos dos dados de treinamento em vez da
verdade generalizada. Nesse exemplo, os modelos maiores podem ter limites
complexos para corresponder aos pontos de dados precisos. Em casos extremos, um modelo grande
pode aprender uma ilha em torno de um ponto de ruído individual, o que é chamado de
memorização dos dados. Ao permitir que o modelo seja muito maior, você
vai perceber que, na verdade, ele tem um desempenho pior do que o modelo mais simples com
apenas neurônios suficientes para resolver o problema.
Inicialização da rede neural
Esse exercício usa os dados XOR novamente, mas analisa a capacidade de repetição
do treinamento de redes neurais e a importância da inicialização.
Tarefa 1:execute o modelo da mesma maneira quatro ou cinco vezes. Antes de cada teste,
clique no botão Redefinir a rede para uma nova inicialização aleatória.
O botão Redefinir a rede é a seta de redefinição circular à esquerda do botão "Reproduzir". Execute cada teste por pelo menos 500 passos
para garantir a convergência. Em que formato cada saída de modelo converge?
O que isso diz sobre o papel da inicialização em otimização não convexa?
Tarefa 2: inclua uma camada e alguns nós extras para tornar o modelo um pouco mais complexo. Repita os testes da Tarefa 1. Isso
adiciona alguma estabilidade aos resultados?
As respostas aparecem logo abaixo do exercício.
Clique no ícone de adição para ver uma resposta à Tarefa 1.
O modelo aprendido tinha formas diferentes em cada execução. A perda
de teste conversível variou quase duas vezes, da menor para a maior.
Clique no ícone de adição para ver uma resposta à Tarefa 2.
A adição da camada e de nós extras produziu resultados mais reproduzíveis.
Em cada execução, o modelo resultante parecia ser exatamente o mesmo. Além disso,
a perda de teste convergente mostrou menos variação entre as execuções.
Espiral da rede neural
Este conjunto de dados é uma espiral com ruído. Obviamente, um modelo linear falhará aqui, mas até mesmo os cruzamentos de atributos definidos manualmente podem ser difíceis de construir.
Tarefa 1:treinar o melhor modelo que puder, usando apenas X1 e
X2. Você pode adicionar ou remover camadas e neurônios, mudar
configurações de aprendizado, como taxa de aprendizado, taxa de regularização e
tamanho do lote. Qual é a melhor perda de teste que você pode ter? Sua superfície de saída do modelo é suave?
Tarefa 2: mesmo com redes neurais, é necessário algum tipo de engenharia de atributos para alcançar a melhor performance. Adicione outros recursos do produto ou outras transformações, como sin(X1) e sin(X2). Você consegue um modelo
melhor? A superfície de saída do modelo é mais suave?
As respostas aparecem logo abaixo do exercício.
Clique no ícone de adição para ver as possíveis respostas.
O vídeo a seguir mostra como escolher hiperparâmetros no Playground
para treinar um modelo com os dados em espiral que minimizam a perda de teste.