Por que o uso de pseudo-rotulagem não afeta trivialmente os resultados?


19

Eu estive pesquisando métodos de aprendizado semi-supervisionados e me deparei com o conceito de "pseudo-rotulagem".

Pelo que entendi, com a pseudo-rotulagem, você tem um conjunto de dados rotulados e um conjunto de dados não rotulados. Primeiro você treina um modelo apenas nos dados rotulados. Em seguida, você usa esses dados iniciais para classificar (anexar rótulos provisórios) os dados não rotulados. Em seguida, você alimenta os dados rotulados e não rotulados de volta ao treinamento do modelo, (re) ajustando-se aos rótulos conhecidos e aos previstos. (Itere esse processo, rotule novamente o modelo atualizado.)

Os benefícios reivindicados são que você pode usar as informações sobre a estrutura dos dados não rotulados para melhorar o modelo. Uma variação da figura a seguir é frequentemente mostrada, "demonstrando" que o processo pode estabelecer um limite de decisão mais complexo com base em onde estão os dados (não identificados).

Limite de decisão em métodos semi-supervisionados

Imagem do Wikimedia Commons por Techerin CC BY-SA 3.0

No entanto, não estou comprando exatamente essa explicação simplista. Ingenuamente, se o resultado original do treinamento somente com rótulo fosse o limite superior da decisão, os pseudo-rótulos seriam atribuídos com base nesse limite de decisão. O que quer dizer que a mão esquerda da curva superior seria branca pseudo-rotulada e a mão direita da curva inferior seria preta pseudo-rotulada. Você não obteria o bom limite de decisão curva após a reciclagem, pois os novos pseudo-rótulos simplesmente reforçariam o limite de decisão atual.

Ou, dito de outra forma, o atual limite de decisão somente rotulado teria precisão de previsão perfeita para os dados não rotulados (como é o que costumávamos fazer). Não há força motriz (nenhum gradiente) que nos faça mudar a localização desse limite de decisão simplesmente adicionando dados pseudo-rotulados.

Estou correto ao pensar que falta a explicação incorporada no diagrama? Ou há algo que estou perdendo? Caso contrário, qual é o benefício dos pseudo-rótulos, dado que o limite da decisão de pré-reciclagem tem precisão perfeita sobre os pseudo-rótulos?

Respostas:


16

A pseudo-rotulagem não funciona no problema de brinquedo fornecido

Oliver et al. (2018) avaliaram diferentes algoritmos de aprendizado semi-supervisionado. A primeira figura mostra como a pseudo-rotulagem (e outros métodos) se comportam no mesmo problema de brinquedo da sua pergunta (chamado de conjunto de dados 'duas luas'):

insira a descrição da imagem aqui

O gráfico mostra os pontos de dados rotulados e não rotulados e os limites de decisão obtidos após o treinamento de uma rede neural usando diferentes métodos de aprendizado semi-supervisionados. Como você suspeitava, a pseudo-rotulagem não funciona bem nessa situação. Eles dizem que a pseudo-rotulagem "é uma heurística simples que é amplamente utilizada na prática, provavelmente devido à sua simplicidade e generalidade". Mas: "Embora intuitivo, ele pode produzir resultados incorretos quando a função de previsão produz alvos inúteis para [os dados não marcados], conforme mostrado na fig. 1".

Por que e quando a pseudo-rotulagem funciona?

A pseudo-rotulagem foi introduzida por Lee (2013), para que você possa encontrar mais detalhes lá.

A suposição de cluster

A justificativa teórica que Lee deu para a pseudo-rotulagem é que é semelhante à regularização da entropia. A regularização de entropia (Grandvalet e Bengio 2005) é outra técnica de aprendizado semi-supervisionada, que incentiva o classificador a fazer previsões confiáveis ​​sobre dados não rotulados. Por exemplo, preferimos que um ponto sem rótulo receba uma alta probabilidade de pertencer a uma classe específica, em vez de probabilidades difusas espalhadas por várias classes. O objetivo é aproveitar a suposição de que os dados são agrupados de acordo com a classe (chamada de "suposição de cluster" no aprendizado semi-supervisionado). Portanto, pontos próximos têm a mesma classe e pontos em diferentes classes são mais amplamente separados, de modo que os verdadeiros limites de decisão percorrem regiões de baixa densidade do espaço de entrada.

