Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 10136|Resposta: 0

A Evolução da Arquitetura de Redes Neurais: Uma revisão abrangente de mais de dez arquiteturas do LeNet5 ao ENet

[Copiar link]
Publicado em 24/04/2018 13:08:47 | | | |
LeNet5
O LeNet5 nasceu em 1994 e é uma das primeiras redes neurais convolucionais, tendo avançado o campo do deep learning. Desde 1988, após muitas iterações bem-sucedidas, este trabalho pioneiro de Yann LeCun foi nomeado LeNet5 (veja: Aprendizagem Baseada em Gradiente Aplicada ao Reconhecimento de Documentos).


A arquitetura do LeNet5 baseia-se na ideia de que (especialmente) as características de uma imagem estão distribuídas por toda a imagem, e que a convolução com parâmetros aprendíveis é uma forma eficiente de extrair características semelhantes em múltiplos locais com um número reduzido de parâmetros. Naquela época, não havia GPU para ajudar no treinamento, e até a CPU era lenta. Portanto, a capacidade de salvar parâmetros, assim como o processo de cálculo, é um desenvolvimento fundamental. Isso é o oposto de usar cada pixel como uma entrada separada para uma grande rede neural multicamada. O LeNet5 explica que esses pixels não devem ser usados na primeira camada porque a imagem apresenta fortes correlações espaciais que não podem ser exploradas usando pixels independentes na imagem como diferentes características de entrada.

As funcionalidades do LeNet5 podem ser resumidas da seguinte forma:

Redes neurais convolucionais usam 3 camadas em sequência: convolucional, agrupada, não linear → Essa provavelmente é uma característica chave do aprendizado profundo de imagem desde este artigo!
Use convoluções para extrair características espaciais
Subamostra usando mapeamento para média espacial
Não linearidade na forma de tangente hiperbólica (tanh) ou em forma de S (sigmoide).
Redes Neurais Multicamadas (MLPs) servem como classificadores finais
Matrizes de conexão esparsas entre camadas evitam grandes custos computacionais

No geral, essa rede é o ponto de partida para um grande número de arquiteturas recentes e inspirou muitos nesse setor.

Intervalo
De 1998 a 2010, a rede neural estava em estágio de incubação. A maioria das pessoas não percebe o crescimento do poder deles, enquanto outros pesquisadores demoram a perceber isso. Graças ao advento das câmeras de celulares e câmeras digitais baratas, cada vez mais dados estão sendo explorados. E o poder de computação também está crescendo, as CPUs estão ficando mais rápidas e as GPUs estão se tornando ferramentas de computação para múltiplos propósitos. Essas tendências permitiram que as redes neurais progredissem, embora lentamente. Dados e poder computacional tornam as tarefas que as redes neurais podem realizar cada vez mais interessantes. Depois disso, tudo ficou claro......

Rede Dan Ciresan
Em 2010, Dan Claudiu Ciresan e Jürgen Schmidhuber publicaram uma implementação da primeira rede neural de GPU. Essa implementação é uma rede neural de 9 camadas rodando em um processador gráfico NVIDIA GTX 280, incluindo propagação direta e retroativa.

AlexNet
Em 2012, Alex Krizhevsky publicou Alexet (veja: ImageNet Classification with Deep Convolutional Neural Networks), uma versão mais profunda e ampla do LeNet que venceu a difícil competição do ImageNet por uma margem significativa.


O AlexNet estende as ideias do LeNet para redes neurais maiores que podem aprender objetos e níveis de objeto muito mais complexos. As contribuições deste trabalho são:

Use uma unidade linear modificada (ReLU) como uma não linearidade
Use a técnica Dropout para ignorar seletivamente neurônios individuais durante o treinamento, evitando o sobreajuste do modelo
Anule um pool grande para evitar o efeito médio do pooling médio
Reduza o tempo de treinamento com a GPU NVIDIA GTX 580

Nesse ponto, as GPUs podem fornecer um número maior de núcleos do que as CPUs, e o tempo de treinamento pode ser aumentado em 10 vezes, o que permite conjuntos de dados maiores e imagens maiores.

