Há muitas evidências empíricas de que redes neurais profundas o suficiente podem memorizar rótulos aleatórios em grandes conjuntos de dados (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Compreender o aprendizado profundo requer repensar a generalização"). Assim, em princípio, ao obter um NN grande o suficiente, sempre podemos reduzir o erro de treinamento a valores extremamente pequenos, limitados na prática pela precisão numérica, independentemente da importância da tarefa.
As coisas são bem diferentes para o erro de generalização . Não podemos ter certeza de que, para cada problema de aprendizagem, exista um modelo de NN aprendível que possa produzir um erro de generalização tão baixo quanto desejado. Por esse motivo, o primeiro passo é
1. Defina suas expectativas corretamente
Encontre uma referência respeitável que informe que existe uma arquitetura que pode atingir o erro de generalização que você está procurando, no seu conjunto de dados ou no mais semelhante para o qual você pode encontrar referências. Por exemplo, olhe aqui
Quais são as atuais redes neurais convolucionais de ponta?
encontrar o desempenho atual (no momento das respostas) SOTA (State Of The Art) para CNNs em várias tarefas. É uma boa idéia tentar reproduzir esses resultados nesses conjuntos de dados de referência, antes de treinar em seu próprio conjunto de dados, como um teste para verificar se toda a sua infraestrutura está instalada corretamente.
2. Verifique se o seu procedimento de treinamento é perfeito
Todas as verificações descritas nas respostas à pergunta
O que devo fazer quando minha rede neural não aprende?
para garantir que seu procedimento de treinamento esteja correto, é um pré-requisito para reduzir com êxito o erro de generalização (se o seu NN não estiver aprendendo, ele não poderá aprender a generalizar). Essas verificações incluem, entre outras coisas:
- testes de unidade
- verificações do conjunto de dados (observe algumas amostras aleatórias de entrada / etiqueta para o conjunto de treinamento e o conjunto de testes e verifique se os rótulos estão corretos; verifique a largura e o tamanho das imagens de entrada; embaralhe as amostras no conjunto de treinamento / teste e veja se isso afeta resultados; etc.)
- testes de randomização
- padronize suas versões de pré-processamento e pacote
- manter um diário de experiências numéricas
3. Tente obter superconvergência
“Superconvergência: treinamento muito rápido de redes neurais usando grandes taxas de aprendizado” de Leslie N. Smith e Nicholay Topin mostra que, em alguns casos, a combinação de grandes taxas de aprendizado com o método da taxa de aprendizado cíclico de Leslie N. Smith atua como regularizador , acelerando a convergência em uma ordem de magnitude e reduzindo a necessidade de uma ampla regularização. Portanto, é uma boa coisa para tentar antes
4. Configurando sua regularização para o MAXXX
A regularização geralmente aumenta o tempo de treinamento (ruim), aumenta o erro de treinamento e reduz o erro de generalização (bom), mas muita regularização pode realmente aumentar os dois erros (underfitting). Por esse motivo, e devido ao aumento do tempo de treinamento, geralmente é melhor introduzir as várias técnicas de regularização uma de cada vez, após você consegue super-ajustar o conjunto de treinamento. Observe que a regularização por si só não implica necessariamente que seu erro de generalização será menor: o modelo deve ter uma capacidade suficientemente grande para obter boas propriedades de generalização. Isso geralmente significa que você precisa de uma rede suficientemente profunda para poder ver os benefícios da regularização.
Os métodos de regularização mais antigos são provavelmente a parada precoce e a queda de peso. Alguns dos outros:
- m = 16
- use SGD em vez de otimizadores adaptativos: isso já foi coberto pelo @shimao, portanto, eu apenas o menciono por uma questão de integridade
- use dropout: se você usar LSTMs, use dropout padrão apenas para unidades de entrada e saída de uma camada LSTM. Para as unidades recorrentes (os portões), use desistências recorrentes, como mostrado pela primeira vez por Yarin Gal em seu Ph.D. tese . No entanto, se você usar CNNs, o abandono será usado com menos frequência agora. Em vez disso, você tende a…
- ... usar a normalização de lotes: as arquiteturas mais recentes da CNN evitam o abandono em favor da normalização de lotes. Isso pode ser apenas uma moda passageira ou pode ser devido ao fato de que aparentemente a normalização do abandono e do lote não funciona bem juntas (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Entendendo a desarmonia entre abandono e normalização do lote por variação) Shift ). Como a norma de lote é mais eficaz do que a desistência quando você tem grandes conjuntos de dados, isso pode ser um motivo pelo qual a desistência caiu em desuso para as arquiteturas CNN. Se você usar a normalização em lote, verifique se a distribuição de pesos e vieses para cada camada parece aproximadamente normal normal. Para RNNs, a implementação da norma do lote é complicada: normalização do peso (Tim Salimans, Diederik P. Kingma, Normalização do peso de : uma simples reparameterização para acelerar o treinamento de redes neurais profundas ) é uma alternativa viável.
- use aumento de dados: ele também tem um efeito de regularização.
5. Pesquisa de hiperparâmetro / arquitetura
Se nada mais ajudar, você terá que testar várias configurações de hiperparâmetros diferentes (a otimização bayesiana pode ajudar aqui) ou várias mudanças arquiteturais diferentes (por exemplo, talvez na sua arquitetura GAN e no conjunto de dados em que você está trabalhando, a norma de lote só funciona no gerador, mas quando adicionado ao discriminador também torna as coisas piores). Certifique-se de acompanhar os resultados dessas experiências longas e chatas em um livro de registro bem ordenado.
PS para um GAN, não faz muito sentido falar sobre um erro de generalização: o exemplo acima foi feito apenas como uma indicação de que ainda há muita alquimia no Deep Learning, e coisas que você esperaria que funcionassem bem, às vezes não ou vice-versa, algo que funcionou bem muitas vezes, repentinamente exige de você um novo conjunto de dados.