Saltar para o conteúdo

Technical

Tem o Direito de Permanecer em Silêncio

Paulo Maia · 2 de agosto de 2021

O aviso de Miranda protege-nos da auto-incriminação.

Tem o direito de permanecer em silêncio. Tudo o que disser pode ser usado contra si.

Se responsabilizamos os modelos de Machine Learning pelas suas previsões, não deveríamos, pelo menos, conceder-lhes esse direito? Podemos esperar que os modelos de ML saibam tudo? Presumivelmente não! Além disso, seria benéfico saber quando o modelo tem dúvidas sobre o que prever.

Conceder aos modelos de ML o direito de se absterem é conhecido como reject option. E é bastante útil. Mostraremos como utilizá-lo neste artigo.

Contexto

Os algoritmos de Machine Learning e Inteligência Artificial são atualmente aplicados em praticamente todas as indústrias, integrando-se em inúmeras cadeias de valor que dependem das suas decisões. No entanto, apesar dos contínuos avanços, estes algoritmos ainda não são perfeitos e cometem vários erros em situações críticas. A causa de cada erro pode estar relacionada com diversos fatores, por exemplo:

Pontos de dados demasiado próximos de uma fronteira de decisão – Em conjuntos de dados do mundo real, as fronteiras de decisão podem ser difíceis de definir. Nesses casos, as previsões próximas da fronteira apresentam níveis baixos de confiança no modelo, o que pode levar a dados mal classificados.

Outliers – Se o ponto de dados não pertencer a nenhuma população observada no conjunto de treino, é difícil para o modelo fazer uma inferência sobre esse ponto de dados.

  • Dados em falta – Existem várias maneiras de lidar com dados em falta, quer através de imputação quer adicionando sinalizadores de "dados em falta". Em ambos os casos, estamos a fazer suposições sobre os dados que podem não ser verdadeiras, portanto, as inferências sobre esses pontos de dados devem ter um nível de confiança inferior.

Os níveis baixos de confiança podem levar a casos de má classificação, mas é realmente culpa do modelo? Quando solicitamos a um algoritmo que forneça previsões sobre um ponto de dados, obrigamo-lo a retornar uma resposta, mesmo que não saiba a resposta. Para vários casos de uso (veja alguns exemplos em "Aplicações"), é benéfico dar ao modelo a opção de permanecer em silêncio, ou seja, se o algoritmo não tiver confiança suficiente, tem a opção de rejeitar o ponto de dados, evitando cometer erros – Classificação com Reject Option.

Curso

Os Fundamentos de Machine Learning

Familiarize-se com os conceitos de Machine Learning através do nosso curso.

Saiba Mais

Aplicações

Esta abordagem é apenas aplicável quando é possível passar a decisão para outro sistema de decisão disponível (por exemplo, outro algoritmo, um especialista, exames ou testes) ou quando não há necessidade de retornar previsões para todo o conjunto de dados. Por outras palavras, aplique a Reject Option quando o custo de rejeição de uma instância pelo modelo é inferior ao custo do erro. Eis alguns exemplos de aplicações que podem beneficiar de uma abordagem de Classificação com Reject Option:

  • Sistemas de Apoio à Decisão para Diagnóstico Médico – Há poucas coisas mais arriscadas do que um diagnóstico errado, especialmente para doenças letais. Portanto, delegar esta tarefa a um algoritmo e responsabilizá-lo pela decisão é dificilmente aceite pela comunidade médica, uma vez que traz muitas questões de confiabilidade. Por esta razão, é difícil integrar algoritmos de IA nos fluxos de trabalho de rastreio de doenças. No entanto, a intenção de incluir IA na saúde é ajudar o especialista e não substituí-lo. Utilizando uma abordagem de Classificação com Reject Option, o algoritmo retorna as suas previsões nos casos em que tem elevada confiança e passa a decisão para um especialista quando os níveis de confiança são mais baixos. Desta forma, o algoritmo estará a ajudar o especialista, aliviando-o de uma carga de trabalho significativa.
  • Classificação Baseada em Imagem em Vídeos – Em algumas aplicações, como deteção de objetos, reconhecimento de ações, resumo de vídeo ou reconhecimento facial, nem todas as frames são relevantes, uma vez que a frequência de fotogramas normal dos vídeos é 30 FPS e na maioria das vezes, uma única frame de boa qualidade é suficiente para desencadear uma decisão. Nestes casos, em vez de retornar previsões frame a frame com muito ruído e incerteza, os modelos poderiam utilizar o truque de Reject Option e retornar apenas as previsões com níveis elevados de confiança.

