ZTOP+ZUMO

Não sabe o que é Deep Learning? — A NVidia explica!

Fomos até a sede da empresa em Santa Clara para entender como essa tecnologia funciona.

Parafraseando o nobre (e futuro ex) deputado federal Francisco Everardo Oliveira Silva :

você sabe o que faz uma rede neural? Na realidade eu também não sei mas clica em mim que eu te conto!

Fato é que nos últimos 5~6 anos a Inteligência Artificial está literalmente mudando o nosso mundo com a oferta cada vez maior de produtos e serviços que tiram proveito dessa tecnologia para reconhecer vozes, pessoas, identificar comportamentos, sugerir produtos, auxiliar pessoas…

…dirigir veículos, atender a pedidos musicais…

…e até criar partes e peças sem a intervenção humana:

Mas some-se isso nossa visão “pop” de um futuro distópico habitado por programas e computadores malvados desajustados como Skynet, Hal 9000, Colossus, Alpha 60, Proteus, MCP etc…

… fica meio difícil não olhar essa tecnologia com um certo receio de que um dia ela poderá se voltar contra nós e dominar a Terra — a não ser é claro — que os alienígenas, seres abissais, plantas carnívoras, cientistas malucos, monstros japoneses ou mesmo os macacos nos peguem primeiro:

Fato é que Inteligência Artificial não é necessariamente autoconsciência e o que está realmente em voga nos dias de hoje é um ramo dessa ciência mais conhecida como Deep Learning que, por sua vez, é parte de um conceito mais amplo conhecido como Machine Learning.

Para entender melhor esse conceito eu pedi uma ajuda para o pessoal da NVidia no Brasil (hi Richard, hi Ziebert!) e nos EUA (hi Dave!) e fizemos uma peregrinação até a nova sede da empresa localizada o coração do Vale do Silício para conversar com alguns executivos da área de Inteligência Artificial para entender melhor essa tecnologia.

Mas por que a NVidia?

Porque sob um certo ponto de vista, a empresa estava na hora certa, no lugar certo e com o produto certo para entrar de cabeça nessa revolução tecnológica.

Como todo mundo sabe, a NVidia sempre foi conhecida pelas suas aceleradoras gráficas, mas para ampliar o seu leque de negócios em 2008 ela desenvolveu uma tecnologia batizada de CUDA, que permite utilizar uma GPU como um multiprocessador paralelo capaz de resolver problemas matemáticos complexos a partir de programas escritos em uma linguagem baseada em C/C++/Fortran, criando assim o conceito de computação heterogênea onde CPU e GPU trabalham juntas para resolver problemas de processamento intensivo:

Mas apesar dessa promessa de ter um supercomputador para chamar de seu, fora da comunidade científica/acadêmica/corporativa o CUDA não teve muito impacto no mercado de consumo, fora no processamento de mídia (alguém se lembra do Badaboom?)

A grande reviravolta ocorreu em 2010, quando um grupo de Stanford liderado por Fei-Fei Li criou o Imagenet, um imenso banco de dados contendo imagens rotuladas e que foi usado em 2012 pelos participantes do Large Scale Visual Recognition Challenge (LSVRC) para desenvolver seus modelos de visualização para computadores, enviar seus resultados e receber uma pontuação baseada no seu grau de precisão.

Passado um tempo, os melhores sistemas tinham índices de erros na faixa dos 26%~28%, sendo que em 2012 Alex Krizhevsky, Ilya Sutskever e Geoff Hinton submeteram um modelo baseado em deep learning que baixou esse número quase pela metade (16%) e que virou a base dos modelos utilizados nos dias de hoje.

Uma característica muito interessante desse modelo computacional é que ele é altamente paralelizável, ou seja, ele roda muito bem em GPUs que são, na sua essência, processadores paralelos de ponto flutuante com centenas e até milhares de núcleos que podem ser usados massivamente para treinar grandes redes neurais de maneira mais eficiente, melhorando assim o seu nível de acerto.

