Eu vi vários erros de teste / treinamento caindo repentinamente em certas épocas algumas vezes durante o treinamento da rede neural, e me pergunto o que causa esses saltos de desempenho:
Essa imagem foi tirada do Kaiming He Github, mas gráficos semelhantes aparecem em muitos artigos.
conv-neural-network
libphy
fonte
fonte
Respostas:
Eles mudaram a taxa de aprendizado. Observe que a queda ocorre exatamente em 30 e 60 épocas, obviamente definida manualmente por alguém.
fonte
Pense no "cenário de otimização". Por exemplo, se você tivesse uma rede com apenas dois pesos, poderia plotar todas as combinações desses dois pesos em uma superfície, em que a altura em cada ponto represente a quantidade de erro que sua função de custo retornará se você o usar (x, y ) coordene como seus dois pesos. Você está tentando passar para o ponto mais baixo nesta superfície para obter o nível mais baixo de erro.
O problema às vezes é que a superfície pode ficar bem louca, especialmente em redes com milhões de parâmetros em vez de apenas dois. Você pode ficar preso em pontos de sela onde o progresso é mais lento e, de repente, é atirado de volta para uma colina descendente.
Aqui está uma animação para ajudar a visualizar isso. Como você pode ver, os algoritmos mais básicos de descida com gradiente ficam presos nessas posições muito mais facilmente.
Pode haver outras causas para isso também, mas essa é a que você mais ouve. Pode ser possível que uma rede possa ter várias unidades recebendo ativações saturadas (ou, no caso de relu, uma unidade que está sendo ativada apenas por um número muito pequeno de entradas de treinamento), e quando uma unidade sai da saturação, desencadeia uma reação em cadeia que tira o resto da saturação e os pesos repentinamente aumentam o fluxo do gradiente? Eu não olhei para nada assim, mas eu estaria interessado se alguém tiver outros motivos para adicionar.
fonte