O sucesso da AlexNet levou a uma pequena revolução. Redes neurais convolucionais agora são a espinha dorsal do deep learning e se tornaram sinônimo de "grandes redes neurais que agora podem resolver tarefas úteis."

Excesso
Em dezembro de 2013, o laboratório Yann LeCun da Universidade de Nova York propôs um derivado do AlexNet, Overfeat (veja: OverFeat: Reconhecimento, Localização e Detecção Integradas usando Redes Convolucionais). Este artigo também propôs uma caixa delimitadora de aprendizagem, o que levou a muitos artigos sobre esse mesmo tema. Acredito que é melhor aprender a dividir objetos do que aprender caixas delimitadoras artificiais.

VGG
A rede VGG da Universidade de Oxford (veja: Redes Convolucionais Muito Profundas para Reconhecimento de Imagens em Grande Escala) é a primeira rede a usar filtros menores 3×3 em cada camada convolucional e combiná-los para processá-los como uma sequência convolucional.

Isso parece ser o oposto do princípio do LeNet, onde grandes convoluções são usadas para obter características semelhantes em uma imagem. Diferente dos filtros 9×9 ou 11×11 da AlexNet, os filtros estão começando a ficar menores, aproximando-se da infame anomalia de convolução 1×1 que a LeNet tenta evitar — pelo menos na primeira camada da rede. No entanto, o VGG fez grande progresso ao usar múltiplas convoluções 3×3 em sucessão para imitar os efeitos de campos receptivos maiores, como 5×5 e 7×7. Essas ideias também foram usadas em arquiteturas de rede mais recentes, como Inception e ResNet.


Redes VGG usam múltiplas camadas convolucionais 3×3 para caracterizar características complexas. Note que os blocos 3º, 4º e 5º do VGG-E: 256×256 e 512×512 3×3 são usados várias vezes para extrair características mais complexas e combinações dessas características. O efeito é equivalente a um grande classificador 512×512 com 3 camadas convolucionais. Isso obviamente significa que há muitos parâmetros e capacidades de aprendizado. Mas essas redes são difíceis de treinar e precisam ser divididas em redes menores e acumuladas camada por camada. Isso se deve à falta de uma forma robusta de regularizar o modelo ou de restringir mais ou menos uma grande quantidade de espaço de busca devido ao grande número de parâmetros.

O VGG utiliza grandes tamanhos de características em muitas camadas porque a inferência é demorada em tempo de execução. Assim como no gargalo do Inception, reduzir o número de recursos economizará alguns custos computacionais.

Rede na rede
A ideia de Network in Network (NiN, veja o artigo: Network In Network) é simples e excelente: o uso da convolução 1×1 para fornecer mais capacidades componíveis para as características da camada convolucional.

A arquitetura NiN usa camadas espaciais MLP após convoluções individuais para combinar melhor características antes de outras camadas. Novamente, você pode pensar que convoluções 1×1 são contrárias ao princípio original do LeNet, mas na verdade elas podem combinar características convolucionais de uma forma melhor do que não é possível, simplesmente empilhando mais características convolucionais. Isso é diferente de usar o pixel original como entrada da próxima camada. Convoluções 1×1 são frequentemente usadas para combinar características de forma estancada em mapas de características após a convolução, então elas podem realmente usar muito poucos parâmetros e compartilhá-los entre todos os pixels dessas características!


A capacidade do MLP de aumentar significativamente a eficácia de características convolucionais individuais ao combiná-las em grupos mais complexos. Essa ideia tem sido usada em algumas arquiteturas recentes, como ResNet, Inception e seus derivados.

O NiN também usa uma camada média de pooling como parte do classificador final, outra prática que se tornará comum. Isso é feito fazendo a média das respostas da rede a múltiplas imagens de entrada antes da classificação.

GoogLeNet e A Origem
Christian Szegedy, do Google, iniciou sua busca para reduzir a sobrecarga computacional das redes neurais profundas e projetou o GoogLeNet, a primeira arquitetura Inception (veja: Indo mais fundo com convoluções).

