Home > Gestão

Melhores bibliotecas de Machine e Deep Learning

Por que o TensorFlow, o Spark MLlib, o Scikit-learn, o PyTorch, o MXNet e o Keras brilham tanto?

Martin Heller, InfoWorld/EUA

25/03/2019 às 7h34

Foto: Shutterstock

Se você está iniciando um novo projeto de Machine ou Deep Learning, pode ficar confuso sobre qual estrutura escolher. Como discutiremos, existem várias boas opções para os dois tipos de projetos.

Há uma diferença entre uma estrutura de Machine Learning e uma estrutura de Deep Learning. Essencialmente, uma estrutura de Machine Learning abrange uma variedade de métodos de aprendizagem para classificação, regressão, agrupamento, detecção de anomalias e preparação de dados, e pode ou não incluir métodos de redes neurais. Já uma estrutura de Deep Learning abrange uma variedade de topologias de redes neurais com muitas camadas ocultas.

Keras , MXNet , PyTorch e TensorFlow são estruturas de Deep Learning. Scikit-learn e Spark MLlib são frameworks de Machine Learning. (Clique em qualquer um dos links anteriores para ler resenhas sobre cada produto.)

Em geral, os cálculos de Deep Neural Networks são executados muito mais rapidamente em uma GPU (especificamente uma GPU como as da Nvidia CUDA ), TPU ou FPGA, em vez de em uma CPU. Em geral, os métodos de Machine Learnig mais simples não se beneficiam de uma GPU.

Embora você possa treinar uma Deep Neural Network em uma ou mais CPUs, o treinamento tende a ser lento e, não estou falando de segundos ou minutos. Quanto mais nós e camadas precisarem ser treinados, e quanto mais dados estiverem disponíveis para treinamento, mais tempo levará. Quando a equipe do Google Brain treinou seus modelos de tradução de idiomas para a nova versão do Google Tradutor, em 2016, eles realizaram sessões de treinamento por uma semana, em várias GPUs. Sem GPUs, cada experimento de treinamento de modelo levaria meses.

Desde então, o Intel Math Kernel Library (MKL) tornou possível treinar algumas redes neurais em CPUs em um período de tempo razoável. Enquanto isso, GPUs, TPUs e FPGAs ficaram ainda mais rápidos. A velocidade de treinamento de todos os pacotes de Deep Learning executados nas mesmas GPUs é quase idêntica. Isso porque os loops internos de treinamento passam a maior parte do tempo no pacote Nvidia CuDNN. Além da velocidade de treinamento, cada uma das bibliotecas de Deep Learning tem seu próprio conjunto de vantagens e desvantagens, e o mesmo acontece com o Scikit-learn e o Spark MLlib.

Aqui está o resumo da avaliação.

Agora, um pouco mais detalhado.

1 - Keras

Keras é uma especificação e implementação de front-end de alto nível para a construção de modelos de rede neural que vem com suporte para três backends de Deep Learning: TensorFlow, CNTK e Theano. A Amazon está atualmente trabalhando no desenvolvimento de um backend do MXNet para o Keras. Também é possível usar o PlaidML (um projeto independente) como um backend para o Keras e aproveitar o suporte OpenCL da PlaidML para todas as GPUs.

O TensorFlow é o backend padrão para o Keras, e o recomendado para muitos casos de uso envolvendo aceleração de GPU no hardware da Nvidia via CUDA e cuDNN, bem como para aceleração de TPU no Google Cloud. O TensorFlow também contém uma classe tf.kerasinterna, separada de uma instalação Keras externa.

O Keras tem um ambiente de alto nível que torna a adição de uma camada a uma rede neural tão fácil quanto uma linha de código em seu modelo Sequential, e requer apenas uma chamada de função para compilar e treinar um modelo. O Keras permite trabalhar em um nível mais baixo, se você quiser, com seu Model ou API funcional.

Também é possível descer ainda mais, para o nível de codificação Python, com a subclasse keras.Model, mas use a API funcional quando possível. O Keras também possui uma scikit-learnAPI, para que você possa usar a pesquisa de grade do Scikit-learn para realizar a otimização de hiperparâmetros nos modelos Keras.

Custo: Código aberto gratuito.

Plataformas: Linux, MacOS, Windows ou Raspbian; Back-end TensorFlow, Theano ou CNTK.

2 - MXNet

O MXNet evoluiu e melhorou um pouco desde que se mudou para o guarda-chuva da Apache Software Foundation no início de 2017. Embora tenha havido trabalho em Keras com um backend do MXNet, uma interface diferente de alto nível se tornou muito mais importante: o Gluon. Antes da incorporação da Gluon, você poderia escrever facilmente um código imperativo ou um código simbólico rápido no MXNet, mas não ambos ao mesmo tempo. Com o Gluon, você pode combinar o melhor dos dois mundos, de uma forma competitiva com o Keras e o PyTorch.

