• Nenhum resultado encontrado

2. REVISÃO BIBLIOGRÁFICA

2.3 INTELIGÊNCIA ARTIFICIAL, MACHINE LEARNING E DEEP LEARNING

2.3.3 Fundamentos de Deep Learning

O Deep Learning (DL), é um tipo de ML. É um algoritmo automático que imita a perceção humana

inspirada no cérebro humano e na conexão entre neurónios (Figura 10). O DL é a técnica que mais se aproxima

da maneira como os humanos aprendem (Zhang & Sornette, 2017).

A maioria dos métodos de Deep Learning usa arquitetura de rede neuronal. É por isso que Deep Learning

é frequentemente referida por redes neuronais profundas em referência às camadas que essas redes possuem.

Figura 10: Aprendizagem por DL

(Jaume Santacana, 2019)

As redes neuronais profundas surgem em 1943, por Warren McCulloch e Walter Pitts, que escreveram um

artigo sobre como os neurónios humanos poderiam funcionar, sendo que eles modelam uma rede neuronal

simples usando circuitos elétricos (McCulloch & Pitts, 1943). Este modelo abre o caminho para a pesquisa e

desenvolvimento das redes neuronais até aos dias de hoje.

Figura 11: Evolução do Deep Learning (Vázquez, 2019)

Em resumo, o Deep Learning por visão por computador baseia-se em algumas arquiteturas, nomeadamente

VGG, ResNet50, Inception, Xception e MobileNet que se apresentam a seguir.

pooling e ativação de camadas antes das camadas de classificação, estão conectadas no final (Krizhevsky et

al., 2017).

MobileNet é essencialmente uma versão simplificada da arquitetura Xception otimizada para aplicações

móveis.

2.3.3.1 ResNet

A ResNet (Residual Neural Network) nasceu em 2015 a partir de uma simples observação: Porque é que

as redes muito profundas funcionam pior à medida que se vão adicionando camadas (He, Zhang, Ren, & Sun,

2016)? Intuitivamente, as redes mais profundas não devem funcionar pior do que os seus homólogos menos

profundos, pelo menos na fase de treino (quando não há risco de sobre ajustamento). Como caso de estudo,

cria-se uma rede com n camadas que alcança uma certa precisão. No mínimo, uma rede com n+1 camadas

deve ser capaz de atingir a mesma precisão, se pelo menos copiando sobre as mesmas primeiras n camadas e

realizando um mapeamento de identidade para a última camada. Da mesma forma, redes com n+2, n+3 e n+4

camadas podem continuar a realização de mapeamento de identidades e alcançar a mesma exatidão. Na prática,

no entanto, estas redes mais profundas quase sempre se degradam no desempenho (Yu & Tomasi, 2019).

Os autores da ResNet resumiram estes problemas numa simples hipótese: mapeamentos diretos são difíceis

de aprender. E propuseram uma solução: em vez de tentar aprender um mapeamento subjacente de x a H(x),

aprender a diferença entre os dois ou o “residual”. Então, para calcular o H(x), podemos apenas adicionar o

residual à entrada.

Digamos que o residual é F(x)=H(x)-x. Agora em vez de aprender diretamente H(x), as nossas redes estão

a tentar aprender F(x)+x. Isto dá origem ao bloco ResNet (ou "rede residual") (Figura 12).

Figura 12: Bloco de ResNet (Meghana, 2019)

Cada “bloco” da ResNet consiste numa série de camadas e numa conexão de “atalho” adicionando a entrada

do bloco à sua saída. A operação de adição é realizada no sentido elementar, se a entrada e a saída são de

tamanhos diferentes, “zero-padding” ou projeções (via convoluções 1x1) podem ser usadas para criar

dimensões correspondentes.

Anteriormente, redes neuronais profundas sofriam frequentemente do problema do desaparecimento de

gradientes, em que os sinais de gradiente de função de erro decresciam exponencialmente à medida que retro

propagavam o erro para camadas anteriores. Quando os sinais de erro percorriam todo o caminho de volta às

camadas iniciais, eles eram tão pequenos que a rede não podia aprender. No entanto, devido ao facto do sinal

de gradiente na ResNet poder voltar diretamente às camadas iniciais através de um atalho, subitamente

poderíamos construir redes com 50 camadas, 101 camadas, 152 camadas, e até mesmo (aparentemente) mais

de 1000 camadas, que ainda assim funcionariam bem. Na altura, este foi um enorme salto em relação ao estado

de arte anterior, que ganhou o desafio ILSVRC 2014

4

com 22 camadas.

ResNet alterou fundamentalmente a forma como se entendem as redes neuronais e como elas aprendem.

A aprendizagem por transferência é uma técnica de ML em que se aplica conhecimento a partir de um

domínio origem (exemplo ImageNet) para um domínio destino que pode ter significativamente menos pontos

de dados. Na prática, isso geralmente envolve a inicialização de um modelo com pesos pré-treinados da ResNet,

Inception ou outro.

Com aprendizagem por transferência, estes modelos podem ser repropostos para qualquer tarefa, desde a

deteção de objetos, até à produção de textos e legendas para vídeos entre outros.

2.3.3.2 Inception

A Inception foca-se na eficiência computacional para treinar redes mais amplas. Noutras palavras: como

é que podemos escalar (“scale up”) as redes neuronais sem aumentar os custos computacionais?

Szegedy et al. (2015) focaram-se numa nova base (num novo bloco de construção) para redes profundas,

conhecido como o módulo Inception. No seu núcleo, este módulo é o produto de dois pontos-chave.

Numa rede tradicional, cada camada extrai informação da camada anterior de forma a transformar os dados

de entradas numa representação mais útil. No entanto, cada tipo de camada extrai um tipo de informação

diferente. A saída de um núcleo (kernel) convolucional 5x5 diz-nos algo diferente da saída de um núcleo

convolucional 3x3, que nos diz algo diferente da saída de um núcleo max-pooling e assim por diante. Em

qualquer camada, como é que sabemos qual a transformação que nos fornece a informação mais “útil”?

Um módulo Inception processa múltiplas transformações diferentes sobre o mesmo mapa de entrada em

paralelo, concentrando os seus resultados numa única saída, i.e., para cada camada faz uma transformação

convolucional 5x5, uma 3x3 e uma max-pooling. A camada seguinte do modelo decide se (e como) usa cada

parte da informação.

Figura 13: Modulo de Inception (Shubham Gandhi, 2019)

O aumento da densidade de informação desta arquitetura implica quer um aumento drástico dos filtros,

quer um aumento dos custos computacionais. Não só os grandes filtros convolucionais (por exemplo, 5x5) são

intrinsecamente grandes para processar, como o empilhamento de vários filtros diferentes lado a lado aumenta

muito o número de mapas de características por camada. Este aumento torna-se um congestionamento crítico

no modelo.

Por cada filtro adicional acrescentado, temos de convergir todos os mapas de entrada para calcular uma

única saída. A Figura 14 representa a criação de um mapa de saída a partir de um único filtro, onde implica o

cálculo (computing) sobre cada um dos mapas da camada anterior.

Figura 14: Mapa de saída a partir de um único filtro (Shubham Gandhi, 2019)

No caso de existirem M mapas de entrada, um filtro adicional significa a convergência sobre mais M

mapas, N filtros adicionais significa a convergência de N*M sobre mais mapas. Concluindo, qualquer aumento

uniforme do número de filtros resulta num aumento quadrático de cálculo (Szegedy et al., 2015).

Utilizando convoluções 1x1 para realizar uma redução da dimensionalidade, de forma a resolver o

congestionamento computacional, os autores de Inception usaram convoluções 1x1 para “filtrar” a

profundidade das saídas.

Uma convolução 1x1 apenas observa um valor de cada vez, mas através de vários canais, pode extrair

informação espacial e comprimi-la até uma dimensão inferior. Por exemplo, utilizando 20 filtros 1x1, uma

entrada com um tamanho de 64x64x100 (com 100 mapas de características) pode ser comprimido até 64x64x20.

Através da redução do número de mapas de entrada, foram capazes de empilhar diferentes transformações de

camadas em paralelo, resultando em redes que eram simultaneamente profundas (muitas camadas) e "largas"

(muitas operações paralelas).

Figura 15: Modulo de Inception (Szegedy et al., 2015)

A primeira versão de Inception, chamada de GoogLeNet, foi a vencedora de 22 camadas do concurso

ILSVRC 2014, atrás referido. As versões V2 e V3 foram desenvolvidas após um ano com melhoramentos em

relação, nomeadamente, reestruturando convoluções maiores em convoluções menores consecutivas, por

menos parâmetros. Na V3, por exemplo, a convolução 5x5 foi substituída com duas convoluções 3x3

consecutivas (Figura 15).

A Inception tornou-se rapidamente uma arquitetura modelo determinante. A versão V4, chegou a lançar

ligações residuais dentro de cada módulo, criando um híbrido Inception-ResNet. Mais importante ainda, porém,

demonstrou o poder das arquiteturas de "rede em rede" bem projetadas, acrescentando mais um passo ao poder

representativo das redes neuronais.

2.3.3.3 Xception

Tal como as duas arquiteturas anteriores, a Xception reestrutura a forma como olhamos para as redes

neuronais - redes convolucionais em particular. E, como o nome sugere, leva os princípios de Inception ao

extremo.

As correlações multicanal e as correlações espaciais são suficientemente desacopladas para que seja

preferível não as mapear conjuntamente (Chollet, 2017), isto é, numa rede convolucional tradicional, camadas

convolucionais procuram correlações tanto no espaço como na profundidade. Na camada convolucional padrão

multicanal ou profundidade. É equivalente a um filtro convolucional que analisa um pixel 2x2 em todos os três

canais RGB, na camada de entrada de uma imagem.

Na arquitetura Inception, começa-se a separar as duas ligeiramente. Usamos convoluções 1x1 para projetar

a entrada original em vários espaços de entrada separados e menores, e a partir de cada uma desses espaços de

entrada, usamos um tipo diferente de filtro para transformar esses blocos de dados 3D menores. Na Xception

em vez de dividir os dados de entrada em vários blocos compactados, a arquitetura mapeia as correlações

espaciais para cada canal de saída separadamente e, em seguida, executa uma convolução 1x1 em profundidade

para capturar a correlação entre os canais (Figura 16).

Figura 16: Correlação entre canais na Xception (Shubham Gandhi, 2019)

Trata-se de uma operação equivalente à operação “convolução separável em profundidade” (Chollet,

2017), que consiste numa convolução em profundidade (uma convolução espacial realizada

independentemente para cada canal), seguida por uma convolução pontual (uma convolução 1x1 através de

canais). Pode-se pensar como a procura de correlações através de um espaço 2D primeiro, seguido pela procura

de correlações através de um espaço 1D. Intuitivamente, este mapeamento 2D+1D é mais fácil para aprender

do que um mapeamento 3D completo.

Documentos relacionados