Foi no outono de 2014, e modelos de deep learning estavam se tornando úteis para classificar imagens versus quadros de vídeo. A maioria dos céticos já não duvida que o deep learning e as redes neurais realmente voltaram desta vez e continuarão a evoluir. Dada a utilidade dessas tecnologias, gigantes da internet como o Google estão muito interessados em implantar essas arquiteturas de forma eficiente e em escala em seus servidores.

Christian pensou muito sobre como redes neurais profundas podem alcançar altos níveis de desempenho, como no ImageNet, enquanto reduzem sua sobrecarga computacional. Ou melhorias de desempenho podem ser feitas garantindo o mesmo overhead computacional.

Ele e sua equipe criaram o módulo Inception:


À primeira vista, isso é basicamente uma combinação paralela de filtros convolucionais 1×1, 3×3, 5×5. Mas a grande ideia do Inception é reduzir o número de recursos antes de módulos paralelos caros com blocos convolucionais 1×1 (NiN). Isso é comumente chamado de "gargalo". Esta seção será explicada na seção "camada de gargalo" abaixo.

O GoogLeNet usa uma espinha dorsal sem módulo de inception como camada inicial, seguida por uma camada média de pooling mais um classificador softmax semelhante ao NiN. Esse classificador possui um número muito menor de operações do que os classificadores do AlexNet e do VGG. Isso também levou a um design de rede muito eficaz, veja o artigo: Uma Análise de Modelos de Redes Neurais Profundas para Aplicações Práticas.

Camada de gargalo
Inspirado pelo NiN, a camada de gargalo do Inception reduz o número de características em cada camada e, portanto, o número de operações; Assim, o tempo de inferência pode ser mantido baixo. O número de recursos é reduzido em 4 vezes antes que os dados sejam passados por módulos convolucionais caros. Isso representa uma economia significativa em termos de custos computacionais e um sucesso da arquitetura.

Vamos verificar especificamente. Agora que você tem 256 entradas de feature e 256 saídas de feature, vamos supor que a camada Inception só consiga realizar 3×3 convoluções, o que significa um total de 256×256×3×3 convoluções (quase 589.000 operações de multiplicação e acumulação (MAC)). Isso pode estar além do nosso orçamento de computação, por exemplo, rodar a camada em 0,5 milissegundos em servidores do Google. Em vez disso, decidimos reduzir o número de características que precisavam ser convolutas, que era 64 (ou seja, 256/4). Neste caso, começamos com uma convolução de 256 -> 64 1×1, depois 64 convoluções em todos os ramos da Origem, seguidas por uma convolução 1×1 a partir de uma característica de 64 -> 256, e agora a operação é a seguinte:

256×64 × 1×1 = 16.000s
64×64 × 3×3 = 36.000s
64×256 × 1×1 = 16.000s

Comparado aos 600.000 anteriores, agora há um total de 70.000 volumes computacionais, o que é quase 10 vezes menos.

E mesmo tendo feito operações melhores, não perdemos sua generalidade nessa camada. A camada de gargalo provou ser de primeira em conjuntos de dados como o ImageNet, e também está sendo usada em arquiteturas como a ResNet, que apresentaremos a seguir.

É bem-sucedido porque as características de entrada estão relacionadas, então a redundância pode ser reduzida combinando-as corretamente com a convolução 1×1. Depois, após um pequeno número de características ser convoluto, elas podem ser expandidas novamente em combinações significativas na próxima camada.

Origem V3 (e V2)
Christian e sua equipe são pesquisadores muito prolíficos. Em fevereiro de 2015, o Inception normalizado em lote foi introduzido como Inception V2 (veja o artigo: Batch Normalization: Acelerando o Treinamento Profundo em Redes Reduzindo o Deslocamento Interno de Covariáveis). A normalização em lote calcula a média e o desvio padrão de todos os mapas de características na saída de uma camada, e usa esses valores para normalizar suas respostas. Isso equivale a "clarear" os dados, de modo que todos os mapas neurais respondam na mesma faixa e tenham média zero. Isso ajuda no treinamento quando a próxima camada não precisa aprender offset a partir dos dados de entrada, e também foca em como combinar melhor essas características.