Implementação

Agora que vimos como a Classificação com Reject Option pode ajudar-nos em casos de uso críticos, vamos explorar como a podemos integrar nas nossas implementações de modelos.

Método 0 – Otimização de Limiar

A forma mais simples e fácil de integrar Reject Option num Sistema de Apoio à Decisão é aplicar pós-processamento aos resultados do modelo, considerando o nível de confiança e o objetivo de desempenho. Por exemplo, se o desempenho aceitável é uma precisão média superior a 95%, pode otimizar o limiar de confiança para cada classe. Para o fazer, siga estes passos:

  1. Calcule as previsões para o seu conjunto de validação
  2. Para cada classe, itere através das previsões correspondentes à classe, da mais baixa para a mais elevada
  3. Considere essa previsão como o valor do seu limiar
  4. Após aplicar o limiar, calcule a métrica de interesse (neste caso, a precisão média)
  5. Uma vez que atinja uma precisão média de 95%, encontrou o limiar otimizado

Para evitar overfitting no conjunto de validação, aplique validação cruzada e calcule o limiar otimizado considerando uma das estatísticas da amostra: média, mediana ou moda.

Apesar de ser fácil de implementar, este método tem algumas limitações. Em primeiro lugar, é difícil regularizar a quantidade de dados que está a ser ignorada pelo pós-processamento. No limite, este método consegue encontrar métricas perfeitas ignorando todos os dados, portanto necessitará de mecanismos adicionais para evitar que isto ocorra na sua otimização. Em segundo lugar, uma vez que este método é aplicado após obter as previsões, o modelo não aprende como o espaço de features está relacionado com a rejeição de dados. Para ultrapassar estas limitações, apresentamos-lhe os próximos três métodos encontrados na literatura.

Método 1 – Adicionar uma Classe de Rejeição

Este método foi explorado por Sousa, Ricardo Gamelas, et al. em [1] para um problema binário. A solução implementada por eles incluiu os seguintes passos:

  1. Defina um valor (aleatório ou não) como o limiar inicial.
  2. Calcule a proporção de instâncias rejeitadas (R = número de instâncias rejeitadas / número total de instâncias no conjunto de dados) e a proporção de pontos de dados mal classificados (E = número de instâncias mal classificadas / número total de instâncias no conjunto de dados).
  3. Calcule o Ȓ, utilizando a equação Ȓ = ⍵R + E, onde ⍵ é o custo de rejeição, R é a proporção de instâncias rejeitadas, e E é a proporção de instâncias mal classificadas.
  4. Repita os passos 1, 2 e 3 para um conjunto de limiares.
  5. Selecione o limiar que minimiza Ȓ.
  6. Crie a Classe de Rejeição e re-rotule o conjunto de dados com essa classe quando as previsões estão abaixo do valor de limiar.
  7. Treine um novo modelo para o problema de 3 classes.

Uma fraqueza deste modelo é que necessita de dois conjuntos de treino diferentes, um para o primeiro modelo e um segundo para ser re-rotulado e treinar o segundo modelo. Se está a lidar com pequenas quantidades de dados, pode comprometer o desempenho do modelo ao utilizar apenas metade deles.

Método 2 – Modelos Especializados por Classe

Este método também foi apresentado por Sousa, Ricardo Gamelas, et al. em [1] para um problema binário. No entanto, tal como o método anterior, pode ser adaptado para o problema multiclasse.