Outro fenômeno recente que também catapultou o uso do aprendizado de máquina foi o surgimento do Big Data, ou a coleta de imensas quantidades de informações pelas empresas, cujo potencial (até de lucro) só pode ser avaliado e até explorado com as devidas ferramentas de análise, entre elas o uso dessa informação para treinar redes neurais.

Assim podemos afirmar que a combinação do Big Data com os recentes avanços na área de deep learning e a alta capacidade de processamento paralelo das GPUs formaram um verdadeiro tsunami tecnológico que está varrendo o mercado, com a empresa de Jensen Huang nadando de braçada no topo dessa onda.

Para falar especificamente sobre deep learning tive a oportunidade de conversar com Will Ramey, diretor de desenvolvimento de programas da NVidia que deu uma aulinha sobre essa tecnologia.

Ztop in a Box:

Antes de mais nada, vale a pena colocar algumas idéias em ordem. A saber:

1 — Artificial Inteligence (ou Inteligência Artificial) é um termo genérico que pode ser usado em qualquer técnica que permite a um computador imitar a inteligência humana, por meio de lógica, expressões condicionais (se-então), árvores de decisão e Machine Learning.

1.1 — Machine Learning (ou Aprendizado de Máquina) é um ramo da Inteligência Artificial que utiliza algumas técnicas meio exotéricas de estatística que permite que uma máquina seja capaz de melhorar a sua capacidade de realizar tarefas por meio de experiências, o que inclui o Deep Learning.

1.1.1 — Deep Learning (ou Aprendizado Profundo) é uma parte do Machine Learning formado por algoritmos que permitem um software aprender sozinho a realizar uma tarefa como reconhecer imagens ou vozes utilizando para isso redes neurais para processar grandes quantidades de dados.

Dito isso — na sua essência — deep learning é uma técnica de machine learning baseada em um conjunto de algoritmos que tentam modelar abstrações de alto nível por meio de um modelo matemático conhecido genericamente como rede neural (ou neural network) que utiliza uma estrutura matemática conhecida como “grafo” muito usada por exemplo para representar mapas e rotas dentro da memória do computador mas que, neste caso, é usado para organizar seus algoritmos de análise (isolados na forma de células ou “neurônios” ) em camadas (ou layers)…

… de modo que — de acordo com o resultado da análise de um neurônio — sua resposta pode ser direcionada para este ou aquele neurônio da camada seguinte, e assim por diante até o fim do processo.

Vale a pena observar que esse processo de identificação é progressivo, ou seja, neste exemplo clássico de rede neural usada para identificar imagens, nos primeiros níveis os neurônios irão reagir apenas a formas simples como linhas e curvas, passando depois para estruturas mais complexas a medida que o resultado avança pelas camadas seguintes até chegar ao ponto de lidar com conceitos abstratos e até complexos como notar a diferença entre um cachorro e um lobo:

A propósito, o modelo acima conhecido como rede neural convolucional é muito usado para esse tipo de aplicação mas, como ocorre no mundo animal, as redes neurais podem ter diversas formas, tamanhos e níveis de complexidade capazes e atender a outras finalidades:

Um dos grandes atrativos dessa tecnologia é que, ao contrário de outros modelos de programação baseados em condicionais do tipo “se->então->caso contrário…” a rede neural “aprende com seus erros.”

Como assim?

Digamos que num processo que é conhecido como treinamento, o sistema pega para “treinar” um modelo de rede neural criado para para reconhecer imagens de animais — ou seja — fornecemos uma imagem para a rede que processa/analisa a foto e sua resposta sai na forma do nome da sua espécie:

Só que como existem animais com características semelhantes, pode ser que ocorra eventualmente um erro de identificação em um ou mais neurônios da rede, fazendo assim com que ela se “engane” o que resulta numa resposta errada, do tipo confundir um guaxinim com um cachorro.

Mas, neste caso, a grande sacada dessa tecnologia é que, como no Imagenet, cada imagem usada no treino possui uma espécie de identificador associado ao mesmo, de modo que o sistema descobre imediatamente que a rede neural cometeu um erro…

