Quantos dados você precisa para uma rede neural convolucional?

14

Se eu tenho uma rede neural convolucional (CNN), que possui cerca de 1.000.000 de parâmetros, quantos dados de treinamento são necessários (suponha que eu esteja fazendo descida estocástica do gradiente)? Existe alguma regra de ouro?

Notas adicionais: Quando realizei descida de gradiente estocástico (por exemplo, 64 amostras para 1 iteração), após ~ 10000 iterações, a precisão do classificador pode atingir um valor estável aproximado. Isso significa que não são necessários muitos dados? Como dados de 100k a 1000k.

RockTheStar
fonte

Respostas:

11

Para descobrir se mais dados serão úteis, você deve comparar o desempenho do seu algoritmo nos dados de treinamento (ou seja, os dados usados ​​para treinar a rede neural) com o desempenho nos dados de teste (ou seja, dados que a rede neural fez não "ver" no treinamento).

Uma coisa boa a ser verificada seria o erro (ou precisão) em cada conjunto como uma função do número da iteração. Existem duas possibilidades para o resultado disso:

1) O erro de treinamento converge para um valor significativamente menor que o erro de teste. Se for esse o caso, o desempenho do seu algoritmo quase certamente melhorará com mais dados.

2) O erro de treinamento e o erro de teste convergem para o mesmo valor (com o erro de treinamento ainda provavelmente sendo um pouco menor que o erro de teste). Nesse caso, dados adicionais por si só não ajudarão seu algoritmo. Se você precisar de um desempenho melhor do que está obtendo neste momento, tente adicionar mais neurônios às camadas ocultas ou adicionar mais camadas ocultas. Se forem adicionadas unidades ocultas suficientes, você descobrirá que o erro de teste se tornará notavelmente mais alto que o erro de treinamento, e mais dados ajudarão nesse ponto.

Para uma introdução mais completa e útil sobre como tomar essas decisões, recomendo o curso Coursera de Andrew Ng , particularmente as lições "Avaliando um algoritmo de aprendizado" e "Viés versus variação".

Kevin Lyons
fonte
3

A resposta ingênua é que sempre são necessários mais dados. A iteração no mesmo conjunto de dados que indica mais épocas ajuda a "refinar" o resultado, mas você não aprimora o resultado tanto quanto possui mais dados.

Como exemplo, estou treinando uma convnet para fazer modelagem de sentenças e testar se preciso de mais dados. Tentei dividir meu conjunto de dados de treinamento em um subconjunto menor e tentar testá-lo.

Usando todo o conjunto de dados e treinando para 10 iterações, obtive 93% de precisão no meu benchmark e ele continua melhorando. Em vez disso, quando iteramos os 10% do conjunto de dados para 100 iterações, obtive 85%.

Portanto, sempre tente ter mais dados, mas se não puder, fazer mais épocas pode ser uma troca interessante, mas no final o seu modelo converge melhor se você alimenta a rede com sempre novos dados.

dbonadiman
fonte
1
Obrigado pela sua resposta! Sim, eu sei que quanto mais dados você tiver, melhor será, mas, exatamente, quantos dados você precisa é o que não tenho certeza. Porque nem sempre você pode ter mais dados. Por exemplo, eu preciso contratar alguém para fazer anotações e rotulagem, eu quero descobrir quando devo parar ...
RockTheStar
isso significa que se eu tiver um pequeno conjunto de dados, meu modelo não convergirá?
samsamara 16/09/16
3

Acho que o mais importante é que as amostras nos seus dados estejam bem espalhadas, porque, não importa quantos dados você tenha, mais dados sempre serão melhores. Afinal, se você tentar aprender a distinguir entre fotos de gatos e cães, não poderá esperar que seu modelo tenha um bom desempenho se você apenas alimentar imagens de gatos.

Conforme sugerido na resposta de Kevin L , faz sentido considerar a diferença entre erro de treinamento e erro de teste. Se seus dados de teste são independentes dos dados de treinamento, isso indica como o modelo é generalizado para os dados indisponíveis. Algo que eu gostaria de acrescentar é o fato de que uma grande diferença entre erro de treinamento e teste diz apenas que seu modelo não se generaliza bem, ou seja, você está se ajustando demais aos dados de treinamento. Mais dados provavelmente ajudarão, porque agora a rede também precisa modelar os pontos de dados extras e, portanto, não pode superestimar tanto. No entanto, pode ser mais interessante alterar seu modelo para que ele se generalize melhor. Este capítulo de um excelente livro explica que tipos de regularização existem e como eles podem ser aplicados em redes para obter uma melhor generalização.

Se você estava procurando uma medida mais quantitativa, encontrei recentemente essa pergunta no quora. É sobre um codificador automático, mas acho que também deve ser aplicável ao seu exemplo. Não tenho idéia se isso está correto (por favor, avise-me), mas eu argumentaria que, por exemplo, para o MNIST, alguém poderia argumentar que você tenta reduzir imagens com um máximo de 28 * 28 * 8 * 10 000 = 62 720 000 entropia de bits para dez classes na codificação one-hot com 10 * 10 * 10 000 = 1 000 000 bits de entropia. Como estamos interessados ​​apenas nos 1.000.000 de bits de entropia na saída, podemos dizer que, com 1.000.000 de parâmetros, cada parâmetro representa um único bit, que é 1e-4 bits por amostra. Isso significa que você precisaria de mais dados. Ou você tem muitos parâmetros, porque, por exemplo, com 100 parâmetros, você tem 10 000 bits por parâmetro e, portanto, 1 bit por amostra. Contudo,

Tsjolder
fonte
Obrigado por sua sugestão. Acho que hoje em dia as pessoas apresentam uma estratégia diferente para reduzir o número de dados para uma tarefa específica.
RockTheStar
0

Outro método geralmente usado para descobrir se sua rede aprendeu recursos suficientes é visualizar os filtros iniciais. Se a rede estiver bem treinada, ela deve exibir um filtro suave. Um filtro ruidoso geralmente indica que a rede não foi treinada o suficiente ou que foi super ajustada. Para mais informações, leia esta página .

suhail
fonte