Uma revisão das arquiteturas populares de aprendizado profundo: AlexNet, VGG16 e GoogleNet
Introdução
Problemas que vão desde o reconhecimento de imagens até a geração e marcação de imagens se beneficiaram muito de vários avanços arquitetônicos de aprendizado profundo (DL). Compreender as complexidades dos diferentes modelos de EAD ajudará você a entender a evolução do campo e a encontrar o ajuste certo para os problemas que você está tentando resolver.
Nos últimos anos, muitas arquiteturas surgiram variando em muitos aspectos, como tipos de camadas, hiperparâmetros, etc. Nesta série, revisaremos várias das arquiteturas DL mais notáveis que definiram o campo e redefiniram nossa capacidade para resolver problemas críticos.
Na primeira parte desta série, abordaremos modelos “anteriores” que foram publicados de 2012 a 2014. Isso inclui:
- Alex Net
- VGG16
- GoogleNet
Pré-requisitos
Para compreender totalmente os conceitos, é altamente recomendável ter um conhecimento básico de aprendizado profundo e de redes neurais, especificamente de redes neurais convolucionais (CNNs). É necessária familiaridade com conceitos-chave como camadas, funções de ativação, retropropagação e gradiente descendente. Um conhecimento geral de técnicas de processamento de imagens e experiência com uma estrutura de aprendizagem profunda como TensorFlow ou PyTorch também serão úteis para compreender as aplicações práticas destes arquiteturas.
Alex Net (2012)
AlexNet é uma das arquiteturas de redes neurais mais populares até hoje. Foi proposto por Alex Krizhevsky para o ImageNet Large Scale Visual Recognition Challenge (ILSVRV) e é baseado em redes neurais convolucionais. O ILSVRV avalia algoritmos para detecção de objetos e classificação de imagens. Em 2012, Alex Krizhevsky et al. publicou Classificação ImageNet com Redes Neurais Convolucionais Profundas. Foi quando se ouviu falar de AlexNet pela primeira vez.
O desafio era desenvolver uma Rede Neural Convolucional Profunda para classificar os 1,2 milhão de imagens de alta resolução no conjunto de dados ImageNet LSVRC-2010 em mais de 1.000 categorias diferentes. A arquitetura alcançou uma taxa de erro top-5 (a taxa de não encontrar o verdadeiro rótulo de uma determinada imagem entre as cinco principais previsões de um modelo) de 15,3%. O próximo melhor resultado ficou bem atrás, com 26,2%.
Arquitetura AlexNet
A arquitetura é composta por oito camadas no total, das quais as 5 primeiras são camadas convolucionais e as 3 últimas são totalmente conectadas. As duas primeiras camadas convolucionais são conectadas a camadas sobrepostas de pooling máximo para extrair um número máximo de recursos. A terceira, quarta e quinta camadas convolucionais estão diretamente conectadas às camadas totalmente conectadas. Todas as saídas das camadas convolucionais e totalmente conectadas estão conectadas à função de ativação não linear ReLu. A camada de saída final é conectada a uma camada de ativação softmax, que produz uma distribuição de 1000 rótulos de classe.
Arquitetura AlexNet
As dimensões de entrada da rede são (256 × 256 × 3), o que significa que a entrada para AlexNet é uma imagem RGB (3 canais) de (256 × 256) pixels. Existem mais de 60 milhões de parâmetros e 650.000 neurônios envolvidos na arquitetura. Para reduzir o overfitting durante o processo de treinamento, a rede usa camadas de dropout. Os neurônios que são “abandonados” não contribuem para o avanço e não participam da retropropagação. Essas camadas estão presentes nas duas primeiras camadas totalmente conectadas.
Treinamento e resultados da AlexNet
O modelo usa uma função estocástica de otimização de descida de gradiente com tamanho de lote, momento e redução de peso definidos como 128, 0,9 e 0,0005, respectivamente. Todas as camadas usam uma taxa de aprendizado igual de 0,001. Para lidar com o overfitting durante o treinamento, AlexNet usa camadas de aumento e eliminação de dados. Demorou aproximadamente seis dias para treinar em duas GPUs GTX 580 de 3 GB por 90 ciclos.
Abaixo está uma captura de tela dos resultados obtidos usando a arquitetura AlexNet:
Resultados usando AlexNet no conjunto de dados ImageNet
Em relação aos resultados do conjunto de dados ILSVRC-2010, AlexNet alcançou taxas de erro dos conjuntos de testes top 1 e top 5 de 37,5% e 17,0% quando a competição foi realizada.
Estruturas populares de aprendizado profundo, como PyTorch e TensorFlow, agora têm a implementação básica de arquiteturas como AlexNet. Abaixo estão alguns links relevantes para implementá-lo por conta própria.
- Modelo Tensorflow AlexNet
- Outras referências: Compreendendo AlexNet
- O artigo original: Classificação ImageNet com Redes Neurais Convolucionais Profundas
VGG16 (2014)
VGG é uma arquitetura de rede neural popular proposta por Karen Simonyan e Andrew Zisserman da Universidade de Oxford. Também é baseado em CNNs e foi aplicado ao Desafio ImageNet em 2014. Os autores detalham seu trabalho em seu artigo, Very Deep Convolutional Networks for large-scale Image Recognition. A rede alcançou 92,7% de precisão de teste entre os 5 primeiros no conjunto de dados ImageNet.
As principais melhorias do VGG, quando comparado ao AlexNet, incluem o uso de filtros de tamanho de kernel grandes (tamanhos 11 e 5 na primeira e segunda camadas convolucionais, respectivamente) com múltiplos filtros de tamanho de kernel (3×3), um após o outro.
Arquitetura VGG
As dimensões de entrada da arquitetura são fixadas ao tamanho da imagem (244 × 244). Numa etapa de pré-processamento, o valor RGB médio é subtraído de cada pixel de uma imagem.
Fonte: Implementação passo a passo do VGG16 em Keras para iniciantes
Após a conclusão do pré-processamento, as imagens são passadas para uma pilha de camadas convolucionais com pequenos filtros de campo receptivo de tamanho (3×3). Em algumas configurações o tamanho do filtro é definido como (1 × 1), o que pode ser identificado como uma transformação linear dos canais de entrada (seguida de não linearidade).
O avanço para a operação de convolução é fixado em 1. O agrupamento espacial é realizado por cinco camadas de agrupamento máximo, que seguem várias camadas convolucionais. O max-pooling é realizado em uma janela de pixels (2 × 2), com tamanho de passada definido como 2.
A configuração para camadas totalmente conectadas é sempre a mesma; as duas primeiras camadas possuem 4.096 canais cada, a terceira realiza a classificação ILSVRC de 1.000 vias (e, portanto, contém 1.000 canais, um para cada classe) e a camada final é a camada softmax. Todas as camadas ocultas da rede VGG são seguidas pela função de ativação ReLu.
Configuração, treinamento e resultados do VGG
A rede VGG possui cinco configurações denominadas de A a E. A profundidade da configuração aumenta da esquerda (A) para a direita (B), com mais camadas adicionadas. Abaixo está uma tabela que descreve todas as arquiteturas de rede potenciais:
Todas as configurações seguem o padrão universal da arquitetura e diferem apenas em profundidade; de 11 camadas de peso na rede A (8 camadas convolucionais e 3 camadas totalmente conectadas), a 19 camadas de peso na rede E (16 camadas convolucionais e 3 camadas totalmente conectadas). O número de canais das camadas convolucionais é bastante pequeno, começando em 64 na primeira camada e aumentando por um fator de 2 após cada camada de pooling máximo, até chegar a 512. Abaixo está uma imagem mostrando o número total de parâmetros (em milhões ):
O treinamento de uma imagem na rede VGG utiliza técnicas semelhantes às de Krizhevsky et al., mencionadas anteriormente (ou seja, o treinamento do AlexNet). Existem apenas algumas exceções quando estão envolvidas imagens de treinamento em múltiplas escalas. Todo o processo de treinamento é realizado otimizando o objetivo de regressão logística multinomial usando gradiente descendente de minilote baseado em retropropagação. O tamanho do lote e o momento são definidos como 256 e 0,9, respectivamente. A regularização de dropout foi adicionada para as duas primeiras camadas totalmente conectadas, definindo a taxa de dropout para 0,5. A taxa de aprendizagem da rede foi inicialmente definida como 0,001 e depois diminuiu por um fator de 10 quando a precisão do conjunto de validação parou de melhorar. No total, a taxa de aprendizagem foi reduzida 3 vezes e a aprendizagem foi interrompida após 370.000 iterações (74 épocas).
O VGG16 superou significativamente a geração anterior de modelos nas competições ILSVRC-2012 e ILSVRC-2013. Em relação ao desempenho de rede única, a arquitetura VGG16 obteve o melhor resultado (erro de teste de 7,0%). Abaixo está uma tabela mostrando as taxas de erro.
Em relação ao hardware e ao tempo de treinamento, a rede VGG levou semanas de treinamento usando GPUs Titan Black da NVIDIA.
Há duas desvantagens principais que vale a pena observar se você estiver trabalhando com uma rede VGG. Primeiro, leva muito tempo para treinar. Segundo, os pesos da arquitetura de rede são bastante grandes. Devido à sua profundidade e número de nós totalmente conectados, o modelo VGG16 treinado tem mais de 500 MB. VGG16 é usado em muitos problemas de classificação de imagens de aprendizado profundo; no entanto, arquiteturas de rede menores são frequentemente mais desejáveis (como SqueezeNet, GoogleNet, etc.)
Estruturas populares de aprendizado profundo, como PyTorch e TensorFlow, possuem a implementação básica da arquitetura VGG16. Abaixo estão alguns links relevantes.
- Implementação PyTorch VGG
- Implementação do Tensorflow VGG
- Link para o artigo de pesquisa original
GoogleNet (2014)
A Inception Network foi um dos maiores avanços nas áreas de Redes Neurais, principalmente para CNNs. Até o momento, existem três versões de Inception Networks, denominadas Inception Version 1, 2 e 3. A primeira versão entrou em campo em 2014 e, como o nome “GoogleNet” sugere, foi desenvolvida por uma equipe do Google. Esta rede foi responsável por estabelecer um novo estado da arte para classificação e detecção no ILSVRC. Esta primeira versão da rede Inception é conhecida como GoogleNet.
Se uma rede for construída com muitas camadas profundas, poderá enfrentar o problema de overfitting. Para resolver esse problema, os autores do artigo de pesquisa Indo mais fundo nas convoluções propuseram a arquitetura GoogleNet com a ideia de ter filtros com vários tamanhos que possam operar no mesmo nível. Com esta ideia, a rede torna-se realmente mais ampla em vez de mais profunda. Abaixo está uma imagem mostrando um Módulo Naive Inception.
Como pode ser visto no diagrama acima, a operação de convolução é realizada em entradas com três tamanhos de filtro: (1 × 1), (3 × 3) e (5 × 5). Uma operação max-pooling também é executada com as convoluções e então enviada para o próximo módulo de inicialização.
Como as redes neurais são demoradas e caras para treinar, os autores limitam o número de canais de entrada adicionando uma convolução extra (1 × 1) antes das convoluções (3 × 3) e (5 × 5) para reduzir as dimensões do rede e realizar cálculos mais rápidos. Abaixo está uma imagem mostrando um Módulo Naive Inception com esta adição.
Esses são os blocos de construção do GoogleNet. Abaixo está um relatório detalhado sobre sua arquitetura.
Arquitetura GoogleNet
A arquitetura do GoogleNet tem 22 camadas de profundidade, com 27 camadas de pooling incluídas. Existem 9 módulos iniciais empilhados linearmente no total. As extremidades dos módulos iniciais estão conectadas à camada de pooling média global. Abaixo está uma imagem ampliada da arquitetura completa do GoogleNet.
A Orange Box na arquitetura é a haste que possui poucas circunvoluções preliminares. As caixas roxas são as classes auxiliares. (Créditos de imagem: um guia simples para as versões da rede Inception).
A arquitetura detalhada e os parâmetros são explicados na imagem abaixo.
Treinamento e resultados do GoogleNet
O GoogleNet é treinado usando sistemas distribuídos de aprendizado de máquina com uma quantidade modesta de modelos e paralelismo de dados. O treinamento usou gradiente descendente estocástico assíncrono com impulso de 0,9 e um cronograma de taxa de aprendizagem fixa diminuindo a taxa de aprendizagem em 4% a cada 8 épocas. Abaixo segue imagem dos resultados das equipes que disputaram o ILSVRC 2014. O GoogleNet ficou em primeiro lugar com uma taxa de erro de 6,67%.
Abaixo estão alguns links relevantes que recomendo que você verifique se estiver interessado em usar ou implementar o GoogleNet.
- Link para o artigo de pesquisa original
- Implementação PyTorch do GoogleNet
- Implementação Tensorflow do GoogleNet
Conclusão
Essas arquiteturas estabeleceram a base para muitos dos modelos avançados de aprendizagem profunda atuais. A introdução ao AlexNet e o uso de GPUs marcaram uma virada no desempenho da classificação de imagens. O VGG16 demonstrou o poder da profundidade e da simplicidade ao utilizar pequenos filtros convolucionais, enquanto o GoogleNet introduziu o módulo Inception para alcançar um equilíbrio entre eficiência e precisão.