A implementação desta solução integrou os seguintes passos:

  1. Defina o Custo de Rejeição para cada modelo, considerando o contexto do seu caso de uso e os custos da vida real. Por exemplo, se rejeitar uma amostra implica que um especialista a analise mais tarde, considere a duração da tarefa e o valor hora-homem.
  2. Treine o primeiro modelo para se especializar na classe 0, ou seja, maximizando a precisão para a classe 0.
  3. Treine o segundo modelo para se especializar na classe 1, ou seja, maximizando a precisão para a classe 1.
  4. Calcule as previsões para o conjunto de teste, para o modelo 1 e para o modelo 2.
  5. Para cada ponto de dados, se as previsões coincidirem, classifique a instância com a classe correspondente; caso contrário, classifique-a como "rejeitada".

Para estender este método para um problema multiclasse, deve treinar um modelo diferente para cada classe e depois combinar as previsões de todos os modelos para verificar se existe unanimidade; caso contrário, o ponto de dados é rejeitado. Isto significa que o cálculo escala com o número de classes no problema, o que o torna impraticável ao trabalhar com conjuntos de dados com uma grande quantidade de classes, como o ImageNet (1000 classes), por exemplo.

Método 3 – Regularização Através da Função de Loss

O quarto e último método foi proposto por Geifman, Yonatan, e Ran El-Yaniv em [2] com a novela arquitetura Dense Neural Network (DNN) "Selectivenet". A Selectivenet pode ser adaptada a qualquer DNN, adicionando uma tarefa extra ao modelo para seleção de dados. A tarefa de seleção é auto-supervisionada, o que significa que não existe verdade fundamental relacionada com esta tarefa, mas o seu resultado é supervisionado pela função de loss.

A função de loss tem então dois termos: um para penalizar má-classificações nos pontos de dados que não foram rejeitados pelo modelo e um segundo termo para penalizar a própria rejeição para evitar uma rejeição massiva.

Adicionalmente, os autores sugerem unir uma tarefa auxiliar que pode ser a mesma tarefa de classificação ou uma diferente, desde que não ignore nenhum ponto de dados. O objetivo desta tarefa é forçar o modelo a aprender todo o espaço de features representado pelos dados disponíveis e a aprender a relação entre o espaço de features e a rejeição. Adicionar a tarefa auxiliar implica a adição de um terceiro termo à função de loss, cujo impacto é regularizado por um parâmetro.

De todos os métodos, este parece ser o mais funcional, uma vez que é fácil de implementar, não requer uma partição extra de dados para otimizar os limiares e não causa um aumento significativo no custo computacional.

Curso

O Espectro de Machine Learning

Para conhecer mais sobre outras estratégias de aprendizagem, consulte o nosso curso.

Saiba Mais

Conclusão

Os métodos de Reject Option são úteis para aumentar a confiabilidade dos métodos de Machine Learning e para evitar gestão inadequada em situações críticas. No entanto, não são aplicáveis a todos os casos de uso. Quando um ponto de dados é rejeitado pelo modelo e não pode ser ignorado, alguém ou algo tem de o tratar, e essa opção pode não estar disponível. Mais uma vez, a chave para um sistema de IA bem-sucedido está em compreender o problema, encontrar os pontos fortes e as limitações associados a cada método possível e desenhar uma solução que se adeque ao problema e ao seu contexto.

Se está à procura de mais ideias ou se deseja discutir soluções de ponta em IA, contacte-nos em info@nilg.ai

Gostaria de discutir este tema com mais detalhe?

Marque uma reunião com Pedro Serrano

Conheça Pedro Saiba Mais

Referências

[1] – Sousa, Ricardo Gamelas, et al. "Robust classification with reject option using the self-organizing map." Neural Computing and Applications 26.7 (2015): 1603-1619.

[2] – Geifman, Yonatan, and Ran El-Yaniv. "Selectivenet: A deep neural network with an integrated reject option." International Conference on Machine Learning. PMLR, 2019.