Por que a pseudo-rotulagem pode falhar

Dado o exposto, parece razoável supor que a suposição de cluster é uma condição necessária para que a pseudo-rotulagem funcione. Mas, claramente, não é suficiente, pois o problema das duas luas acima satisfaz a suposição do cluster, mas a pseudo-rotulagem não funciona. Nesse caso, suspeito que o problema é que existem muito poucos pontos rotulados e a estrutura de cluster adequada não pode ser identificada a partir desses pontos. Então, como Oliver et al. descreva (e como você aponta na sua pergunta), os pseudo-rótulos resultantes guiam o classificador em direção ao limite de decisão errado. Talvez funcione, se houver mais dados rotulados. Por exemplo, compare isso com o caso MNIST descrito abaixo, onde a pseudo-rotulagem funciona.

Onde trabalha

Lee (2013) mostrou que a pseudo-rotulagem pode ajudar no conjunto de dados MNIST (com 100-3000 exemplos rotulados). Na fig. No primeiro artigo, você pode ver que uma rede neural treinada em 600 exemplos rotulados (sem nenhum aprendizado semi-supervisionado) pode recuperar a estrutura de cluster entre as classes. Parece que a pseudo-rotulagem ajuda a refinar a estrutura. Observe que isso é diferente do exemplo das duas luas, onde vários pontos rotulados não foram suficientes para aprender os agrupamentos adequados.

O artigo também menciona que os resultados eram instáveis ​​com apenas 100 exemplos rotulados. Isso novamente confirma a idéia de que a pseudo-rotulagem é sensível às previsões iniciais e que boas previsões iniciais exigem um número suficiente de pontos rotulados.

Lee também mostrou que o pré-treinamento não supervisionado usando auto-codificadores denoising ajuda ainda mais, mas isso parece ser uma maneira separada de explorar a estrutura nos dados não rotulados; infelizmente, não houve comparação apenas com o pré-treinamento não supervisionado (sem pseudo-rotulagem).

Grandvalet e Bengio (2005) relataram que a pseudo-rotulagem supera a aprendizagem supervisionada nos conjuntos de dados CIFAR-10 e SVHN (com 4000 e 1000 exemplos rotulados, respectivamente). Como acima, esses dados são muito mais marcados que os 6 pontos marcados no problema das duas luas.

Referências

  • Grandvalet e Bengio (2005) . Aprendizagem semi-supervisionada por minimização de entropia.

  • Lee (2013) . Pseudo-Label: O método de aprendizado semi-supervisionado simples e eficiente para redes neurais profundas.

  • Oliver et al. (2018) . Avaliação realista de algoritmos de aprendizagem semi-supervisionados.


5

O que você pode estar ignorando sobre o funcionamento do auto-treinamento é o seguinte:

  1. É iterativo, não de uma só vez.

  2. Você usa um classificador que retorna valores probabilísticos. A cada iteração, você adiciona apenas psuedo-labels para os casos com os quais seu algoritmo está mais certo.

No seu exemplo, talvez a primeira iteração seja confiante o suficiente para rotular um ou dois pontos muito perto de cada um dos pontos rotulados. Na próxima iteração, o limite girará levemente para acomodar esses quatro a seis pontos identificados e, se não for linear, também poderá começar a dobrar levemente. Repetir.

Não é garantido que funcione. Depende do seu classificador de base, do seu algoritmo (quão certo você precisa estar para atribuir um pseudo-rótulo, etc), dos seus dados e assim por diante.

Existem também outros algoritmos que são mais poderosos se você puder usá-los. O que acredito que você está descrevendo é o autotreinamento, que é fácil de codificar, mas você está usando um único classificador que observa as mesmas informações repetidamente. O co-treinamento usa vários classificadores, cada um olhando para informações diferentes para cada ponto. (Isso é um tanto análogo às florestas aleatórias.) Existem também outras técnicas semi-supervisionadas - como as que se agrupam explicitamente - embora não haja "isso sempre funcione e esse seja o vencedor".

Em resposta ao comentário: eu não sou especialista neste campo. Consideramos isso muito aplicável ao que normalmente fazemos com os clientes, por isso estou aprendendo e não tenho todas as respostas.

O principal sucesso quando busco visões gerais de aprendizado semi-supervisionado é: Pesquisa Semi-Supervisionada de Literatura para Aprendizado , de 2008. Isso foi há muito tempo, em termos de computador, mas fala sobre as coisas que mencionei aqui.

