Conteúdo


Arquiteturas de aprendizado profundo

O surgimento da inteligência artificial

Comments

As arquiteturas de conexionismo existem há mais de 70 anos, mas as novas arquiteturas e unidades de processamento gráfico (GPUs) trouxeram-nas para uma posição de destaque na inteligência artificial. As duas últimas décadas trouxeram as arquiteturas de aprendizado profundo, que expandiram muito o número e o tipo de problemas que as redes neurais podem solucionar. Este artigo apresenta cinco das principais arquiteturas de aprendizado profundo mais populares — recurrent neural networks (RNNs), long short-term memory (LSTM)/gated recurrent unit (GRU), convolutional neural networks (CNNs), deep belief networks (DBN) e deep stacking networks (DSNs) — e, em seguida, explora as opções de software livre para aprendizado profundo.

O aprendizado profundo não é uma abordagem única, mas uma classe de algoritmos e topologias que podem ser aplicados a uma ampla variedade de problemas. Embora o aprendizado profundo não seja novidade, ele está passando por um crescimento explosivo devido à interseção de redes neurais em camadas profundas e ao uso de GPUs para acelerar sua execução. O big data também alimentou esse crescimento. Como o aprendizado profundo se baseia em algoritmos de aprendizado supervisionado (o que treinam as redes neurais com dados de exemplo e recompensam-nas com base em seus sucessos), quanto mais dados houver, melhor será a construção dessas estruturas de aprendizado profundo.

Aprendizado profundo e o surgimento da GPU

O aprendizado profundo consiste em redes profundas de topologias variadas. As redes neurais já existem há um bom tempo, mas o desenvolvimento de inúmeras camadas de redes (cada uma fornecendo uma função, como extração de recurso) fez com que elas ficassem mais práticas de usar. A inclusão de camadas significa mais interconexões e pesos entre e dentro das camadas. É aí que as GPUs beneficiam o aprendizado profundo, possibilitando treinar e executar essas redes profundas (quando os processadores brutos não são eficientes).

As GPUs diferem-se dos processadores de vários núcleos tradicionais de algumas maneiras. Primeiro, um processador tradicional pode conter de 4 a 24 CPUs de propósito geral, mas uma GPU pode conter de mil a quatro mil núcleos de processamento de dados especializados;

Side-by-side images comparing the number of CPUs in a      multicore processor versus the number of cores in a GPU
Side-by-side images comparing the number of CPUs in a multicore processor versus the number of cores in a GPU

A alta densidade dos núcleos faz com que a GPU seja altamente paralela (ou seja, consiga executar vários cálculos de uma vez) em comparação com as CPUs tradicionais. Por isso, as GPUs são ideias para grandes redes neurais na quais vários neurônios podem ser calculados de uma vez (enquanto a CPU tradicional poderia tornar paralelo um número consideravelmente pequeno). As GPUs também superam em operações de vetor de vírgula flutuante porque os neurônios não são nada além de multiplicação e adição de vetores. Todas essas características permitem que as redes neurais nas GPUs façam o chamado paralelo embaraçoso (ou seja, o paralelo perfeito, que exige o mínimo ou nenhum esforço para tornar a tarefa paralela).

Arquiteturas de aprendizado profundo

O número de arquiteturas e algoritmos usados no aprendizado profundo é amplo e variado. Esta seção explora cinco das arquiteturas de aprendizado profundo dos últimos 20 anos. Obviamente, LSTM e CNN são duas das abordagens mais antigas nesta lista, mas também duas das mais usadas em vários aplicativos.

Graphical timeline showing the development of the five major deep learning      architectures by date, from 1990 to 2015
Graphical timeline showing the development of the five major deep learning architectures by date, from 1990 to 2015

Essas arquiteturas são aplicadas em uma ampla variedade de cenários, mas a tabela a seguir lista algumas das aplicações típicas.

ArquiteturaAplicativos
RNNReconhecimento de discurso, reconhecimento de caligrafia
Redes LSTM/GRUCompactação de texto em linguagem natural, reconhecimento de caligrafia, reconhecimento de discurso, reconhecimento de gesto, legendagem de imagem
CNN Reconhecimento de imagem, análise de vídeo, processamento de linguagem natural
DBNReconhecimento de imagem, recuperação de informações, entendimento de linguagem natural, previsão de falha
DSN Recuperação de informações, reconhecimento de discurso contínuo

Agora, vamos explorar essas arquiteturas e os métodos usados para treiná-las.