As vantagens reivindicadas para o Gluon incluem:

- Código simples e fácil de entender: o Gluon oferece um conjunto completo de blocos de construção de rede neural plug-and-play, incluindo camadas, otimizadores e inicializadores predefinidos.

- Estrutura imperativa e flexível: O Gluon não exige que o modelo de rede neural seja definido rigidamente, mas aproxima o algoritmo e o modelo de treinamento para fornecer flexibilidade no processo de desenvolvimento.

- Gráficos dinâmicos: O Gluon permite que os desenvolvedores definam modelos de rede neural que são dinâmicos, o que significa que podem ser construídos em tempo real, com qualquer estrutura e usando qualquer fluxo de controle nativo do Python.

- Alto desempenho: o Gluon fornece todos os benefícios acima, sem afetar a velocidade de treinamento que o mecanismo subjacente fornece.

Essas quatro vantagens, juntamente com uma vasta e ampliada coleção de exemplos de modelos, levam a Gluon/MXNet a uma paridade aproximada com Keras/TensorFlow e o PyTorch para facilidade de desenvolvimento e velocidade de treinamento. Você pode ver exemplos de código para cada um deles na página principal do Gluon e na página de visão geral da API do Gluon .

A API Gluon inclui funcionalidades para camadas de redes neurais, redes neurais recorrentes, funções de perda, métodos de conjuntos de dados e conjuntos de dados de visão, além de um conjunto de métodos experimentais de redes neurais . Você pode combinar livremente Gluon com módulos padrão MXNet e Numpy (por exemplo module,autograd e ndarray), assim como com fluxos de controle Python.

O Gluon tem uma boa seleção de camadas para construir modelos, incluindo camadas básicas (Densa, Dropout, etc.), camadas convolucionais, camadas de agrupamento e camadas de ativação. Que podem ser usadas, entre outros lugares, dentro de containers como gluon.nn.Sequential().

Custo: Código aberto gratuito.

Plataformas: Linux, MacOS, Windows, Docker, Raspbian e Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ e Clojure (experimental). O MXNet está incluído no AWI Deep Learning AMI.

3 - PyTorch

O PyTorch baseia-se no antigo Torch e no novo framework Caffe2. Como você pode imaginar a partir do nome, o PyTorch usa o Python como linguagem de script e usa um back-end Torch C/CUDA evoluído. Os recursos de produção do Caffe2 estão sendo incorporados ao projeto PyTorch.

O PyTorch é classificado como “Tensores e redes neurais dinâmicas em Python com forte aceleração de GPU”. O que isso significa?

Tensores são uma construção matemática usada pesadamente em física e engenharia. Um tensor de rank dois é um tipo especial de matriz; pegar o produto interno de um vetor com o tensor produz outro vetor com uma nova magnitude e uma nova direção. TensorFlow leva o seu nome a partir do modo como os tensores (de pesos de sinapse) fluem em torno do seu modelo de rede. O NumPy também usa tensores, mas os chama de ndarray.

A aceleração de GPU é uma das mais modernas estruturas das Deep Neural Networks. Uma rede neural dinâmica é aquela que pode mudar de iteração para iteração, por exemplo, permitindo que um modelo PyTorch adicione e remova camadas ocultas durante o treinamento para melhorar sua precisão e generalidade. O PyTorch recria o gráfico em tempo real em cada etapa de iteração. Em contraste, o TensorFlow, por padrão, cria um único gráfico de fluxo de dados, otimiza o código do gráfico para desempenho e depois treina o modelo.

Enquanto o  modo de execução ávido é uma opção relativamente nova no TensorFlow, é a única maneira de executar o PyTorch: chamadas de API são executadas quando invocadas, em vez de serem adicionadas a um gráfico para serem executadas posteriormente. Isso pode parecer que seria menos eficiente, do ponto de vista computacional, mas o PyTorch foi projetado para funcionar dessa maneira, e não é desleixo quando se trata de velocidade de treinamento ou previsão.

O PyTorch integra bibliotecas de aceleração como Intel MKL e Nvidia cuDNN e NCCL (Nvidia Collective Communications Library) para maximizar a velocidade. Seus principais backend são gravados como bibliotecas independentes com uma API C99. Ao mesmo tempo, o PyTorch não é uma ligação do Python em um framework monolítico de C ++. A intenção é que ele seja profundamente integrado ao Python e permita o uso de outras bibliotecas Python.

Custo: Código aberto gratuito.

Plataformas: Linux, MacOS, Windows; CPUs e GPUs da Nvidia.

4 - Scikit-learn

framework Scikit-learn Python tem uma ampla seleção de algoritmos robustos de Machine Learning, mas nenhum de Deep Learning. Se você é fã do Python, o Scikit-learn pode ser a melhor opção para você entre as bibliotecas simples de Machine Learning.