… o que faz com que ela automaticamente percorra o caminho inverso na rede para verificar qual neurônio gerou o erro para fazer os devidos ajustes no seu algoritmo (ou mais exatamente no que eles chamam de “pesos”), fazendo assim que o resultado final seja o esperado, ou seja…

… a rede “aprendeu com esse erro” de modo que a tendência é que com os devidos ajustes nos pesos, ela erre menos a cada novo ciclo de treino, melhorando assim o seu desempenho geral:

Ramey explicou que depois de um certo número de interações o nível de acertos tende a estabilizar, de modo que não vale a pena forçar a rede a aprender acima de um certo limite. Neste ponto a rede está “treinada” e pode ser portada para a aplicação desejada e colocada para trabalhar:

Note que esse comportamento lembra muito a de um estudante de faculdade que passa por um estágio numa empresa, ou seja, no início ele só tem a formação teórica na cabeça de modo que praticar suas habilidades dentro de um ambiente supervisionado para ganhar experiência, melhorando assim o seu desempenho e produtividade a medida que ele fica mais “esperto.”

Resumindo: O processo de deep learning é formado na sua essência por duas etapas: A primeira é o chamado processo de treinamento onde o sistema pega um modelo de rede neural “novata” e a ensina uma nova habilidade, utilizando para isso uma massa de dados conhecida que serve como parâmetro/referência para realizar ajustes e correções de erros no algoritmo.

E com o modelo já treinado ela pode ser portada na aplicação desejada.

O interessante é que como agora a rede está “mais inteligente” ela é mais ágil nas respostas. Isso porque agora ela trabalha com “premissas” ou seja, ela consegue chegar a uma conclusão baseadas apenas em indícios da sua memória, o que não deixa de ser um tipo de “inferência“:

O grande atrativo da Inferência é que ela exige bem menos capacidade de processamento, permitindo assim que aplicações de IA que foram “treinadas” em supercomputadores possam ser executadas em computadores de linha, tanto localmente quanto na nuvem, ou mesmo em hardware dedicado…

… como o módulo Jetson TX1 da Nvidia o que viabiliza o seu uso em aplicações mais específicas como carros autônomos.

Disso tudo, podemos concluir que a tecnologia de machine learning e deep learning não tem nada de exotérico ou sobrenatural. Trata-se apenas de uma maneira diferente de criar aplicações utilizando técnicas que se assemelham com a maneira com que aprendemos a fazer certas coisas, ou seja, praticando e aprendendo com nossos erros.

Hello, Dave. You’re looking well today.

Legal né?

Disclaimer: Mario Nagano viajou por conta própria para Califórnia e visitou a Endeavor a convite da NVidia. As fotos bacanas, observações brilhantes e piadinhas infames são dele mesmo.

Desde o século passado Mario Nagano analisa produtos e já escreveu sobre hardware e tecnologia para veículos como PC Magazine, IDGNow!, Veja e PC World. Em 2007 ele fundou o Zumo junto com o Henrique assumindo o cargo de Segundo em Comando, Editor de Testes e Consigliere.

  • lucianojs 31/01/2018, 19:00

    Parabéns pelo artigo, achei muito didático.

    Trabalhei recentemente num projeto de Machine Learning para reconhecimento de entidades nomeadas em documentos de texto e me surpreendi com o resultado.
    E as novidades estão chegando cada vez mais rápido nesta área.

    • Mario Nagano 31/01/2018, 19:06

      Opa obrigado pelo feedbcak Lucinao, a idéia desse post é meio que tentar desmistificar essa tecnologia que para muitos ainda está envolta dentro de uma névoa de magia e mistério.

  • dflopes 01/02/2018, 14:10

    excelente artigo.
    Trabalho com modelos matematicos hidricos, ou seja, ainda no estágio da inteligência artificial (uso de equações para imitar o pensamento humano).
    Mas agora, estão aplicando redes neurais, iniciando um 2° estagio na modelagem ambiental.
    O problema é fazer o engenheiro aprender programação, ou o programador entender o problema apresentado.