A Huawei está começando a fazer grandes movimentos novamente? CV Nova Arquitetura: VanillaNet: o Poder do Minimalismo no Aprendizado Profundo Notas de Leitura de Artigo


escreva na frente

  Na conferência VALSE há dois dias, o artigo da Huawei me chocou. Para ser sincero, o desempenho foi um pouco explosivo. Depois de olhar a tabela no Github, o número de parâmetros assusta à medida que o número de camadas aumenta, mas a velocidade de inferência é muito maior que os modelos anteriores.

Insira a descrição da imagem aqui

1. Resumo

  Olhando todo o Resumo, não há conteúdo específico, ou seja, o VanillaNet proposto neste artigo pode utilizar ResNet com gancho de esquerda, Swim-Transformer com gancho de direita, etc. O principal motivo é evitar a introdução de mecanismos ultraprofundos, de atalhos e de autoatenção, e não há funções de ativação complexas.

2. Introdução

  O primeiro parágrafo fala brevemente sobre o desenvolvimento e o papel da IA, e o segundo parágrafo começa com a introdução do AlexNet e o acompanhamento do ResNet, mostrando que este modelo está se tornando cada vez mais complexo em design, mas ao mesmo tempo seu o desempenho está cada vez melhor. A terceira seção é a casa do Transformer, ainda enfatizando a profundidade do modelo. O quarto parágrafo é uma transição do anterior para o seguinte, indicando que estruturas de modelo mais profundas e complexas são difíceis de implementar. O quinto parágrafo mostra o problema: redes planas sofrerão com o problema do gradiente de desaparecimento, e o desempenho de algumas redes profundas excede em muito o AlexNet e VGG anteriores, então poucas pessoas prestam atenção ao design da estrutura do modelo.
  O sexto parágrafo apresenta o tópico. Este artigo propõe VanillaNet. A estrutura do modelo é simples: as operações de ultraprofundidade, atalhos e operações de autoatenção do modelo são removidas. Assim, é proposta uma estratégia de treinamento para eliminar gradualmente as camadas não lineares para manter a velocidade de inferência. A fim de aumentar a não linearidade da rede, é proposta uma função de ativação baseada em série, que é muito mais eficaz do que outros modelos. Uma última coisa, VanillaNet é tão poderoso, venha acompanhar meu trabalho.

3. Estrutura neural de uma única baunilha

  A maioria dos modelos de classificação SOTA consiste em três partes: o bloco de haste transforma a imagem de entrada de 3 canais em multicanal e é acompanhado por redução da resolução, o módulo do corpo principal é usado para aprender informações úteis e uma camada totalmente conectada é usada para o classificador .saída. O módulo corporal possui quatro estágios, cada estágio é empilhado por vários blocos idênticos. Após cada estágio, o número de canais de recursos aumentará, enquanto a largura e a altura diminuirão.
  No próximo parágrafo, reclamo que ResNet e ViT são muito profundos e profundos, e ViT requer múltiplas camadas de autoatenção.
  No desenvolvimento atual de chips de IA, os FLOPs ou quantidades de parâmetros originalmente restritos não são mais o gargalo, porque a GPU NVIDIA de Lao Huang realmente se desenvolveu. Portanto, o design complexo do modelo e os blocos mais profundos tornaram-se os principais fatores que restringem a velocidade. Portanto, este artigo propõe o VanillaNet, conforme mostrado na figura abaixo:
Insira a descrição da imagem aqui
VanillaNet ainda é um design de três estágios, mas a diferença é a profundidade. Cada estágio é construído com apenas uma camada.

  Tome o VanillaNet de 6 camadas como exemplo, haste: camada convolucional 4 × 4 × 3 × C 4\times4\times3\times C4×4×3×C , o tamanho do passo é4 44 , vontade3 3A imagem de entrada do canal de 3 camadas é mapeada paraCCno canal C. Nos estágios 1, 2 e 3, use um tamanho de passo de2 2Uma camada de pooling máximo de 2 é usada para reduzir o tamanho do mapa de recursos, enquanto o número de canais é aumentado em 2 22 vezes. No estágio 4, o número de canais não aumenta devido ao agrupamento médio subsequente. A última camada totalmente conectada gera o resultado da classificação. O tamanho do kernel de cada camada convolucional é1 × 1 1\times11×1 , seguido por uma camada de ativação e uma camada de normalização em lote. Esta é toda a estrutura, sem atalhos ou blocos extras.
  Como VanillaNet é relativamente simples e uma rede rasa, o que enfraquece o desempenho do modelo, uma série de técnicas são propostas para melhorar sua não-linearidade.

4. Treinamento VanillaNet

4.1 Estratégia de treinamento profundo

  A estratégia de treinar duas camadas convolucionais mais uma camada de ativação é diferente de treinar uma única camada convolucional, pois requer a redução gradual da função de ativação à medida que a época de treinamento aumenta. No final do treinamento, as duas camadas convolucionais podem ser fundidas em uma para reduzir o tempo de inferência.
  Para uma função de ativação A ( x ) A(x)A ( x ) , como ReLU e Tanh, são combinados com um mapeamento único:
A ′ ( x ) = ( 1 − λ ) A ( x ) + λ x A'(x)=(1-\lambda)A ( x)+\lambdaxA (x)=( 1-eu ) UMA ( x )+λ x
ondeλ\lambdaλ é o equilíbrio modificadoA ′ ( x ) A'(x)A (x)hiperparâmetros não lineares da função de ativação. peçaeeeEEE representa a época atual e o número total de épocas respectivamente, entãoλ = e E \lambda=\frac{e}{E}eu=Ee. Então, no início do treinamento, e = 0 , A ′ ( x ) = A ( x ) e=0,A'(x)=A(x)e=0 ,A (x)=A ( x ) significa que o modelo tem forte não linearidade. À medida que o treinamento converge, finalmente temosA ′ ( x ) = x A'(x)=xA (x)=x , indicando que não há função de ativação entre as duas camadas convolucionais.

  Em seguida, a normalização do lote e a convolução subsequente de cada camada são transformadas em uma única operação de convolução.

W ∈ RC out × ( C in × k × k ) W\in\mathbb R^{C_{out}\times(C_{in}\times k\times k)}CRCvocê não _× ( Cdentro× k × k )B ∈ RC saída B\in \mathbb R^{C_{out}}BRCvocê não _são os pesos e desvios da camada convolucional respectivamente, insira C em C_{in}Cdentrocanais, saída C out C_{out}Cvocê não _canais, o tamanho do kernel de convolução é kkk . A escala, tradução, média e diferencial da normalização em lote são respectivamenteγ , β , μ , σ ∈ RC out \gamma,\beta,\mu,\sigma\in\mathbb{R}^{C_{out}}c ,b ,eu ,pRCvocê não _Exibição, você pode exibir a operação de fusão da versão em lote:
W i ′ = γ i σ i W i , B i ′ = ( B i − μ i ) γ i σ i + β i W_i'=\ frac{\gamma_i }{\sigma_i}W_i,B_i'=\frac{(B_i-\mu_i)\gamma_i}{\sigma_i}+\beta_iCeu'=peuceuCeu,Beu'=peu( Beu-eueu) ceu+beuonde subscrito i ∈ { 1 , 2 , … , C out } i\in\{1,2,\ldots,C_{out}\}eu{ 1 ,2 ,,Cvocê não _} representa oiésimoO valor de saída do canal i .

  Em seguida, mescle os dois 1 × 1 1\times11×1 convolução. Os recursos de entrada e saída são expressos respectivamente comox ∈ RC em × H × W x\in\mathbb R^{C_{in}\times H\times W}xRCdentro× H × Wy ∈ RC out × H ′ × W ′ y\in\mathbb R^{C_{out}\times H'\times W'}simRCvocê não _× H ×W , então a operação de convolução pode ser expressa como:
y = W ∗ x = W ⋅ im 2 col ( x ) = W ⋅ X y=W*x=W\cdot\mathrm{im}2\mathrm{col}( x )=W\cponto Xsim=Cx=Ctenho 2 colunas ( x )=CX onde∗ * representa a operação de convolução,⋅ \cdot representa a multiplicação de matrizes,X ∈ R ( C in × 1 × 1 ) ( H ′ × W ′ ) X\in\mathbb R^{(C_{in}\times1\times1)(H'\times W')}XR( Cdentro× 1 × 1 ) ( H ×W )origina-se deim2col {\text{im2col}}A operação im2col converte a entrada em uma forma correspondente ao kernel de convolução. Para1 × 1 1\vezes11×Para 1 convolução, não há necessidade de deslizar o núcleo de convolução na parte sobreposta (porque não há parte sobreposta). Portanto, a matriz de peso das duas camadas convolucionais é expressa comoW 1 W^1C1 somaW 2 W ^ 2C2 , duas operações de convolução sem função de ativação podem ser expressas como:
y = W 1 ∗ ( W 2 ∗ x ) = W 1 ⋅ W 2 ⋅ im 2 col ( x ) = ( W 1 ⋅ W 2 ) ∗ X y =W ^1*(W^2*x)=W^1\cdot W^2\cdot\text{im}2\text{col}(x)=(W^1\cdot W^2)*Xsim=C1( W2x )=C1C2tenho 2 colunas ( x )=( W1C2 )X Até agora, dois1 × 1 1\times11×1As convoluções são fundidas suavemente e não reduzem a velocidade de inferência.

4.2 Função de ativação informada da série

  Algumas das principais funções de ativação atuais incluem a Unidade Linear Retificada (ReLU) e suas variantes PReLU, GeLU e Swish. Elas são limitadas pela não linearidade de redes simples e superficiais. Em comparação com redes profundas, essas funções de ativação não foram estudadas sistematicamente. .
  Existem duas maneiras de melhorar a não-linearidade das redes neurais: empilhar camadas de ativação não-lineares ou aumentar a não-linearidade de cada camada de ativação.A maioria das redes convencionais escolhe a primeira, o que deixa um alto potencial para a computação paralela.
  Uma das idéias diretas é melhorar a capacidade não linear das camadas de ativação empilhadas. Empilhar camadas de ativação em série é a chave para redes profundas. Em contraste, empilhar camadas de ativação simultaneamente é uma boa maneira. Denote a função de ativação de camada única como A ( x ) A (x)UMA ( x ) ,xxx é a entrada e a função pode ser ReLU e Tanh. PilhaA ( x ) A (x)A ( x ) exibição possível:
A s ( x ) = ∑ i = 1 nai A ( x + bi ) A_s(x)=\sum_{i=1}^n a_i A(x+b_i)Ae( x )=eu = 1nãoaeuUMA ( x+beu) ondennn representa o número de funções de ativação empilhadas,ai a_iaeubi b_ibeusão a escala e o viés da função de ativação, respectivamente. A não linearidade da função de ativação pode ser melhorada pelo empilhamento simultâneo.
  Para melhorar ainda mais a capacidade de aproximação das séries, a entrada é alterada alterando seus vizinhos para aprender informações globais, semelhante ao BNET. Especificamente, dado o recurso de entrada X ∈ RH × W × CX\in\mathbb R^{H\times W\times C}XRH × W × C , ondeHHH ,WWW ,CCC são a largura de entrada, altura e número de canais, respectivamente. Portanto, a função de ativação tem a seguinte forma:
A s ( xh , w , c ) = ∑ i , j ∈ { − n , n } ai , j , c A ( xi + h , j + w , c + bc ) A_s (x_{ h,w,c})=\sum\limits_{i,j\in\{-n,n\}}a_{i,j,c}A(x_{i+h,j+w, c}+ b_c)Ae( xh , w , c)=eu , j { n , n }aeu , j , cUMA ( xeu + h , j + w , c+bc) ondeh ∈ { 1 , 2 , … , H } h\in\{1,2,\ldots,H\}h{ 1 ,2 ,,H }w ∈ { 1 , 2 , … , W } w\in\{1,2,\ldots,W\}c{ 1 ,2 ,,W }c ∈ { 1 , 2 , … , C } c\in\{1,2,\ldots,C\}c{ 1 ,2 ,,C } . Quandon = 0 n = 0n=0时,A s ( x ) = A ( x ) A_s(x)=A(x)Ae( x )=UMA ( x ) . Este artigo usa ReLU como função de ativação para construir a série.
  A seguir, analise sua complexidade computacional: para um kernel de convolução com tamanhoKKA camada convolucional de K possui os números dos canais de entrada e saída C em C_{in}respectivamente.CdentroC out C_{out}Cvocê não _, a complexidade computacional é:
O ( CONV ) = H × W × C in × C out × k 2 \mathcal{O}(\mathrm{CONV})=H\times W\times C_{in}\times C_{ fora}\vezes k^2O ( CONV )=H×C×Cdentro×Cvocê não _×k2O custo da camada de ativação em série é:
O ( SA ) = H × W × C in × n 2 \mathcal{O}(\text{SA})=H\times W\times C_{in}\times n^ 2O ( SA )=H×C×Cdentro×n2于是:
O (CONW) O (SA) = H × W × C entrada × C saída × K 2 H × W × C entrada × n 2 = C saída × k 2 n 2 \frac{\mathcal{O}( \text{CONW})}{\mathcal{O}(\text{SA})}=\frac{H\vezes W\vezes C_{entrada}\vezes C_{fora}\vezes K^2}{H\ vezes W\vezes C_{in}\vezes n^2}=\frac{C_{out}\vezes k^2}{n^2}O ( SA )O(CONW)=H×C×Cdentro×n2H×C×Cdentro×Cvocê não _×K2=n2Cvocê não _×k2Classificado em 4º lugar no VanillaNet-B 4Tomemos 4 estágios como exemplo, ondeC out = 2048 C_{out}=2048Cvocê não _=2048k = 1 k = 1k=1 ,n = 7 n = 7n=7 , a proporção da fórmula acima é84 8484 . Portanto, a complexidade computacional da camada de ativação proposta é menor que a da camada convolucional.

5. Experimente

  Conjunto de dados ImageNet.

5.1 Experimento de ablação

A influência do número de séries na função de ativação

Insira a descrição da imagem aqui

O impacto das técnicas de treinamento

Insira a descrição da imagem aqui

O impacto dos ramos de atalho

Insira a descrição da imagem aqui

5.2 Visualização da atenção

Insira a descrição da imagem aqui

5.3 Comparação com arquitetura SOTA

Insira a descrição da imagem aqui

5.4 Experimentos no conjunto de dados COCO

Insira a descrição da imagem aqui

6. Conclusão

  Este artigo estuda a viabilidade de redes neurais simples e superficiais e propõe uma estratégia de treinamento profundo e uma função de ativação em série para treinar VanillaNets para aumentar a não linearidade do modelo. Os resultados experimentais mostram que VanillaNets é muito eficaz e espero que todos experimentem.

Apêndice A: Estrutura da rede

Insira a descrição da imagem aqui
Cada camada convolucional é seguida por uma camada de ativação. Para VanillaNet-13-1,5×, o número de canais x1,5. Para VanillaNet-13-1,5׆, o pooling adaptativo é usado posteriormente nos estágios 2, 3 e 4, e o formato correspondente é 40 × 40 40\times4040×40 ,20 × 20 20\vezes2020×20 ,10 × 10 10\vezes1010×10 .

Apêndice B: Detalhes do treinamento

Insira a descrição da imagem aqui
escreva nas costas

  Este artigo da Huawei é curto e conciso e realmente reflete as habilidades básicas. Nesta era de aprendizagem “profunda”, é realmente incrível ousar desafiar redes superficiais.

Acho que você gosta

Origin blog.csdn.net/qq_38929105/article/details/131245415
Recomendado
Clasificación