Nos últimos anos, as redes neurais convolucionais (ou talvez as redes neurais profundas em geral) tornaram-se cada vez mais profundas, com redes de ponta passando de 7 camadas ( AlexNet ) a 1000 camadas ( Redes Residuais) no espaço de 4 anos. A razão por trás do aumento no desempenho de uma rede mais profunda é que uma função não-linear mais complexa pode ser aprendida. Dados dados de treinamento suficientes, isso permite que as redes discriminem mais facilmente entre diferentes classes.
No entanto, a tendência parece não ter seguido o número de parâmetros em cada camada. Por exemplo, o número de mapas de recursos nas camadas convolucionais ou o número de nós nas camadas totalmente conectadas permaneceu praticamente o mesmo e ainda é relativamente pequeno em magnitude, apesar do grande aumento no número de camadas. Da minha intuição, porém, parece que aumentar o número de parâmetros por camada daria a cada camada uma fonte mais rica de dados para aprender sua função não linear; mas essa idéia parece ter sido negligenciada em favor da simples adição de mais camadas, cada uma com um pequeno número de parâmetros.
Portanto, embora as redes tenham se tornado "mais profundas", elas não se tornaram "mais amplas". Por que é isso?
Respostas:
Como isenção de responsabilidade, trabalho com redes neurais em minha pesquisa, mas geralmente uso redes neurais rasas e relativamente pequenas, em vez de redes realmente profundas na vanguarda da pesquisa que você cita em sua pergunta. Eu não sou especialista em peculiaridades e peculiaridades de redes muito profundas e vou adiar para quem é.
Primeiro, em princípio, não há razão para você precisar de redes neurais profundas. Uma rede neural suficientemente ampla com apenas uma camada oculta pode aproximar-se de qualquer função (razoável), com dados de treinamento suficientes. No entanto, existem algumas dificuldades em usar uma rede extremamente ampla e rasa. A questão principal é que essas redes rasas e muito amplas são muito boas em memorização, mas não tão boas em generalização . Portanto, se você treinar a rede com todos os valores de entrada possíveis, uma rede super ampla poderá eventualmente memorizar o valor de saída correspondente desejado. Mas isso não é útil porque, para qualquer aplicação prática, você não terá todo o valor de entrada possível para treinar.
A vantagem de várias camadas é que elas podem aprender recursos em vários níveis de abstração . Por exemplo, se você treinar uma rede neural convolucional profunda para classificar imagens, verá que a primeira camada se treinará para reconhecer coisas muito básicas, como arestas, a próxima camada se treinará para reconhecer coleções de arestas, como formas, a próxima a camada treinará a si mesma para reconhecer coleções de formas como olhos ou narizes, e a próxima camada aprenderá recursos ainda mais avançados, como rostos. Múltiplas camadas são muito melhores em generalizar porque aprendem todos os recursos intermediários entre os dados brutos e a classificação de alto nível.
Isso explica por que você pode usar uma rede profunda em vez de uma rede muito ampla, mas superficial. Mas por que não uma rede muito profunda e muito ampla? Acho que a resposta é que você deseja que sua rede seja a menor possível para produzir bons resultados. À medida que você aumenta o tamanho da rede, na verdade você está apenas introduzindo mais parâmetros que sua rede precisa aprender e, portanto, aumentando as chances de sobreajuste. Se você construir uma rede muito ampla e muito profunda, terá a chance de cada camada apenas memorizar o que deseja que seja a saída e acabará com uma rede neural que não generaliza para novos dados.
Além do espectro do overfitting, quanto maior a sua rede, mais tempo será necessário para treinar . Redes profundas já podem ser muito caras em termos de computação para treinar; portanto, há um forte incentivo para torná-las suficientemente amplas para que funcionem bem, mas não mais.
fonte
Eu não acho que haja uma resposta definitiva para suas perguntas. Mas acho que a sabedoria convencional é a seguinte:
Basicamente, à medida que o espaço de hipóteses de um algoritmo de aprendizado aumenta, o algoritmo pode aprender estruturas cada vez mais ricas. Mas, ao mesmo tempo, o algoritmo se torna mais propenso a sobreajuste e seu erro de generalização provavelmente aumenta.
Portanto, para qualquer conjunto de dados, é aconselhável trabalhar com o modelo mínimo que tenha capacidade suficiente para aprender a estrutura real dos dados. Mas esse é um conselho bastante prático, já que geralmente a "estrutura real dos dados" é desconhecida e, muitas vezes, até as capacidades dos modelos candidatos são apenas vagamente entendidas.
Quando se trata de redes neurais, o tamanho do espaço da hipótese é controlado pelo número de parâmetros. E parece que, para um número fixo de parâmetros (ou uma ordem fixa de magnitude), aprofundar permite aos modelos capturar estruturas mais ricas (por exemplo, este artigo ).
Isso pode explicar parcialmente o sucesso de modelos mais profundos com menos parâmetros: o VGGNet (de 2014) possui 16 camadas com ~ 140M parâmetros, enquanto o ResNet (de 2015) o superou com 152 camadas, mas apenas ~ 2M
(por outro lado, modelos menores podem ser computacionalmente mais fáceis de treinar - mas eu não acho que isso seja um fator importante por si só - já que a profundidade realmente complica o treinamento)
Observe que essa tendência (mais profundidade, menos parâmetros) está presente principalmente em tarefas relacionadas à visão e redes convolucionais, e isso exige uma explicação específica do domínio. Então, aqui está outra perspectiva:
Cada "neurônio" em uma camada convolucional possui um "campo receptivo", que é o tamanho e a forma das entradas que afetam cada saída. Intuitivamente, cada kernel captura algum tipo de relação entre entradas próximas. E pequenos núcleos (comuns e preferíveis) têm um pequeno campo receptivo; portanto, eles podem fornecer informações apenas sobre as relações locais.
Mas à medida que você avança, o campo receptivo de cada neurônio em relação a uma camada anterior se torna maior. Portanto, camadas profundas podem fornecer recursos com significado semântico global e detalhes abstratos (relações de relações ... de relações de objetos), enquanto usam apenas pequenos núcleos (que regularizam as relações que a rede aprende e ajuda a convergir e generalizar).
Portanto, a utilidade de redes convolucionais profundas em visão computacional pode ser parcialmente explicada pela estrutura espacial de imagens e vídeos. É possível que o tempo diga que, para diferentes tipos de problemas, ou para arquiteturas não convolucionais, a profundidade realmente não funciona bem.
fonte
Adicionar mais recursos ajuda, mas o benefício rapidamente se torna marginal depois que muitos recursos foram adicionados. Essa é uma razão pela qual ferramentas como o PCA funcionam: alguns componentes capturam a maior variação nos recursos. Portanto, adicionar mais recursos depois de algum ponto é quase inútil.
Por outro lado, encontrar a funcionalidade correta para ma do recurso é sempre uma boa idéia. No entanto, se você não tem uma boa teoria, é difícil obter uma função correta, é claro. Portanto, adicionar camadas é útil como forma de abordagem de força bruta.
No entanto, aprofundar a rede levaria você facilmente à equação acima com apenas duas camadas. Funções mais complicadas precisariam de mais camadas, é por isso que aprofundar o número de camadas pode ser um caminho a percorrer em muitos problemas.
fonte
Por que você pode estar tentando limitar o número de parâmetros? Um número de razões:
fonte