Novembro de 2016 e o Google TensorFlow completa exato 1 ano desde seu primeiro release open-source. Ao longo desses 12 meses, o TensorFlow tem se tornado uma das mais incríveis bibliotecas de Machine Learning disponíveis, com diversas melhorias, otimizações, novas features e uma crescente comunidade. Mas afinal, o que é o Google TensorFlow? O objetivo deste artigo é discutir não apenas o que é esse importante framework, como também listar os dois fatores que levaram ao surgimento e expansão do TensorFlow: Big Data e Deep Learning.
Big Data
Como você já deve saber, estamos na Era da Informação. Os dados estão vindo de todos os lugares em volume, velocidade e variedade cada vez maiores: smartphones, relógios, sensores, eletrodomésticos e qualquer outro dispositivo eletrônico. Muitos desses dispositivos aliás, estão sendo construídos para armazenar dados em grandes bancos de dados na nuvem, uma vez que o armazenamento em Cloud é algo quase ilimitado e as empresas estão optando pela estratégia do “mais é melhor”. O resultado são Petabytes de dados sendo produzidos por produtos e seus usuários.
Ao mesmo tempo, a capacidade computacional está dando salto que parece desafiar a Lei de Moore. O aumento da velocidade das CPU’s foi quase insignificante nos últimos anos, mas tem havido uma explosão na arquitetura de processamento paralelo. As GPU’s (Unidades de Processamento Gráfico), que foram inicialmente projetadas para games de computador, agora estão sendo usadas para computação geral, abrindo uma verdadeira estrada de alta velocidade para o aprendizado de máquina, possibilitando processar imensos conjuntos de dados, em tempo cada vez menor, gerando modelos preditivos cada vez mais eficientes.
Machine Learning emprega modelos matemáticos e estatísticos para responder questões específicas a partir dos dados. Ou seja, se temos mais dados e se podemos processá-los em velocidade cada vez maior, poderemos responder mais perguntas e de forma mais precisa. Faz sentido para você? Já é perceptível a evolução do aprendizado de máquina para detectar spams, recomendar produtos ou prever o preço de commodities. Mas um típico específico de Machine Learning tem dominado o cenário, com incrível sucesso em diversas áreas: Deep Learning.
Deep Learning
Deep Learning é o termo usado para descrever o processo de utilizar modelos de redes neurais de múltiplas camadas e que podem ser usados para uma incrível variedade de diferentes combinações de técnicas matemáticas. Esses modelos são incrivelmente poderosos, mas nossa habilidade de utilizar redes neurais de forma verdadeiramente eficiente tem sido um fenômeno relativamente novo, já que agora temo massivas quantidades de dados disponíveis (Big Data) e capacidade computacional que nos permite transformar os modelos de Deep Learning em uma técnica extremamente poderosa.
O diferencial do Deep Learning está no fato que o modelo criado tem mais flexibilidade em decidir como os dados serão usados para gerar o melhor resultado possível. O Cientista de Dados não precisa perder tanto tempo tentando descobrir que inputs devem ser incluídos, pois modelos de Deep Learning podem considerar todos os parâmetros e automaticamente determinar a melhor combinação dos valores de entrada. Isso torna o processo de tomada de decisão muito mais sofisticado, convertendo computadores e dispositivos em sistemas mais inteligentes do que nunca. Com Deep Learning podemos criar carros que dirigem por si próprios ou telefones que compreendem nossa voz, sistemas de tradução de idiomas, reconhecimento facial, análise preditiva, composição de músicas por algoritmos e uma infinidade de outras aplicações de Inteligência Artificial que estão se tornando viáveis graças ao Deep Learning.
Embora os conceitos matemáticos por trás do Deep Learning estejam entre nós há muitas décadas, bibliotecas de programação de computadores dedicadas a criar e treinar os modelos de Deep Learning surgiram apenas nos últimos anos (o que mostra como esta área ainda vai crescer e muito). Mas infelizmente muitas dessas bibliotecas possuem verdadeiros dilemas entre flexibilidade e possibilidade de uso em produção. Bibliotecas flexíveis são excelentes para pesquisa e desenvolvimento de novas arquiteturas, mas não estão prontas para uso em produção com aplicações críticas de sistemas web por exemplo. Por outro lado, existem bibliotecas velozes e eficientes para execução em ambiente paralelo e distribuído (e portanto excelentes alternativas para ambiente de produção), mas que são especializadas em apenas alguns tipos de redes neurais e possuem pouca flexibilidade. Isso nos deixa com um grande dilema entre qual biblioteca escolher para um projeto de Inteligência Artificial por exemplo. O TensorFlow pode ser a solução.
Google TensorFlow
A versão open source do TensorFlow foi liberada pelo Google em Novembro de 2015, como o resultado de anos de lições aprendidas do seu antecessor, o DistBielief. O TensorFlow foi construído para ser flexível, eficiente, extensível e portável. Computadores de qualquer natureza podem executar o TensorFlow, desde smartphones a gigantescos clusters de computadores. E uma das características mais interessantes do TensorFlow é sua capacidade de rapidamente gerar um produto ou serviço a partir do modelo preditivo treinado, eliminando a necessidade de reimplementar o modelo. O TensorFlow é uma biblioteca inovadora e conta com uma comunidade ativa. O TensorFlow pode ser usado por indivíduos em busca de pesquisas ou mesmo grandes empresas que precisam implementar estratégias de Inteligência Artificial. O Google é um claro exemplo.
A ferramenta original de Deep Learning em larga escala do Google foi o DistBelief, um produto da equipe do Google Brain. Desde a sua criação, tem sido utilizado por dezenas de equipes para inúmeros projetos envolvendo redes neurais profundas. No entanto, como ocorre com muitos projetos de engenharia de primeira classe, houve erros de projeto que limitaram a usabilidade e a flexibilidade do DistBelief. Algum tempo após a criação do DistBelief, o Google começou a trabalhar no seu sucessor, cujo design aplicaria lições aprendidas com o uso e as limitações do DistBelief original. Este projeto transformou-se no TensorFlow, que rapidamente se tornou uma biblioteca popular para o aprendizado da máquina e está sendo usado atualmente para o processamento de linguagem natural, inteligência artificial, visão computacional e análise preditiva.
Mas o que exatamente é o TensorFlow?
Visitando o site oficial do TensorFlow, vemos a sua primeira definição: TensorFlow é uma biblioteca de software de código aberto para a inteligência de máquina.
Logo abaixo, no primeiro parágrafo em “Sobre TensorFlow”, temos uma descrição alternativa: TensorFlow é uma biblioteca de software de código aberto para computação numérica usando gráficos de fluxo de dados. Esta segunda definição é um pouco mais específica, mas pode não ser a explicação mais compreensível para aqueles com menos formação matemática ou técnica. Vamos quebrá-la em pedaços e descobrir o que cada peça significa.
TensorFlow foi originalmente criado pelo Google como uma ferramenta de aprendizagem de máquina, mas uma implementação do mesmo foi liberada sob a licença Apache 2.0 em novembro de 2015. Como software de código aberto, qualquer pessoa tem permissão para baixar, modificar e usar o código. Devido à popularidade que TensorFlow ganhou, há melhorias feitas na biblioteca diariamente – criadas por desenvolvedores do Google e de terceiros.
Observe que utilizei o termo “uma implementação” e não “TensorFlow” foi liberado. Tecnicamente falando, TensorFlow é uma interface para computação numérica como descrito no white paper TensorFlow e o Google ainda mantém sua própria implementação interna do software. No entanto, as diferenças entre a implementação de código aberto e implementação interna do Google são devido a conexões com outros softwares internos. O Google está constantemente gerando aprimoramentos e disponibilizando no repositório público no Github e, para todos os efeitos, o release de código aberto contém as mesmas capacidades que a versão interna do Google.
Em vez de chamar-se uma “biblioteca para a aprendizagem de máquina”, o TensorFlow usa o termo mais amplo “computação numérica.” Enquanto TensorFlow contém um pacote (“Scikit Flow”) que emula a funcionalidade de modelagem do Scikit–Learn da linguagem Python, é importante notar que TensorFlow não tem como objetivo principal fornecer soluções prontas de aprendizagem de máquina. Em vez disso, o TensorFlow fornece um conjunto extenso de funções e classes que permitem aos usuários definir modelos a partir do zero matematicamente. Isso permite que os usuários com o conhecimento técnico apropriado criem modelos personalizados e flexíveis de forma rápida e intuitiva. Além disso, embora TensorFlow tenha suporte extensivo para a funcionalidade específica de Machine Learning, é igualmente adequado para executar cálculos matemáticos complexos.
O TensorFlow é projetado para ser escalável em vários computadores, bem como várias CPUs e GPUs dentro de máquinas individuais. Embora a implementação de código aberto original não tivesse recursos distribuídos após a liberação, a partir da versão 0.8.0 a funcionalidade de execução distribuído ficou disponível como parte da biblioteca interna TensorFlow. Embora esta API distribuída seja um pouco pesada, é incrivelmente poderosa. A maioria das outras bibliotecas de aprendizagem de máquinas não possui esses recursos e é importante observar que a compatibilidade nativa com determinados gerenciadores de cluster está sendo trabalhada.
Embora a palavra “TensorFlow” seja usada principalmente para se referir à API utilizada para construir e treinar modelos de aprendizagem de máquina, TensorFlow é realmente um pacote de software projetado para ser usado em conjunto com:
TensorFlow é a API para definir modelos de aprendizado de máquina, treiná-los com dados e exportá-los para uso posterior. A API primária é acessada através do Python, enquanto a computação real é escrita em C++. Isso permite que os cientistas e engenheiros de dados utilizem um ambiente mais “user-friendly” em Python, enquanto a computação real é feita com código C++ rápido e compilado. Existe uma API C++ para executar modelos TensorFlow, mas ainda é limitada e não é recomendada para a maioria dos usuários.
O TensorBoard é um software de visualização de gráficos que está incluído em qualquer instalação TensorFlow padrão. Quando um usuário inclui certas operações específicas de TensorBoard em TensorFlow, TensorBoard é capaz de ler os arquivos exportados por um gráfico TensorFlow e pode dar uma visão sobre o comportamento de um modelo. É útil para estatísticas de resumo, analisar o treinamento e depurar seu código TensorFlow. Aprender a usar TensorBoard desde cedo, pertmitirá trabalhar com TensorFlow de forma mais agradável e produtiva.
O TensorFlow Serving é um software que facilita a instalação de modelos TensorFlow pré-treinados. Usando funções TensorFlow embutidas, um usuário pode exportar seu modelo para um arquivo que pode então ser lido nativamente pelo TensorFlow Serving. É então capaz de iniciar um servidor simples de alto desempenho que pode receber dados de entrada, passá-los para o modelo treinado e retornar a saída do modelo. Além disso, o TensorFlow Serving é capaz de alternar de modo contínuo modelos antigos com novos, sem qualquer tempo de inatividade para os usuários finais. Embora o TensorFlow Serving seja possivelmente a porção menos reconhecida do ecossistema TensorFlow, pode ser o que o diferencia da sua concorrência. Incorporar o Serving em um ambiente de produção permite que os usuários evitem reimplementar seu modelo. TensorFlow Serving é escrito inteiramente em C++ e sua API só é acessível através de C++.
Quando usar o TensorFlow:
- Pesquisa, desenvolvimento e iteração através de novas arquiteturas de aprendizagem de máquina.
- Implementar os modelos diretamente em produção a partir da conclusão do treinamento.
- Implementar arquiteturas complexas existentes.
- Modelos Distribuídos de Larga escala
- Criar e treinar modelos para sistemas móveis / embarcados.
O Tensorflow pode ser instalado em Linux, MacOS e Windows. É possível ainda utilizar o Docker e criar um ambiente virtual com Linux e TensorFlow.
Quer aprender a trabalhar com o TensorFlow para a construção de aplicações e sistemas de Inteligência Artificial? A Data Science Academy vai oferecer o primeiro curso online de TensorFlow 100% em português do Brasil, na Formação Inteligência Artificial.
Referências:
http://research.google.com/pubs/pub40565.html
https://research.googleblog.com/2015/11/tensorflow-googles-latest-machine_9.html
http://research.google.com/teams/brain/
http://download.tensorflow.org/paper/whitepaper2015.pdf
Deep Learning with Apache Spark and TensorFlow
David Matos
Excelente post, ampliou meus horizontes e meus interesses pela área.
É bem difícil pra mim comentar sobre um post mas eu realmente gostei muito, continue com o ótimo trabalho.
Muito obrigado Richard. Mais posts em breve! Abs