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 / N
onde 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.