Recurrent neural networks

A RNN é uma das arquiteturas de rede de base usadas para desenvolver outras arquiteturas de aprendizado profundo. A principal diferença entre uma rede multicamadas típica é que em vez de ter conexões feed-forward completas, uma rede recorrente pode ter conexões de feedback para as camadas anteriores (ou para a mesma camada). Esse feedback permite que as RNNs mantenham a memória das entradas antigas e dos problemas do modelo no momento.

As RNNs consistem em um rico conjunto de arquiteturas (a seguir vamos analisar uma topologia popular chamada LSTM). O principal diferenciador é o feedback na rede, que pode se manifestar a partir de uma camada oculta, da camada de saída ou de alguma combinação entre elas.

Image with circles and arrows demonstrating the interrelationship        among network input, output, hidden, and context layers
Image with circles and arrows demonstrating the interrelationship among network input, output, hidden, and context layers

As RNNs podem ser reveladas no momento e treinadas com uma retropropagação padrão ou usando uma variante da retropropagação que se chama back-propagation in time (BPTT).

Redes LSTM/GRU

A LSTM foi criada em 1997 por Hochreiter e Schimdhuber, mas cresceu em popularidade nos últimos anos como uma arquitetura de RNN para várias aplicações. Você encontrará LSTMs em produtos usados diariamente, como smartphones. A IBM aplicou as LSTMs no IBM Watson® para reconhecimento de discurso de conversação de definição de marco.

A LSTM surgiu das arquiteturas de rede neurais típicas baseadas em neurônios e introduziu o conceito de célula de memória. A célula de memória pode manter seu valor por um tempo curto ou longo como uma função de suas entradas, o que permite que a célula se lembre daquilo que é importante e não apenas de seu último valor computado.

A célula de memória da LSTM contém três portas que controlam como as informações fluem para dentro e para fora da célula. A porta de entrada controla quando as novas informações podem entrar na memória. A porta de esquecimento controla quando uma parte existente das informações deve ser esquecida, permitindo que a célula se lembre de novos dados. Finalmente, a porta de saída controla quando as informações contidas na célula são usadas na saída da célula. A célula também contém pesos, que controlam cada porta. O algoritmo de treinamento, geralmente de BPTT, otimiza esses pesos com base no erro de saída da rede resultante.

Image with circles and arrows showing the LSTM memory cell       and the flow of information through the various gates
Image with circles and arrows showing the LSTM memory cell and the flow of information through the various gates

Em 2014, foi introduzida uma simplificação da LSTM chamada unidade recorrente de porta. Esse modelo tem duas portas, eliminando a porta de saída presente no modelo da LSTM. Para muitas aplicações, a GRU tem um desempenho semelhante ao da LSTM, mas por ser mais simples, tem menos pesos e uma execução mais rápida.

A GRU inclui duas portas: uma porta de atualização e uma porta de reconfiguração. A porta de atualização indica quanto deve ser mantido do conteúdo da célula anterior. A porta de reconfiguração define como incorporar a nova entrada ao conteúdo da célula anterior. Uma GRU pode modelar uma RNN padrão simplesmente configurando a porta de reconfiguração para 1 e a porta de atualização para 0.

Diagram of a typical GRU cell
Diagram of a typical GRU cell

A GRU é mais simples do que a LSTM, pode ser treinada com mais rapidez e pode ser mais eficiente em sua execução. No entanto, a LSTM pode ser mais expressiva e, com mais dados, pode levar a resultados melhores.

Convolutional neural networks

Uma CNN é uma rede neural multicamadas que foi inspirada na biologia do córtex visual animal. A arquitetura é útil principalmente para aplicativos de processamento de imagem. A primeira CNN foi criada por Yann LeCun. Nessa época, a arquitetura concentrava-se no reconhecimento de caracteres de caligrafia, como interpretação de código postal. Como uma rede profunda, as primeiras camadas reconhecem recursos (como bordas) e as próximas camadas recombinam esses recursos em atributos de nível superior da entrada.

A arquitetura CNN LeNet é composta de várias camadas que implementam extração de recurso e, em seguida, classificação (veja a imagem a seguir). A imagem é dividida em campos receptivos que alimentam uma camada convolucional que, em seguida, extrai os recursos da imagem de entrada. A próxima etapa é o agrupamento, que reduz a dimensionalidade dos recursos extraídos (por meio de down-sampling) enquanto retém as informações mais importantes (geralmente por meio de agrupamento máximo). Outra etapa de convolução e agrupamento é executada em seguida para alimentar uma perceptron multicamadas totalmente conectado. A camada de saída final dessa rede é um conjunto de nós que identifica recursos da imagem (neste caso, um nó por número identificado). A rede é treinada usando retropropagação.

