Path: blob/master/site/pt-br/lattice/tutorials/shape_constraints.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Restrições de formato com o TensorFlow Lattice
Visão geral
Este tutorial é uma visão geral das restrições e dos regularizadores fornecidos pela biblioteca do TensorFlow Lattice (TFL). Vamos usar os estimadores predefinidos do TFL em datasets sintéticos, mas observe que o tutorial inteiro também pode ser realizado com modelos construídos a partir de camadas Keras do TFL.
Antes de continuar, confira se o runtime tem todos os pacotes necessários instalados (conforme importados nas células de código abaixo).
Configuração
Instale o pacote do TF Lattice:
Importe os pacotes necessários:
Valores padrão usados neste guia:
Treinamento de dataset para classificar restaurantes
Imagine um cenário simples em que queremos determinar se os usuários clicarão ou não no resultado de pesquisa de um restaurante. A tarefa é prever a taxa de clique (CTR) a partir das características de entrada:
Nota média (
avg_rating
): característica numérica com valores no intervalo [1,5].Número de avaliações (
num_reviews
): característica numérica com valores de até 200, usada como medida de popularidade.Classificação de dólar (
dollar_rating
): característica numérica com valores de string no conjunto {"D", "DD", "DDD", "DDDD"}.
Aqui, usamos um dataset sintético onde a CTR real é obtida com a seguinte fórmula: ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 35: …{\mbox{b(dollar_̲rating)}-\mbox{… em que traduz cada dollar_rating
em um valor de linha de base:
Essa fórmula reflete padrões típicos de usuários, por exemplo, com o resto fixo, os usuários preferem restaurantes com notas de mais estrelas, e restaurantes "$$" recebem mais cliques que "$", seguidos por "$$$" e "$$$$".
Vamos conferir os plots de contorno dessa função de CTR.
Preparando os dados
Agora precisamos criar nossos datasets sintéticos. Vamos começar com a geração de um dataset simulado de restaurantes e características.
Vamos produzir os datasets de treinamento, validação e teste. Quando um restaurante é visualizado nos resultados da pesquisa, podemos registrar o engajamento do usuário (clique ou sem clique) como um ponto de amostragem.
Na prática, os usuários geralmente não navegam por todos os resultados da pesquisa. Portanto, é provável que os usuários só vejam restaurantes já considerados "bons" pelo modelo de classificação atualmente em uso. Como resultado, os restaurantes "bons" terão impressões mais frequentes e maior representação nos datasets de treinamento. Ao usar mais características, o dataset de treinamento pode ter grandes lacunas nas partes "ruins" do espaço de características.
Quando o modelo é usado para classificação, é geralmente avaliado em todos os resultados relevantes com uma distribuição mais uniforme que não é bem representada pelo dataset de treinamento. Nesse caso, um modelo flexível e complicado pode falhar devido ao overfitting dos pontos de dados mais representados e, por isso, não ter capacidade de generalização. Resolvemos esse problema com a aplicação do conhecimento de domínio para adicionar restrições de formato que orientam o modelo a fazer previsões razoáveis quando ele não consegue determinar a partir do dataset de treinamento.
Neste exemplo, o dataset de treinamento consiste na maior parte em interações de usuários com restaurantes bons e populares. O dataset de teste tem uma distribuição uniforme para simular o cenário de avaliação discutido acima. Observe que esse dataset de teste não ficará disponível em um cenário real.
Defina as input_fns usadas para treinamento e avaliação:
Fitting de árvores impulsionadas por gradientes
Vamos começar com duas características: avg_rating
e num_reviews
.
Criamos algumas funções auxiliares para o plot e cálculo das métricas de validação e teste.
Podemos ajustar as árvores de decisão impulsionadas por gradientes do TensorFlow no dataset:
Mesmo que o modelo tenha capturado o formato geral da CTR real e tenha métricas de validação decentes, ele apresenta um comportamento contraditório em várias partes do espaço de entrada: a CTR estimada diminui conforme a nota média ou o número de avaliações aumenta. Isso se deve à ausência de pontos de amostragem em áreas que não são bem cobertas pelo dataset de treinamento. O modelo simplesmente não tem como deduzir o comportamento correto usando apenas os dados.
Para resolver esse problema, aplicamos a restrição de formato para o modelo gerar valores que aumentem monotonicamente em relação à nota média e ao número de avaliações. Mais tarde, vamos ver como implementar isso no TFL.
Fitting de uma DNN
Podemos repetir os mesmos passos com um classificador de DNN. Podemos observar um padrão semelhante: não ter pontos de amostragem suficientes com um número pequeno de avaliações resulta na extrapolação sem sentido. Observe que, embora a métrica de validação seja melhor do que a solução de árvore, a métrica de teste é muito pior.
Restrições de formato
O foco do TensorFlow Lattice (TFL) é impor restrições de formato para proteger o comportamento do modelo além dos dados de treinamento. Essas restrições de formato são aplicadas às camadas Keras do TFL. Confira detalhes em nosso artigo do JMLR{/a}.
Neste tutorial, usamos estimadores predefinidos do TF para cobrir várias restrições de formato, mas todas essas etapas podem ser seguidas com modelos criados a partir de camadas Keras do TFL.
Assim como qualquer outro estimador do TensorFlow, os estimadores predefinidos do TFL usam colunas de características para definir o formato de entrada e utilizam uma input_fn de treinamento para passar os dados. O uso dos estimadores predefinidos do TFL também exige o seguinte:
uma configuração de modelo: define a arquitetura do modelo e as restrições de formato e os regularizadores por característica.
uma input_fn de análise de características: uma input_fn do TF que passa dados para a inicialização do TFL.
Para uma descrição mais completa, consulte o tutorial de estimadores predefinidos ou a documentação da API.
Monotonicidade
Primeiro, resolvemos as questões de monotonicidade ao adicionar restrições de formato de monotonicidade a ambas as características.
Para instruir o TFL a impor restrições de formato, especificamos as restrições nas configurações das características. O código a seguir mostra como podemos exigir que a saída aumente de maneira monotônica em relação a num_reviews
e a avg_rating
definindo monotonicity="increasing"
.
O uso de uma CalibratedLatticeConfig
cria um classificador predefinido que, primeiro, aplica um calibrador a cada entrada (uma função linear por partes para características numéricas) e, depois, uma camada lattice para mesclar de maneira não linear as características calibradas. Podemos usar tfl.visualization
para visualizar o modelo. Em especial, o plot a seguir mostra os dois calibradores treinados incluídos no classificador predefinido.
Com as restrições adicionadas, a CTR estimada sempre aumentará conforme a nota média ou o número de avaliações aumentar. Isso é possível ao garantir que os calibradores e o lattice sejam monotônicos.
Retornos decrescentes
Retornos decrescentes significa que o ganho mínimo com o aumento do valor de uma determinada característica diminuirá à medida que o valor aumentar. Em nosso caso, esperamos que a característica num_reviews
siga esse padrão, para configurar o calibrador de acordo com isso. Observe que podemos decompor os retornos decrescentes em duas condições suficientes:
o calibrador aumenta de maneira monotônica, e
o calibrador é côncavo.
Veja como a métrica de teste melhora ao adicionar a restrição de concavidade. O plot de previsão também se parece mais com a verdade.
Restrição de formato 2D: confiança
Uma nota de 5 estrelas para um restaurante com só uma ou duas avaliações é provavelmente uma nota não confiável (o restaurante pode não ser realmente bom), enquanto uma nota de 4 estrelas para um restaurante com centenas de avaliações é muito mais confiável (nesse caso, o restaurante provavelmente é bom). Podemos ver que o número de avaliações de um restaurante afeta o nível de confiança que temos na nota média.
Podemos aplicar as restrições de confiança do TFL para informar o modelo que um valor maior (ou menor) de uma característica indica uma maior confiança ou confiabilidade de outra característica. Isso é possível ao definir reflects_trust_in
nas configurações das características.
O plot a seguir apresenta a função lattice treinada. Devido à restrição de confiança, esperamos que valores maiores de num_reviews
calibrado forcem uma inclinação superior em relação ao avg_rating
calibrado, resultando em uma mudança significativa na saída do lattice.
Suavizando calibradores
Agora vamos observar o calibrador de avg_rating
. Embora aumente monotonicamente, as mudanças na inclinação são abruptas e difíceis de interpretar. Isso sugere que devemos considerar suavizar esse calibrador usando uma configuração de regularizador em regularizer_configs
.
Aqui aplicamos um regularizador wrinkle
para reduzir as mudanças na curvatura. Você também pode usar o regularizador laplacian
para achatar o calibrador, e o regularizador hessian
para deixá-lo mais linear.
Os calibradores foram suavizados e a CTR estimada geral corresponde melhor à verdade. Isso é refletido na métrica de teste e nos plots de contorno.
Monotonicidade parcial para calibração categórica
Até agora, usamos apenas duas das características numéricas no modelo. Vamos adicionar uma terceira característica usando uma camada de calibração categórica. Novamente, começamos com a configuração das funções helper para o plot e cálculo das métricas.
Para envolver a terceira característica, dollar_rating
, devemos lembrar que as características categóricas precisam de um tratamento ligeiramente diferente no TFL, tanto como coluna e configuração de característica. Aplicamos a restrição de monotonicidade parcial que faz com que restaurantes "DD" sejam maiores do que restaurantes "D" quando todas as outras entradas estiverem fixas. Isso é possível ao usar monotonicity
nas configurações das características.
Esse calibrador categórico mostra a preferência da saída do modelo: DD > D > DDD > DDDD, que é consistente com nossa configuração. Observe que também há uma coluna para valores ausentes. Apesar de não haver nenhuma característica ausente nos dados de treinamento e teste, o modelo oferece uma imputação para o valor ausente que pode ocorrer durante o serving de modelo downstream.
Aqui também plotamos a CTR prevista desse modelo condicionado em dollar_rating
. Note que todas as restrições exigidas são atendidas em cada uma das fatias.
Calibração da saída
Para todos os modelos do TFL que treinamos até agora, a camada lattice (indicada como "Lattice" no grafo do modelo) gera diretamente a previsão do modelo. Às vezes, não temos certeza se a saída do lattice deve ser reescalada para emitir saídas do modelo:
as características são contagens , enquanto os rótulos são contagens.
o lattice é configurado para ter poucos vértices, mas a distribuição de rótulos é relativamente complicada.
Nesses casos, podemos adicionar outro calibrador entre a saída do lattice e a saída do modelo para aumentar a flexibilidade do modelo. Aqui adicionamos uma camada de calibrador com 5 keypoints ao modelo que acabamos de criar. Também acrescentamos um regularizador para o calibrador de saída deixar a função suave.
A métrica de teste final e os plots mostram como o uso das restrições de senso comum pode ajudar o modelo a evitar comportamentos inesperados e extrapolar melhor todo o espaço de entrada.