Ouvi dizer que um classificador pode classificar os pontos não rotulados mais distantes dos nós rotulados com mais certeza. Por outro lado, nossas intuições podem nos enganar. Por exemplo, vamos considerar o gráfico que você obteve da Wikipedia com os nós preto, branco e cinza.

Primeiro, isso é em 2D e os problemas mais realistas serão em dimensões mais altas, onde nossa intuição geralmente nos engana. O espaço de alta dimensão age de maneira diferente de várias maneiras - algumas negativas e outras realmente úteis.

Segundo, podemos supor que, na primeira iteração, os dois pontos cinzas mais à direita e mais baixos seriam rotulados como pretos, pois o ponto rotulado em preto está mais próximo deles do que o ponto rotulado em branco. Mas se isso acontecesse nos dois lados, o limite de decisão vertical ainda se inclinaria e não seria mais vertical. Pelo menos na minha imaginação, se fosse uma linha reta, desceria o espaço vazio diagonal entre os dois pontos originalmente rotulados. Ainda dividiria os dois crescentes incorretamente, mas estaria mais alinhado aos dados agora. A iteração contínua - particularmente com um limite de decisão não linear - pode gerar uma resposta melhor do que prevemos.

Terceiro, não tenho certeza de que uma vez rotulado, sempre rotulado é como deve realmente funcionar. Dependendo de como você faz e como o algoritmo funciona, você pode primeiro inclinar o limite enquanto o dobra (assumindo que não seja linear) e, em seguida, algumas das partes classificadas incorretamente dos crescentes podem mudar seus rótulos.

Meu instinto é que esses três pontos, combinados com dados apropriados (provavelmente de maior dimensão), e classificadores apropriados, podem se sair melhor do que um alinhamento supervisionado com um número muito pequeno de amostras de treinamento (rotuladas). Não há garantias, e em meus experimentos que encontrei - culpo os conjuntos de dados que são muito simples - de que a semi-supervisão pode melhorar apenas marginalmente sobre a supervisionada e, às vezes, falhar mal. Então, novamente, estou jogando com dois algoritmos que criei que podem ou não ser realmente bons.


2
Você poderia expandir em que tipos de classificadores / situações ele funcionaria? Meu entendimento da maioria dos classificadores que trabalham com o tipo de exemplo de dados mostrado seria que são pontos distantes do limite de decisão (versus próximos aos pontos conhecidos) que obteriam alta confiança; portanto, essas caudas distais seriam classificadas erroneamente na exemplo. (Além disso, as referências / leitura adicional que você poderia apontar para a respeito efetivamente usando pseudolabeling e técnicas relacionadas seria apreciada.)
RM

@RM Editado. Como é isso?
Wayne

1

Aviso, não sou especialista neste procedimento. Meu fracasso em produzir bons resultados não prova que a técnica não pode funcionar. Além disso, sua imagem possui a descrição geral do aprendizado "semi-supervisionado", que é uma área ampla com várias técnicas.

Concordo com a sua intuição, não estou vendo como uma técnica como essa poderia funcionar imediatamente. Em outras palavras, acho que você precisaria de muito esforço para fazê-lo funcionar bem em um aplicativo específico, e esse esforço não seria necessariamente útil em outros aplicativos.

Tentei duas instâncias diferentes, uma com um conjunto de dados em forma de banana, como o da imagem de exemplo, e outro mais fácil, com dois clusters distribuídos normais simples. Nos dois casos, não consegui melhorar o classificador inicial.

Como uma pequena tentativa de incentivar as coisas, adicionei ruído a todas as probabilidades previstas, na esperança de que isso causasse melhores resultados.

O primeiro exemplo, recriei a imagem acima o mais fielmente possível. Eu não acho que a rotulagem de psuedo possa ajudar em tudo aqui.

Examlpe one, dados em forma de banana

O segundo exemplo é muito mais fácil, mas mesmo aqui ele falha no aprimoramento do classificador inicial. Eu escolhi especificamente o ponto marcado do centro da classe esquerda e o lado direito da classe certa, esperando que mudasse na direção correta, sem essa sorte.

Exemplo dois, dados 2D normalmente distribuídos] =

Código para o exemplo 1 (o exemplo 2 é semelhante o suficiente para não duplicar aqui):