Diagram of a typical LeNet CNN architecture
Diagram of a typical LeNet CNN architecture

O uso de camadas profundas de processamento, convoluções, agrupamento e uma camada de classificação totalmente conectada abriu as portas para várias novas aplicações das redes neurais de aprendizado profundo. Além do processamento de imagem, a CNN tem sido aplicada com sucesso a tarefas de reconhecimento de vídeo e várias outras relacionadas ao processamento de linguagem natural.

Aplicações recentes das CNNs e LSTMs produziram sistemas de legendagem de imagem e vídeo nos quais uma imagem ou um vídeo é resumido em linguagem natural. A CNN implementa o processamento de imagem ou vídeo e a LSTM é treinada para converter a saída da CNN em linguagem natural.

Deep belief networks

A DBN é uma arquitetura de rede típica, mas inclui um novo algoritmo de treinamento. A DBN é uma rede multicamadas (geralmente profunda, incluindo várias camadas ocultas) na qual cada par de camadas conectadas é uma máquina Boltzmann restrita (RBM). Dessa forma, uma DBN é representada como uma pilha de RBMs.

Na DBN, a camada de entrada representa as entradas brutas de sensores e cada camada oculta aprende as representações abstratas dessa entrada. A camada de saída, que é tratada de uma forma um pouco diferente do que as outras camadas, implementa a classificação de rede. O treinamento ocorre em duas etapas: pré-treinamento sem supervisão e ajuste preciso supervisionado.

Diagram of a typical DBN, with circles and arrows indicating the flow       of information among layers
Diagram of a typical DBN, with circles and arrows indicating the flow of information among layers

Em um pré-treinamento sem supervisão, cada RBM é treinada para reconstruir sua entrada (por exemplo, a primeira RBM reconstrói a camada de entrada para a primeira camada oculta). A próxima RBM é treinada da mesma forma, mas a primeira camada oculta é tratada como a camada de entrada (ou visível) e a RBM é treinada usando as saídas da primeira camada oculta como as entradas. Esse processo continua até que cada camada seja pré-treinada. Quando o pré-treinamento é concluído, o ajuste preciso começa. Nessa fase, os nós de saída ganham rótulos que os fornecem significado (o que eles representam no contexto da rede). O treinamento completo da rede é aplicado usando o aprendizado descendente gradiente ou a retropropagação para concluir o processo de treinamento.

Deep stacking networks

A arquitetura última é a DSN, também conhecida como rede convexa profunda. Uma DSN é diferente das estruturas de aprendizado profundo tradicionais porque apesar de consistir em uma rede profunda, é na verdade um conjunto profundo de redes individuais, cada uma com suas próprias camadas ocultas. Essa arquitetura é uma resposta a um dos problemas com o aprendizado profundo: a complexidade do treinamento. Cada camada na arquitetura de aprendizado profundo aumenta exponencialmente a complexidade do treinamento, portanto, a DSN enxerga o treinamento não como um único problema, mas como um conjunto de problemas de treinamento individuais.

A DSN consiste em um conjunto de módulos, e cada módulo é uma sub-rede da hierarquia geral da DSN. Em uma instância dessa arquitetura, três módulos são criados para a DSN. Cada módulo consiste em uma camada de entrada, uma única camada oculta e uma camada de saída. Os módulos são empilhados um acima do outro, e as entradas de um módulo consistem nas saídas da camada anterior e no vetor de entrada original. Essa definição de camada permite que a rede geral aprenda uma classificação mais complexa do que seria possível com um único módulo.

Diagram of a typical DSN showing how the stacked layers       facilitate learning
Diagram of a typical DSN showing how the stacked layers facilitate learning

A DSN permite o treinamento de módulos individuais de forma isolada, o que a torna eficiente devido à capacidade de treinar em paralelo. O treinamento supervisionado é implementado como uma retropropagação para cada módulo em vez de uma retropropagação na rede inteira. Para muitos problemas, as DSNs podem ter um desempenho melhor do que as DBNs típicas, o que as tornam uma arquitetura de rede popular e eficiente.

Estruturas de software livre

