O que devo fazer quando minha rede neural não se generaliza bem?

37

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

O que devo fazer quando minha rede neural não aprende?

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:

Existe uma pergunta genérica para a qual podemos redirecionar perguntas do tipo "por que minha rede neural não generaliza bem?"

DeltaIV
fonte
4
Se você planeja postar sua própria resposta abrangente, pode ser uma boa ideia postar o Q e o A simultaneamente (a interface do usuário permite isso). Caso contrário, você estará incentivando outras pessoas a escrever respostas e poderemos acabar com várias respostas que se duplicam parcialmente ... De qualquer forma, aguardamos ansiosamente sua resposta.
Ameba diz Reinstate Monica
@amoeba ah, eu não sabia disso: a interface do usuário abre um pop-up quando tento responder à pergunta, então pensei que as perguntas e respostas não pudessem ser postadas juntas .... Bem, se alguém escrever uma melhor / mais resposta completa do que o que eu ia escrever, evitarei adicionar uma duplicata.
DeltaIV

Respostas:

37

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 .

  • Regularizações específicas de redes neurais . Alguns exemplos são:
    • Abandono . O abandono é uma técnica interessante que funciona surpreendentemente bem. A desistência é aplicada entre duas camadas sucessivas em uma rede. A cada iteração, uma porcentagem especificada das conexões (selecionadas aleatoriamente), conectando as duas camadas, são eliminadas . Isso faz com que a camada subsequente conte com todas as suas conexões com a camada anterior.
      implementação de keras
    • Transferir aprendizado . Isso é especialmente usado no Deep Learning. Isso é feito inicializando os pesos da sua rede para os de outra rede com a mesma arquitetura pré-treinada em um grande conjunto de dados genérico.
    • Outras coisas que podem limitar o sobreajuste nas redes neurais profundas são: Normalização de lotes , que pode atuar como um regulador e, em alguns casos (por exemplo, módulos de criação), funciona bem como abandono; lotes de tamanho relativamente pequeno no SGD, o que também pode impedir o ajuste excessivo; adicionando pequeno ruído aleatório a pesos em camadas ocultas.

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:

  • De longe, a técnica de regularização mais eficaz é o abandono , o que significa que deve ser a primeira a ser usada. No entanto, você não precisa (e provavelmente não deveria) colocar o abandono em qualquer lugar! As camadas mais propensas a sobreajuste são as camadas Fully Connected (FC), porque elas contêm mais parâmetros. O dropout deve ser aplicado a essas camadas (impactando suas conexões com a próxima camada).
  • A normalização de lotes , além de ter um efeito de regularização, ajuda seu modelo de várias outras maneiras (por exemplo, acelera a convergência, permite o uso de taxas de aprendizado mais altas). Também deve ser usado em camadas FC.
  • Como mencionado anteriormente, também pode ser benéfico interromper seu modelo mais cedo na fase de treinamento do que o planejado. O problema da parada antecipada é que não há garantia de que, a qualquer momento, o modelo não comece a melhorar novamente. Uma abordagem mais prática do que a parada precoce é armazenar os pesos do modelo que atingem o melhor desempenho no conjunto de validação. Seja cauteloso, no entanto, pois essa não é uma estimativa imparcial do desempenho do seu modelo (apenas melhor que o conjunto de treinamento). Você também pode exagerar no conjunto de validação. Mais sobre isso mais tarde.
    implementação de keras
  • Em algumas aplicações (por exemplo, tarefas relacionadas à imagem), é altamente recomendável seguir uma arquitetura já estabelecida (por exemplo, VGG, ResNet, Inception), para a qual você pode encontrar pesos do ImageNet. A natureza genérica desse conjunto de dados permite que os recursos sejam, por sua vez, genéricos o suficiente para serem usados ​​em qualquer tarefa relacionada à imagem. Além de ser robusto à super adaptação, isso reduzirá bastante o tempo de treinamento.
    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.
  • Aumento de dados . Embora sempre ajude a ter um conjunto de dados maior, as técnicas de aumento de dados têm suas deficiências. Mais especificamente, você deve ter cuidado para não aumentar muito fortemente , pois isso pode arruinar o conteúdo semântico dos dados. Por exemplo, no aumento da imagem, se você traduzir / mudar / dimensionar ou ajustar a nitidez / contraste da imagem, perderá muitas das informações que ela contém. Além disso, esquemas de aumento precisam ser implementados para cada tarefa de maneira ad-hoc (por exemplo, no reconhecimento de dígitos manuscritos, os dígitos geralmente estão alinhados e não devem ser girados demais; também não devem ser invertidos em nenhuma direção, pois não são simétricas horizontal / verticalmente. O mesmo vale para imagens médicas).
    0 0
Djib2011
fonte
9

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.

DeltaIV
fonte
5

Uma lista de técnicas de regularização comumente usadas que eu vi na literatura são:

  1. Usando a normalização em lote, que é um regularizador surpreendentemente eficaz a ponto de eu raramente ver mais a desistência usada, porque simplesmente não é necessária.
  2. Uma pequena quantidade de redução de peso.
  3. Algumas técnicas de regularização mais recentes incluem Shake-shake ("Shake-Shake regularization" de Xavier Gastaldi) e Cutout ("Melhoria da regularização de redes neurais convolucionais com recorte" de Terrance DeVries e Graham W. Taylor). Em particular, a facilidade com que o Cutout pode ser implementado o torna muito atraente. Acredito que eles funcionam melhor do que a evasão - mas não tenho certeza.
  4. Se possível, prefira arquiteturas totalmente convolucionais a arquiteturas com camadas totalmente conectadas. Compare o VGG-16, que possui 100 milhões de parâmetros em uma única camada totalmente conectada, ao Resnet-152, que possui 10 vezes o número de camadas e ainda menos parâmetros.
  5. Prefira o SGD a outros otimizadores, como Rmsprop e Adam. Foi demonstrado que generaliza melhor. ("Melhorando o desempenho da generalização mudando de Adam para SGD" por Nitish Shirish Keskar e Richard Socher)
shimao
fonte
0

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:

  1. 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)

  2. 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.

  3. 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?

mlane
fonte