Estou treinando uma rede neural e a perda de treinamento diminui, mas a perda de validação não diminui ou diminui muito menos do que eu esperava, com base em referências ou experimentos com arquiteturas e dados muito semelhantes. Como posso consertar isso?
Quanto à pergunta
para a qual essa questão é inspirada, a questão é intencionalmente deixada geral, de modo que outras questões sobre como reduzir o erro de generalização de uma rede neural até um nível que tenha sido provado possível , possam ser encerradas como duplicatas desta.
Veja também thread dedicado no Meta:
neural-networks
deep-learning
DeltaIV
fonte
fonte
Respostas:
Antes de tudo, vamos mencionar o que "minha rede neural não generaliza bem" significa e qual é a diferença em dizer "minha rede neural não funciona bem" .
Ao treinar uma rede neural, você a avalia constantemente em um conjunto de dados rotulados chamado conjunto de treinamento . Se o seu modelo não está funcionando corretamente e não parece aprender com o conjunto de treinamento, você ainda não tem um problema de generalização; consulte esta postagem . No entanto, se o seu modelo é alcançar um desempenho satisfatório no conjunto de treinamento, mas não pode executar bem em dados previamente invisíveis (conjuntos por exemplo, validação / ensaio), então você faz tem um problema de generalização.
Por que seu modelo não está generalizando adequadamente?
A parte mais importante é entender por que sua rede não generaliza bem. Os modelos de aprendizado de máquina de alta capacidade têm a capacidade de memorizar o conjunto de treinamento, o que pode levar ao sobreajuste .
Sobreajuste é o estado em que um estimador começou a aprender o conjunto de treinamento tão bem que começou a modelar o ruído nas amostras de treinamento (além de todos os relacionamentos úteis).
Por exemplo, na imagem abaixo, podemos ver como a linha azul está claramente super ajustada.
Mas por que isso é ruim?
Ao tentar avaliar nosso modelo em dados novos e inéditos (ou seja, validação / conjunto de testes), o desempenho do modelo será muito pior do que o esperado.
Como evitar o excesso de ajuste?
No início do post, eu sugeri que a complexidade do seu modelo é o que realmente está causando o excesso de ajuste, pois permite que o modelo extraia relacionamentos desnecessários do conjunto de treinamento, que mapeia seu ruído inerente. A maneira mais fácil de reduzir o excesso de ajuste é essencialmente limitar a capacidade do seu modelo. Essas técnicas são chamadas de técnicas de regularização .
Penalidades de norma de parâmetro . Isso adiciona um termo extra à função de atualização de peso de cada modelo, que depende da norma dos parâmetros. O objetivo deste termo é combater a atualização real (ou seja, limitar quanto cada peso pode ser atualizado). Isso torna os modelos mais robustos a outliers e ruído. Exemplos dessas regularizações são as regularizações L1 e L2 , que podem ser encontradas nos regressores Lasso , Ridge e Elastic Net .
Como cada camada (totalmente conectada) em uma rede neural funciona como uma regressão linear simples, elas são usadas nas redes neurais. O uso mais comum é regularizar cada camada individualmente.
implementação de keras .
Parada antecipada . Essa técnica tenta interromper prematuramente a fase de treinamento de um estimador, no ponto em que ele aprendeu a extrair todos os relacionamentos significativos dos dados, antes de começar a modelar seu ruído. Isso é feito monitorando a perda de validação (ou uma métrica de validação de sua escolha) e encerrando a fase de treinamento quando essa métrica parar de melhorar . Dessa forma, damos ao estimador tempo suficiente para aprender as informações úteis, mas não o suficiente para aprender com o ruído.
implementação de keras .
implementação de keras
Outra maneira de impedir o ajuste excessivo, além de limitar a capacidade do modelo, é melhorar a qualidade dos seus dados. A escolha mais óbvia seria a remoção de outlier / ruído , no entanto, na prática, sua utilidade é limitada. Uma maneira mais comum (especialmente em tarefas relacionadas à imagem) é o aumento de dados . Aqui, tentamos transformar aleatoriamente os exemplos de treinamento para que, embora pareçam diferentes no modelo, eles transmitam a mesma informação semântica (por exemplo, lançando as imagens da esquerda para a direita).
Visão geral do aumento de dados
Sugestões práticas:
implementação de keras
Outro uso do conceito semelhante é o seguinte: se sua tarefa não tiver muitos dados, mas você puder encontrar outra tarefa semelhante, poderá usar o aprendizado de transferência para reduzir o excesso de ajustes. Primeiro treine sua rede para a tarefa que possui o conjunto de dados maior e, em seguida, tente ajustaro modelo para o que você queria inicialmente. O treinamento inicial, na maioria dos casos, tornará seu modelo mais robusto ao sobreajuste.
fonte
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:
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:
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.
fonte
Uma lista de técnicas de regularização comumente usadas que eu vi na literatura são:
fonte
Eu me sinto como o Djib2011, dou ótimos pontos sobre métodos automatizados, mas eles realmente não abordam a questão subjacente de como sabemos se o método empregado para reduzir o overfitting fez seu trabalho. Portanto, como uma nota de rodapé importante da resposta do DeltaIV, eu queria incluir isso com base em pesquisas recentes nos últimos 2 anos. A adaptação excessiva para redes neurais não se resume apenas à memorização excessiva do modelo, mas também à incapacidade do modelo de aprender coisas novas ou lidar com anomalias.
Detectando o excesso de ajuste no modelo de caixa preta: a interpretabilidade de um modelo está diretamente ligada à capacidade de generalização dos modelos. Portanto, muitas plotagens interpretáveis são métodos de detecção de sobreajuste e podem dizer como está funcionando algum dos métodos sugeridos acima. Os gráficos de interpretabilidade detectam-no diretamente, especialmente se você comparar os gráficos de validação e resultado do teste. Os capítulos 5 e 6 deste livro não publicado falam sobre os recentes avanços na detecção de sobreajuste no campo: Modelagem Interpretável
Com base neste livro, gostaria de mencionar três outros métodos para detectar e remover o excesso de ajuste, que podem ser óbvios para alguns, mas eu pessoalmente acho que as pessoas esquecem isso com muita frequência. Então, eu gostaria de enfatizá-los, se não se importa:
Detecção de seleção de recursos : quanto menor o número de parâmetros e menos recursos, melhor o seu modelo. Portanto, se você incluir apenas o mais importante dos 100 milhões (talvez tenha 75 milhões), terá um modelo generalizável melhor. O problema é que muitas redes neurais não são perfeitas na seleção de recursos, especialmente quando o número 2 está presente. O Bootstrap ou o Boosting fundamentalmente não podem corrigir os dois (somente uma versão chamada Wild Bootstrap pode). Em termos mais simples, se você fornecer dados indesejados da rede neural, eles serão descartados. (A normalização de L2 mencionada acima é muito boa para ajudar nisso)
Detecção e tratamento de anomalias: quanto menos "discrepantes", mais generalizável o modelo. Por "outliers", não queremos dizer apenas outliers nos dados. Os valores discrepantes nos dados (como o que você vê com um gráfico de caixa) são uma definição muito estreita para redes neurais. Você também deve considerar discrepâncias no erro em um modelo, chamado de influência, além de outras anomalias. Portanto, detectar anomalias antes de executar sua rede é importante. Uma rede neural pode ser robusta contra um tipo de anomalia, mas robusta não contra todos os outros tipos. Métodos de contra-exemplo, métodos de crítica e métodos de exemplo adversos e gráficos de influência são ótimos para ajudá-lo a descobrir discrepâncias e depois descobrir como fatorá-las.
Amostragem estratificada, sobreamostragem e subamostragem com base em considerações estatísticas ou éticas : Eu gostaria de ser um especialista em sub e superamostragem, mas não sou, mas sei sobre amostragem estratificada. Agrupar fatores importantes como (raça, sexo, gênero) e, em seguida, fazer amostragem estratificada pelo cluster é vital para não se ajustar demais quando se considera big data. Ao fazer a detecção de imagens, a amostragem estratificada em combinação com o agrupamento é legalmente exigida em alguns campos para evitar discriminação racial. O livro acima mencionado fala brevemente sobre métodos para fazer isso.
PS Devo incluir mais links?
fonte