Implementar essas arquiteturas de aprendizado profundo com certeza é possível, mas começar do zero pode ser um processo muito lento que ainda pode precisar de otimização e amadurecimento. Felizmente, é possível aproveitar várias estruturas de software livre para implementar algoritmos de aprendizado profundo com mais facilidade. Essas estruturas oferecem suporte para linguagens como Python, C/C++ e Java® popular. Vamos explorar três das estruturas mais comuns e seus pontos fortes e fracos.

Caffe

Uma das estruturas de aprendizado profundo mais populares é a Caffe. A Caffe foi desenvolvida originalmente como parte de uma dissertação de pós-doutorado, mas agora foi lançada por meio da licença de distribuição de software da Berkeley. A Caffe oferece suporte a uma ampla variedade de arquiteturas de aprendizado profundo, incluindo a CNN e a LSTM, mas não oferece suporte para RBMs ou DBMs (mas o próximo release da Caffe2 incluirá esse suporte).

A Caffe tem sido usada para classificação de imagem e outras aplicações de visão e oferece suporte para aceleração baseada em GPU com a biblioteca NVIDIA CUDA Deep Neural Network. Além disso, ela oferece suporte a Open Multi-Processing (OpenMP) para colocar algoritmos de aprendizado profundo em paralelo sobre um cluster de sistemas. A Caffe e a Caffe2 são escritas em C++ visando o desempenho e oferecem uma interface Python e MATLAB para treinamento e execução de aprendizado profundo.

Deeplearning4j

Deeplearning4j é uma estrutura de aprendizado profundo popular que se concentra na tecnologia Java, mas inclui interfaces de programação de aplicativos para outras linguagens, como Scala, Python e Clojure. A estrutura é liberada por meio da licença da Apache e inclui suporte para RBMs, DBNs, CNNs e RNNs. A Deeplearning4j também inclui versões paralelas distribuídas que trabalham com Apache Hadoop e Spark (estruturas de processamento de big data).

A Deeplearning4j tem sido aplicada a vários problemas, incluindo detecção de fraude no setor financeiro, sistemas de recomendações, reconhecimento de imagem e segurança cibernética (detecção de intrusão na rede). A estrutura integra-se ao CUDA para otimização de GPU e pode ser distribuída com OpenMP ou Hadoop.

TensorFlow

A TensorFlow foi desenvolvida pela Google como uma biblioteca de software livre e descende da fonte fechada DistBelief. É possível usar a TensorFlow para treinar e implementar várias redes neurais (CNNs, RBMs, DBNs e RNNs) e ela foi liberada por meio da licença Apache 2.0. A TensorFlow tem sido aplicada a vários problemas, como legendagem de imagem, detecção de malware, reconhecimento de discurso e recuperação de informações. Uma pilha direcionada a Android chamada TensorFlow Lite foi liberada recentemente.

É possível desenvolver aplicativos com a TensorFlow em Python, C++, na linguagem Java, Rust ou Go (embora Python seja a mais estável) e distribuir sua execução com Hadoop. A TensorFlow oferece suporte para CUDA e também para interfaces de hardware especializadas.

Aprendizado profundo distribuído

Considerada um "mecanismo a jato de aprendizado profundo", a IBM Distributed Deep Learning (DDL) é uma biblioteca que se vincula às principais estruturas como Caffe e TensorFlow. A DDL pode ser usada para acelerar os algoritmos de aprendizado profundo sobre clusters de servidores e centenas de GPUs. A DDL otimiza a comunicação de cálculos de neurônios, definindo os caminhos ideais que os dados resultantes devem percorrer entre as GPUs. A resolução do gargalo de um cluster de aprendizado profundo foi demonstrada ao superar uma tarefa de reconhecimento de imagem anterior que a Microsoft tinha recém-definido.

Indo além

O aprendizado profundo é representado por uma gama de arquiteturas que podem desenvolver soluções para uma variedade de áreas de problema. Essas soluções podem ser redes concentradas em feed-forward ou recorrentes que permitem a consideração de entradas anteriores. Embora o desenvolvimento desses tipos de arquiteturas profundas possa ser complexo, várias soluções de software livre, como Caffe, Deeplearning4j, TensorFlow e DDL, estão disponíveis para permitir o início rápido da execução.


Recursos para download


Tema relacionado


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cognitive computing
ArticleID=1050584
ArticleTitle=Arquiteturas de aprendizado profundo
publish-date=10042017