Em dezembro de 2015, a equipe lançou uma nova versão do módulo Inception e arquitetura similar (veja o artigo: Repensando a Arquitetura Inception para Visão Computacional). O artigo explica melhor a arquitetura original do GoogLeNet, dando mais detalhes sobre as escolhas de design. A ideia original é a seguinte:

Ao construir cuidadosamente a rede, a profundidade e a largura são equilibradas, de modo a maximizar o fluxo de informações para dentro da rede. Antes de cada pooling, adicione o mapeamento de características.
À medida que a profundidade aumenta, a profundidade ou número de características da camada de rede também aumenta sistematicamente.
Use cada aumento de profundidade de camada para aumentar a ligação das características antes da próxima camada.
Usando apenas 3×3 convoluções, um dado filtro 5×5 e 7×7 pode ser dividido em múltiplos 3×3s quando possível. Olhe a imagem abaixo


Como resultado, a nova Inception tornou-se:


Você também pode dividir o filtro achatando a convolução em módulos mais complexos:


Ao realizar cálculos de inception, o módulo Inception também pode reduzir o tamanho dos dados fornecendo pooling. Isso é basicamente semelhante a rodar uma camada simples de pooling em paralelo ao executar uma convolução:


Inception também usa uma camada de pooling e softmax como classificador final.

ResNet
Dezembro de 2015 trouxe uma nova mudança, que coincidiu com o Inception V3. O ResNet tem uma ideia simples: alimentar a saída de duas camadas convolucionais consecutivas e pular a entrada para a próxima camada (veja o artigo: Deep Residual Learning for Image Recognition).


Isso é parecido com algumas das ideias antigas anteriores. Mas no ResNet, eles dividem as duas camadas e são aplicados em uma escala maior. Trilar após 2 camadas é uma intuição fundamental porque dividir uma camada não traz mais melhoria. Passar pela camada 2 pode ser pensado como um pequeno classificador, ou uma rede dentro da rede.

Esta é a primeira vez que o número de camadas de rede ultrapassa 100, e até 1000 camadas podem ser treinadas.

O ResNet, que possui um grande número de camadas de rede, está começando a usar uma camada de rede semelhante à camada de gargalo do Inception:


Essa camada processa um número menor de características primeiro convolutando um número menor de características por um 1×1 com uma saída menor (geralmente 1/4 da entrada), depois usando uma camada de 3×3 e depois uma camada de 1×1. Semelhante ao módulo Inception, isso garante baixa intensidade computacional enquanto oferece combinações de características completas.

O ResNet utiliza uma camada inicial relativamente simples nas entradas: uma camada base de 7×7 volumes com dois pools. Compare isso com os mais complexos e menos intuitivos Inception V3 e V4.

O ResNet também usa uma camada de pooling mais softmax como classificador final.

Outros insights sobre a ResNet acontecem todos os dias:

O ResNet pode ser considerado paralelo e contíguo, tratando entradas e saídas (entradas) como paralelas em muitos módulos, enquanto as saídas de cada módulo são conectadas continuamente.
O ResNet também pode ser considerado como uma combinação de módulos paralelos ou contínuos (veja o artigo: Redes Residuais são Conjuntos Exponenciais de Redes Relativamente Rasas).
Foi constatado que o ResNet normalmente opera em paralelo em blocos de rede nas camadas 20-30. Em vez de fluir continuamente por toda a extensão da rede.
Quando o ResNet retorna a saída para a entrada como uma RNN, a rede pode ser considerada um modelo cortical biologicamente mais confiável (veja o artigo: Fazendo a ponte entre o aprendizado residual, redes neurais recorrentes e córtex visual).

Origem V4
Aqui está outra versão de Inception feita por Christian e sua equipe, que é semelhante a Inception V3:


O Inception V4 também combina o módulo Inception e o módulo ResNet:


Acho que a arquitetura não é muito concisa, mas também está cheia de heurísticas menos transparentes. É difícil entender as escolhas nela, e é difícil para os autores explicarem.

Dada a simplicidade da rede, que pode ser facilmente compreendida e corrigida, o ResNet pode ser melhor.

