Online Machine Learning

Lucas Oliveira
Nov 18 · 4 min read
Photo by Olga Kononenko on Unsplash

Um dos maiores desafios atualmente é desenvolver um modelo de Machine Learning(ML) que possa aprender com a inserção de novos dados e melhorar seu desempenho.

Online Machine Learning, conhecido também como Incremental Learning é uma abordagem que tem como objetivo atualizar os parâmetros do modelo com o recebimento de novos dados.

Por exemplo, considere um modelo de reconhecimento facial que precisa receber novas imagens para identificar novas pessoas. Essa tarefa precisa ser realizada sem precisar que o modelo reaprenda faces que ele já havia aprendido. Modelos de ML tradicionais precisam receber todos os dados de treino novamente cada vez que novos elementos ou classes são adicionados. Em um sistema ideal, as novas classes poderiam ser integradas no modelo existente e usar os parâmetros já treinados do algoritmo para a identificação de padrões nas novas imagens.

A acessibilidade da Inteligência Artificial permite que as pessoas se tornem uma chave fundamental no melhoramento do algoritmo. Enquanto o modelo realiza as predições, poderíamos sugerir aprimoramento no formato de feedback, com novas entradas e correções de dados.

Um algoritmo com capacidade de aprendizagem incremental deve responder à essas solicitações:

  1. Habilidade de aprender com poucos dados;
  2. Manter uma boa performance para classificar novas e antigas classes;
  3. Coerente exigência de parâmetros e memória;
  4. Aprender em tempo real.

Imagine uma aplicação em que cada usuário participante entre com uma pequena porção de dados para o treinamento do modelo, essas pequenas porções juntas formam um dataset completo de treino. Entretanto, o algoritmo precisa ser capaz de manipular cada pequena fração e atualizar seus parâmetros. Da mesma forma, cada nova entrada de dado não pode alterar drasticamente as antigas classes.

O modelo não pode ter um número muito grande de parâmetros, pois isso solicita maior recurso computacional e deixa lento qualquer interação com algoritmo. Essa questão é discutida mais detalhadamente nesse artigo

Quanto mais rápido aprender melhor. Para criar uma IA que receba novos dados e aprenda o tempo todo, alguns desenvolvedores irão agendar o treinamento de novos dados, digamos, uma vez por dia e automaticamente realizam o deploy do modelo treinado.

Essa é uma boa abordagem, mas mesmo que você agende seu modelo para ser treinado todo dia, você ainda está para trás. Seu modelo nunca está totalmente atualizado com os eventos atuais, porque é treinado em dados antigos.

Usando scikit-learn é possível criar uma aplicação para online ML, mas não de uma forma trivial. Para um caso linear, você pode usar SGD Classifier com Hinge loss e L2 regularization, com isso, você vai possuir uma aproximação de um modelo que pode aprender de forma incremental usando a função partial_fit().

from sklearn.linear_model import SGDClassifierX = np.array([[0,0], [0,1]])
y = np.array([[0], [1]])
clf = SGDClassifier(loss="hinge", penalty="l2")
clf.fit(X, y)
X_new = np.array([[1,0], [1,1]])
y_new = np.array([[1], [0]])
clf.partial_fit(X_new,y_new)

Se você trabalha com informações instantâneas, talvez não seja uma boa ideia. Como por exemplo um portal de notícias, em que no momento que o usuário entrar no site, notícias personalizadas apareceram. Porém, durante o dia surgem diversas outras notícias, e o algoritmo deve estar preparado para classificar cada nova notícia em tempo real e encaminhar para o grupo de usuários que teriam maior chance de ler.

Existem também o Vowpal Wabbit, uma poderosa biblioteca que permiti usar técnicas como learning2search, active, e interactive learning. Vowpal Wabbit permiti criar o estado da arte de algoritmos para a implementação de um aprendizado interativo.

Novas técnicas de Deep Learning vêm sendo desenvolvidas e é notável o ganho de performance e aplicabilidade. Entretanto, ainda assim, esses modelos sofrem de catastrophic forgeting, uma perda na performance geral da arquitetura quando é exposta a novas classes adicionadas de forma incremental.

É essa questão que o artigo End-to-End Incremental Learning desenvolve e fornece soluções para tratar esse problema. A solução apresentada consiste em alimentar o modelo com novos dados e apenas uma pequena porção de amostras correspondente as classes antigas.

A abordagem técnica do modelo criado no artigo requer usar um modelo de Deep Learning treinado com uma cross-distillation, por exemplo, cross-entropy. Para ajudar nosso modelo a reter o conhecimento adquirido das classes antigas, é usado uma memória representativa que armazena e gerencia as amostras mais importante das classes antigas. O mais interessante da implementação dessa técnica é que pode ser realizado em qualquer arquitetura de Deep Learning.

Online ML não é apenas um algoritmo isolado, ele requer diversos passos para uma implementação funcional capaz de aprender com novas entradas de dados.

Online ML traz à tona o conceito de modelos modulares, que são capazes de moldar seu aprendizado com o tempo.

Referências

Artigo — End-to-End Incremental Learning

Data Hackers

Blog oficial da comunidade Data Hackers

Lucas Oliveira

Written by

Books and Beer. LinkedIn: shorturl.at/deHLV

Data Hackers

Blog oficial da comunidade Data Hackers

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade