Alguma diferença na regularização no MLP entre atualizações em lote e individuais?

9

Acabei de aprender sobre a regularização como uma abordagem para controlar o ajuste excessivo e gostaria de incorporar a ideia em uma implementação simples de retropropagação e perceptron de múltiplas camadas (MLP) que montei.

Atualmente, para evitar o ajuste excessivo, valido cruzadamente e mantenho a rede com a melhor pontuação até agora no conjunto de validação. Isso funciona bem, mas adicionar regularização me beneficiaria com a escolha correta do algoritmo e parâmetro de regularização, fazendo com que minha rede convergisse de forma mais sistemática para um modelo sem super-ajuste.

A fórmula que eu tenho para o termo de atualização (do curso Coursera ML) é declarada como uma atualização em lote, por exemplo, para cada peso, depois de somar todos os deltas aplicáveis ​​a todo o conjunto de treinamento a partir da propagação de erros, um ajuste lambda * current_weighté adicionado também antes da combinação delta é subtraído no final do lote, onde lambdaé o parâmetro de regularização.

Minha implementação de retropropagação usa atualizações de peso por item. Estou preocupado que não possa simplesmente copiar a abordagem em lote, embora pareça estar bem intuitivamente para mim. Um termo de regularização menor por item também funciona?

Por exemplo, lambda * current_weight / Nonde N é o tamanho do conjunto de treinamento - à primeira vista, isso parece razoável. Porém, não consegui encontrar nada sobre o assunto, e me pergunto se isso ocorre porque a regularização não funciona tão bem com uma atualização por item ou mesmo sob um nome diferente ou fórmula alterada.

Neil Slater
fonte

Respostas:

2

A regularização também é relevante no aprendizado por item. Sugiro começar com uma abordagem básica de validação para descobrir lambda, esteja você aprendendo por lote ou por item. Essa é a abordagem mais fácil e segura. Tente manualmente com vários valores diferentes. por exemplo, 0,001. 0,003, 0,01, 0,03, 0,1 etc. e veja como seu conjunto de validação se comporta. Posteriormente, você pode automatizar esse processo, introduzindo um método de pesquisa linear ou local.

Como uma observação lateral, acredito que o valor de lambda deve ser considerado em relação às atualizações do vetor de parâmetros, em vez do tamanho do conjunto de treinamento. Para o treinamento em lote, você tem uma atualização de parâmetro por aprovação do conjunto de dados , enquanto para a on-line uma atualização por amostra (independentemente do tamanho do conjunto de treinamento).

Recentemente, deparei-me com essa pergunta comvalorizada , que parece bastante semelhante à sua. Há um link para um artigo sobre um novo algoritmo SGD , com algum conteúdo relevante. Pode ser útil dar uma olhada (especialmente as páginas 1742-1743).

insys
fonte
Sim, ainda pretendo validar cruzadamente para verificar se há excesso de ajuste, minha pergunta é mais básica do que isso - não consigo encontrar nenhuma referência ao uso da regularização com um ajuste de peso por item no MLP, e estou preocupado com a possibilidade de haver uma boa razão para isso - por exemplo, não funciona nesse modo de aprendizado ou precisa de ajustes. A pergunta com validação cruzada é muito semelhante e me dá mais confiança, obrigado. A página do algoritmo SGD parece ter um método estocástico diferente para introduzir a regularização, que pode ser um pouco avançado para mim, mas é exatamente o que estou procurando.
Neil Slater
A regularização também é relevante no aprendizado por item. Eu ainda sugeriria começar com uma abordagem básica de validação para descobrir o lambda. Essa é a abordagem mais fácil e segura. Tente manualmente com vários valores diferentes. por exemplo, 0,001. 0,003, 0,01, 0,03, 0,1 etc. e veja como seu conjunto de validação se comporta. Posteriormente, você pode automatizar esse processo, introduzindo um método de pesquisa linear ou local.
INSYS
Se o seu comentário acima foi editado e substituiu a primeira frase / pergunta na sua resposta, acho que poderia aceitá-lo.
Neil Slater
Obrigado por apontar, eu concordo. Editado. Espero que seja mais claro.
INSYS
2

Para complementar o que insys disse:

A regularização é usada ao calcular a retropropagação para todos os pesos em seu MLP. Portanto, em vez de calcular o gradiente em relação a todas as entradas do conjunto de treinamento ( batch), você usa apenas alguns / um item (s) ( stochastic or semi-stochastic). Você acabará limitando o resultado da atualização em relação a um item em vez de tudo o que também está correto.

Além disso, se bem me lembro, Andrew NG usado L2-regularization. O /Nno lambda * current_weight / Nnão é obrigatória, ele apenas ajuda rescaling a entrada. No entanto, se você optar por não usá-lo, terá (na maioria dos casos) para selecionar outro valor para lambda.

Você também pode usar o algoritmo de pesquisa em grade para escolher o melhor valor lambda(o hiperparâmetro => aquele que você deve escolher).

Orelus
fonte