SqueezeNet
SqueezeNet (veja o artigo: SqueezeNet: precisão em nível AlexNet com 50 vezes menos parâmetros e tamanho de modelo <0,5MB) é uma arquitetura recentemente publicada que reprocessa os conceitos do ResNet e do Inception. Um modelo de rede de design de arquitetura melhor é menor, e os parâmetros ainda não exigem algoritmos de compressão complexos.

ENet
Nossa equipe planeja combinar todas as funcionalidades da arquitetura recentemente revelada para criar uma rede muito eficiente e de baixo peso, que utiliza menos parâmetros e cálculos para alcançar resultados de altíssimo nível. Essa arquitetura de rede é chamada ENet e foi projetada por Adam Paszke. Já usamos para marcação de um único pixel e resolução de cena.

Para mais informações sobre ENet, veja o artigo ENet: Uma Arquitetura Profunda de Rede Neural para Segmentação Semântica em Tempo Real. ENet é uma rede de codificação, adição e decodificação. O codificador é um design CNN comum para classificação. O decodificador é uma rede de upsampling que propaga a classificação de trás para frente à imagem original para segmentação. Isso usa apenas redes neurais e nenhum outro algoritmo para segmentação de imagens.

O ENet foi projetado para usar o mínimo de recursos possível no início. Por isso tem um script tão pequeno, com uma rede combinada de codificadores e decodificadores ocupando 0,7 MB com precisão de 16 fp. Mesmo com um modelo tão pequeno, o ENet é semelhante ou superior a outras soluções de redes neurais em precisão de segmentação.

Análise de módulos
A análise do módulo CNN, que foi feita no artigo (Systematic evaluation of CNN advances on the ImageNet), é muito útil:

Use a não linearidade ELU sem batchnorm ou ReLU com batchnorm.
Use uma transformação de espaço de cor RGB aprendida.
Use uma estratégia linear de declínio na taxa de aprendizado.
Use a soma das camadas agrupadas média e maior.
Use um tamanho de mini-lote de aproximadamente 128 a 256 exemplares. Se isso for grande demais para sua GPU, apenas reduza a taxa de aprendizado para esse tamanho.
Use a camada totalmente conectada como convolução e faça a média de todas as previsões para fazer a previsão final.
Quando o estudo aumenta o tamanho do conjunto de treinamento, detecta se há um platô que não é alcançado
A limpeza dos dados é mais importante do que o tamanho dos dados.
Se você não puder aumentar o tamanho da imagem de entrada, reduzir o passo nas camadas seguintes, isso terá o mesmo efeito.
Se sua rede tem uma arquitetura complexa e altamente otimizada, como o GoogLeNet, você deve ter cuidado ao modificá-la.

Outras arquiteturas que valem a pena ser observadas
FractalNet (veja o artigo: FractalNet: Redes Neurais Ultra-Profundas sem Residuos) utiliza uma arquitetura recursiva, que não é testada no ImageNet. Essa arquitetura é uma derivada do ResNet ou, mais geralmente, do ResNet.

futuro
Acreditamos que criar uma arquitetura de rede neural é uma prioridade máxima para o desenvolvimento do deep learning. Nossa equipe recomenda fortemente ler e compreender cuidadosamente os artigos mencionados no artigo.

Mas alguém pode se perguntar por que gastamos tanto tempo criando arquiteturas? Por que não nos dizer o que usar com os dados? Como você combina módulos? Essas perguntas são boas, mas ainda estão em pesquisa, e há um artigo para referência: Redes neurais com estrutura diferenciável.

Note que a maioria das arquiteturas que discutimos neste artigo são sobre visão computacional. Arquiteturas semelhantes de redes neurais foram desenvolvidas em outras áreas, e é muito interessante aprender sobre mudanças arquitetônicas em todas as outras tarefas.

Se você tem interesse em comparar arquitetura de redes neurais e desempenho computacional, veja o artigo: Uma Análise de Modelos Profundos de Redes Neurais para Aplicações Práticas.







Anterior:Vários métodos de cálculo do tempo de execução em Python
Próximo:Antminer B3 te diz o que cavar!
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com