O Scikit-learn é uma biblioteca de Machine Learning robusta e comprovada para Python com uma ampla variedade de algoritmos e gráficos integrados bem estabelecidos. É relativamente fácil de instalar, aprender e usar, e tem bons exemplos e tutoriais.

Por outro lado, o Scikit-learn não cobre Deep Learning ou aprendizado por reforço, não possui modelos gráficos e previsão de sequência, e realmente não pode ser usado em outros idiomas além do Python. Ele não suporta PyPy, o compilador just-in-time do Python ou GPUs. E usa o Cython (o compilador Python para C) para funções que precisam ser rápidas, como loops internos.

O Scikit-learn possui uma boa seleção de algoritmos para classificação, regressão, agrupamento, redução de dimensionalidade, seleção de modelos e pré-processamento. Ele tem boa documentação e exemplos para todos, mas não possui nenhum tipo de fluxo de trabalho orientado para realizar essas tarefas.

O Scikit-learn obtém as melhores notas para facilitar o desenvolvimento, principalmente porque os algoritmos funcionam como documentado, as APIs são consistentes e bem projetadas, e há poucas “incompatibilidades de impedâncias” entre estruturas de dados. É um prazer trabalhar com uma biblioteca cujas características foram completamente desenvolvidas e cujos bugs foram completamente eliminados.

Por outro lado, como a biblioteca não cobre Deep Learning ou aprendizado por reforço, deixa de fora os atuais problemas difíceis, mas importantes, como a classificação precisa da imagem e a análise e tradução confiáveis ​​em tempo real.

Claramente, se você estiver interessado em Deep Learning, você deve procurar em outro lugar.

Custo: Código aberto gratuito.

Plataformas: Requer Python, NumPy, SciPy e Matplotlib. As liberações estão disponíveis para MacOS, Linux e Windows.

5 - Spark MLlib

O Spark MLlib, biblioteca de Machine Learning de código aberto do Apache Spark, fornece algoritmos comuns de aprendizado de máquina, como classificação, regressão, agrupamento e filtragem colaborativa (mas não Deep Neural Networks). Também inclui ferramentas para extração de recursos, transformação, redução de dimensionalidade e seleção; ferramentas para construção, avaliação e ajuste de pipelines de Machine Learning; e utilitários para salvar e carregar algoritmos, modelos e pipelines, para manipulação de dados e para fazer álgebra linear e estatística.

O Spark MLlib é escrito em Scala e usa o pacote de álgebra linear Breeze. O Breeze depende do netlib-java para processamento numérico otimizado, embora na distribuição de código aberto signifique uso otimizado da CPU. As bibliotecas de dados oferecem clusters customizados do Spark que usam GPUs, o que pode lhe proporcionar outra melhoria de velocidade de 10x para o treinamento de modelos complexos de Machine Learning com Big Data.

O Spark MLlib implementa um caminhão de algoritmos e modelos comuns para classificação e regressão, a ponto de um novato se tornar confuso, mas um especialista provavelmente encontrará uma boa escolha de modelo para os dados a serem analisados, eventualmente. Para essa infinidade de modelos, o Spark 2.x adiciona o recurso importante do ajuste de hiperparâmetros, também conhecido como seleção de modelo. O ajuste de hiperparâmetros permite que o analista configure uma grade de parâmetros, um estimador e um avaliador e permita que o método de validação cruzada (demorado mas preciso) ou o método de validação train split   (mais rápido, mas menos preciso) encontre o melhor modelo para o dados.

O Spark MLlib tem APIs completas para Scala e Java, APIs em sua maioria completas para Python e APIs parciais para R. Você pode ter uma boa noção da cobertura contando as amostras: 54 exemplos Java e 60 Scala, e 52 Python. Na minha experiência, o Spark MLlib é mais fácil de usar nos notebooks Jupyter, mas certamente você pode executá-lo em um console se você domar as mensagens verbais de status do Spark.

O Spark MLlib fornece praticamente tudo que você deseja no modo de Machine Learning básico, seleção de recursos, pipelines e persistência. Ele faz um ótimo trabalho com classificação, regressão, clustering e filtragem. Como faz parte do Spark, tem ótimo acesso a bancos de dados, fluxos e outras fontes de dados. Por outro lado, o Spark MLlib não está realmente configurado para modelar e treinar Deep Neural Networks da mesma forma que o TensorFlow, PyTorch, MXNet e Keras.

Custo: Código aberto gratuito.

Plataforma: O Spark é executado em sistemas Windows e Unix (por exemplo, Linux, MacOS), com Java 7 ou posterior, Python 2.6 / 3.4 ou posterior e R 3.1 ou posterior. Para a API do Scala, o Spark 2.0.1 usa o Scala 2.11. Spark requer o Hadoop / HDFS.

