As redes neurais geralmente demoram um pouco para "entrar" durante o treinamento?

10

Estou tentando treinar uma rede neural profunda para classificação, usando propagação de volta. Especificamente, estou usando uma rede neural convolucional para classificação de imagens, usando a biblioteca Tensor Flow. Durante o treinamento, estou passando por um comportamento estranho e estou me perguntando se isso é típico ou se posso estar fazendo algo errado.

Portanto, minha rede neural convolucional possui 8 camadas (5 convolucionais e 3 totalmente conectadas). Todos os pesos e preconceitos são inicializados em pequenos números aleatórios. Em seguida, defino um tamanho da etapa e prossigo com o treinamento com minilotes, usando o Adam Optimizer da Tensor Flow.

O comportamento estranho do qual estou falando é que, nos 10 primeiros ciclos através dos meus dados de treinamento, a perda de treinamento, em geral, não diminui. Os pesos estão sendo atualizados, mas a perda de treinamento permanece aproximadamente no mesmo valor, às vezes subindo e às vezes diminuindo entre mini-lotes. Fica assim por um tempo, e eu sempre tenho a impressão de que a perda nunca vai diminuir.

De repente, a perda de treinamento diminui drasticamente. Por exemplo, em cerca de 10 ciclos através dos dados de treinamento, a precisão do treinamento varia de 20% a 80%. A partir daí, tudo acaba convergindo muito bem. O mesmo acontece sempre que executo o pipeline de treinamento do zero e abaixo está um gráfico que ilustra um exemplo de execução.

insira a descrição da imagem aqui

Então, o que eu quero saber é se esse é um comportamento normal com o treinamento de redes neurais profundas, pelo qual leva um tempo para "entrar em ação". Ou é provável que algo que eu esteja fazendo errado esteja causando esse atraso?

Muito obrigado!

Karnivaurus
fonte
Acho que estou um pouco atrasado para a festa. Mas talvez eu ainda possa adicionar algum valor à conversa. Então ... para mim, parece uma função de ativação sigmóide. Como a derivada do sigmóide é pequena para valores muito pequenos ou muito grandes, o treinamento pode ser lento para "neurônios saturados". Infelizmente, não sei exatamente como é a sua CNN na descrição que você forneceu.
Nima Mousavi

Respostas:

7

O fato de o algoritmo ter demorado um pouco para "entrar" não é particularmente surpreendente.

Em geral, a função alvo a ser otimizada por trás das redes neurais é altamente multimodal. Como tal, a menos que você tenha algum tipo inteligente de valores iniciais para o seu problema, não há motivos para acreditar que você começará em uma descida íngreme. Como tal, seu algoritmo de otimização estará vagando quase aleatoriamente até encontrar um vale bastante íngreme para começar a descer. Depois que isso for encontrado, você deve esperar que a maioria dos algoritmos baseados em gradiente comece imediatamente a se estreitar no modo específico mais próximo.

Cliff AB
fonte