import numpy as np
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import seaborn

np.random.seed(2018-10-1)
N = 1000

_x = np.linspace(0, np.pi, num=N)
x0 = np.array([_x, np.sin(_x)]).T
x1 = -1 * x0 + [np.pi / 2, 0]

scale = 0.15
x0 += np.random.normal(scale=scale, size=(N, 2))
x1 += np.random.normal(scale=scale, size=(N, 2))

X = np.vstack([x0, x1])

proto_0 = np.array([[0], [0]]).T # the single "labeled" 0
proto_1 = np.array([[np.pi / 2], [0]]).T # the single "labeled" 1

model = RandomForestClassifier()
model.fit(np.vstack([proto_0, proto_1]), np.array([0, 1]))
for itercount in range(100):
    labels = model.predict_proba(X)[:, 0]
    labels += (np.random.random(labels.size) - 0.5) / 10 # add some noise
    labels = labels > 0.5
    model = RandomForestClassifier()
    model.fit(X, labels)

f, axs = plt.subplots(1, 2, squeeze=True, figsize=(10, 5))

axs[0].plot(x0[:, 0], x0[:, 1], '.', alpha=0.25, label='unlabeled x0')
axs[0].plot(proto_0[:, 0], proto_0[:, 1], 'o', color='royalblue', markersize=10, label='labeled x0')
axs[0].plot(x1[:, 0], x1[:, 1], '.', alpha=0.25, label='unlabeled x1')
axs[0].plot(proto_1[:, 0], proto_1[:, 1], 'o', color='coral', markersize=10, label='labeled x1')
axs[0].legend()

axs[1].plot(X[~labels, 0], X[~labels, 1], '.', alpha=0.25, label='predicted class 0')
axs[1].plot(X[labels, 0], X[labels, 1], '.', alpha=0.25, label='predicted class 1')
axs[1].plot([np.pi / 4] * 2, [-1.5, 1.5], 'k--', label='halfway between labeled data')
axs[1].legend()
plt.show()

1

Aqui está o meu palpite (também não sei muito sobre esse tópico, só queria acrescentar meus dois centavos a essa discussão).

Eu acho que você está certo, não faz sentido treinar um modelo clássico e usar suas previsões como dados, porque, como você diz, não há incentivo para o otimizador fazer melhor. Eu acho que os algoritmos de inicialização aleatória têm mais chances de encontrar o mesmo ótimo, porque eles "têm mais certeza" de que o ótimo encontrado anteriormente está correto, devido ao conjunto maior de dados, mas isso é irrelevante.

Dito isto, a primeira resposta que você recebeu tem um ponto - esse exemplo na Wikipedia fala sobre clustering, e acho que isso faz toda a diferença. Quando você obtém dados não rotulados, você basicamente tem vários pontos não rotulados em algum "espaço de recurso latente" compartilhado, como os outros rotulados. Você pode realmente fazer melhor do que um algoritmo de classificação treinado nos dados rotulados, se puder descobrir o fato de que os pontos não marcados podem ser separados e depois classificados com base em qual classe os pontos rotulados pertencem, neste espaço de recurso latente.

O que quero dizer é que você precisa fazer isso:

labelleddataclusteringclassification

... e repita com dados não rotulados. Aqui, os limites do cluster aprendido não serão os mesmos, porque o cluster não se importa com rótulos de classe, tudo o que conta é transformar o espaço de recurso. O armazenamento em cluster gera um espaço de recurso latente, no qual o limite de classificação é aprendido, e isso depende apenas dos dados rotulados.

Algoritmos que não realizam nenhum tipo de agrupamento, acredito, não poderão alterar seu ótimo com base no conjunto de dados não rotulados.

A propósito, a imagem que você vinculou faz um bom trabalho, penso em explicar o que está acontecendo aqui; um limite de decisão é aprendido com base apenas no algoritmo de agrupamento. Você não tem idéia de quais são as classes corretas aqui - pode ser que sejam todas aleatórias - não sabemos. Tudo o que podemos agora é que parece haver alguma estrutura no espaço de recursos e parece haver algum mapeamento do espaço de recursos para os rótulos das classes.

Realmente não tenho referências, mas neste post do Reddit , pelo que entendi, há uma discussão sobre um GAN realizando aprendizado semi-supervisionado. É meu palpite que ele implica implicitamente um agrupamento, seguido de classificação.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.