6 - TensorFlow

O TensorFlow é provavelmente o padrão ouro para o desenvolvimento de redes neurais profundas, embora não seja isento de defeitos. Dois dos maiores problemas com o TensorFlow, historicamente, eram que era muito difícil aprender e que era preciso muito código para criar um modelo. Ambas as questões foram abordadas nos últimos anos.

Para tornar o TensorFlow mais fácil de aprender, a equipe do TensorFlow produziu mais materiais de aprendizado, além de esclarecer os tutoriais de " primeiros passos " existentes . Vários terceiros produziram seus próprios tutoriais (incluindo a InfoWorld). Agora existem vários livros sobre o TensorFlow e vários cursos online . Você pode até mesmo seguir o curso CS20, em Stanford, o TensorFlow for Deep Learning Research, que publica todos os slides e notas de aula online.

Existem várias novas seções da biblioteca TensorFlow que oferecem interfaces que exigem menos programação para criar e treinar modelos. Estes incluem tf.keras, que fornece uma versão somente do TensorFlow do pacote Keras neutro do motor, e tf.estimatorque fornece uma série de recursos de alto nível para trabalhar com modelos. Estes incluem regressores e classificadores para redes neurais profundas lineares e redes neurais lineares e profundas combinadas, além de uma classe base a partir da qual você pode construir seus próprios estimadores. Além disso, a API do conjunto de dados permite que você crie pipelines de entrada complexos a partir de peças simples e reutilizáveis. Você não precisa escolher apenas um. Como este tutorial mostra, você pode ser útil para fazer com que tf.kerastf.data.datasettf.estimatortrabalhem em conjunto.

O TensorFlow Lite é a solução leve do TensorFlow para dispositivos móveis e incorporados, que permite a inferência de Machine Learning no dispositivo (mas não o treinamento) com baixa latência e um pequeno tamanho binário. O TensorFlow Lite também suporta aceleração de hardware com a API Android Neural Networks. Os modelos TensorFlow Lite são pequenos o suficiente para rodar em dispositivos móveis e podem atender ao caso de uso offline.

A ideia básica do TensorFlow Lite é que você treine um modelo TensorFlow completo e converta-o no formato do modelo TensorFlow Lite. Então você pode usar o arquivo convertido em seu aplicativo móvel no Android ou iOS.

Como alternativa, você pode usar um dos modelos TensorFlow Lite pré-treinado para classificação de imagens ou respostas inteligentes. Respostas inteligentes são mensagens contextualmente relevantes que podem ser oferecidas como opções de resposta; Isso basicamente fornece a mesma funcionalidade de previsão de resposta encontrada nos clientes do Gmail do Google.

Outra opção é treinar novamente um modelo existente do TensorFlow contra um novo conjunto de dados marcado, uma técnica importante chamada aprendizado de transferência, que reduz significativamente os tempos de treinamento. Um tutorial prático sobre esse processo é chamado TensorFlow for Poets .

Custo: Código aberto gratuito.

Plataformas: Ubuntu 14.04 ou posterior, MacOS 10.11 ou posterior, Windows 7 ou posterior; Nvidia GPU e CUDA recomendados. A maioria das nuvens suporta agora o TensorFlow com GPUs da Nvidia. O TensorFlow Lite executa modelos treinados no Android e no iOS.

Machine Learning ou Deep Learning?

Às vezes, você sabe que precisará de uma Deep Neural Network para resolver um problema específico de maneira eficaz, por exemplo, para classificar imagens, reconhecer fala ou traduzir idiomas. Outras vezes, você não sabe se é necessária, por exemplo, para prever os números de vendas do próximo mês ou detectar valores discrepantes em seus dados.

Se você precisa de uma Deep Neural Network, então Keras, MXNet com Gluon, PyTorch e TensorFlow com Keras ou Estimators são boas escolhas. Se você não tiver certeza, comece com Scikit-learn ou Spark MLlib e tente todos os algoritmos relevantes. Se obtiver resultados satisfatórios do melhor modelo ou de um conjunto de vários modelos, você poderá parar.

Se você precisar de melhores resultados, tente realizar o aprendizado de transferência em uma Deep Neural Network treinada. Se você ainda não conseguir o que precisa, tente criar e treinar uma Deep Neural Network a partir do zero. Para refinar seu modelo, experimente o ajuste do hiperparâmetro.

Não importa qual método você use para treinar um modelo, lembre-se de que o modelo é tão bom quanto os dados que você usa para treinamento. Lembre-se também de limpar esse conjunto de dados, padronizá-lo e equilibrar os tamanhos de suas aulas de treinamento.

Junte-se a nós e receba nossas melhores histórias de tecnologia. Newsletter Newsletter por e-mail