Perché l'uso della pseudo-etichettatura influisce in modo non banale sui risultati?


19

Ho studiato metodi di apprendimento semi-supervisionati e mi sono imbattuto nel concetto di "pseudo-etichettatura".

A quanto ho capito, con la pseudo-etichettatura hai una serie di dati etichettati e una serie di dati senza etichetta. Per prima cosa si addestra un modello solo sui dati etichettati. Quindi utilizzare tali dati iniziali per classificare (allegare etichette provvisorie a) i dati senza etichetta. In seguito, inserisci i dati etichettati e non etichettati nella formazione del tuo modello, adattandoti alle etichette note e alle etichette previste. (Iterate questo processo, ri-etichettando con il modello aggiornato.)

I vantaggi dichiarati sono che è possibile utilizzare le informazioni sulla struttura dei dati senza etichetta per migliorare il modello. Viene spesso mostrata una variazione della figura seguente, "dimostrando" che il processo può prendere un limite decisionale più complesso in base a dove si trovano i dati (senza etichetta).

Confine decisionale in metodi semi supervisionati

Immagine da Wikimedia Commons di Techerin CC BY-SA 3.0

Tuttavia, non sto ancora acquistando quella spiegazione semplicistica. Ingenuamente, se il risultato della formazione solo etichettato originale fosse il limite superiore della decisione, le pseudo-etichette sarebbero assegnate in base a quel limite decisionale. Vale a dire che la mano sinistra della curva superiore sarebbe pseudo-etichettata bianca e la mano destra della curva inferiore sarebbe pseudo-etichettata nera. Dopo la riqualificazione non otterresti il ​​bel confine di decisione curvo, poiché le nuove pseudo-etichette rafforzerebbero semplicemente il confine di decisione corrente.

O, per dirla in altro modo, l'attuale limite di sola etichettatura avrebbe una perfetta precisione di previsione per i dati senza etichetta (poiché è quello che abbiamo usato per crearli). Non esiste una forza motrice (nessun gradiente) che ci indurrebbe a cambiare la posizione di quel confine di decisione semplicemente aggiungendo i dati pseudo-etichettati.

Sono corretto nel pensare che manchi la spiegazione rappresentata dal diagramma? O c'è qualcosa che mi manca? In caso contrario, qual è il vantaggio delle pseudoetichettature, dato che il limite decisionale pre-riqualificazione ha una perfetta precisione rispetto alle pseudoetichettature?

Risposte:


16

La pseudoetichettatura non funziona sul problema del giocattolo dato

Oliver et al. (2018) hanno valutato diversi algoritmi di apprendimento semi-supervisionato. La loro prima figura mostra come pseudo-etichettatura (e altri metodi) si comportano sullo stesso problema del giocattolo come nella tua domanda (chiamato il set di dati "due lune"):

inserisci qui la descrizione dell'immagine

La trama mostra i punti dati etichettati e senza etichetta e i confini delle decisioni ottenuti dopo l'allenamento di una rete neurale usando diversi metodi di apprendimento semi-supervisionati. Come sospettavi, la pseudoetichettatura non funziona bene in questa situazione. Dicono che la pseudo-etichettatura "è una semplice euristica ampiamente utilizzata nella pratica, probabilmente a causa della sua semplicità e generalità". Ma: "Sebbene intuitivo, può comunque produrre risultati errati quando la funzione di previsione produce obiettivi inutili per [i dati senza etichetta], come mostrato nella figura 1."

Perché e quando funziona la pseudoetichettatura?

La pseudo-etichettatura è stata introdotta da Lee (2013), quindi puoi trovare maggiori dettagli lì.

L'assunzione del cluster

La giustificazione teorica che Lee ha dato per la pseudoetichettatura è che è simile alla regolarizzazione dell'entropia. La regolarizzazione dell'entropia (Grandvalet e Bengio 2005) è un'altra tecnica di apprendimento semi-supervisionata, che incoraggia il classificatore a fare previsioni sicure su dati senza etichetta. Ad esempio, preferiremmo assegnare a un punto senza etichetta un'alta probabilità di appartenere a una determinata classe, piuttosto che probabilità diffuse distribuite su più classi. Lo scopo è di sfruttare il presupposto che i dati siano raggruppati in base alla classe (chiamato "presupposto del cluster" nell'apprendimento semi-supervisionato). Pertanto, i punti vicini hanno la stessa classe e i punti in classi diverse sono più ampiamente separati, in modo tale che i veri limiti di decisione attraversino regioni a bassa densità dello spazio di input.

Perché la pseudoetichettatura potrebbe non riuscire

Considerato quanto sopra, sembrerebbe ragionevole supporre che l'assunzione del cluster sia una condizione necessaria per il funzionamento della pseudo-etichettatura. Ma chiaramente non è sufficiente, poiché il problema delle due lune sopra soddisfa il presupposto del cluster, ma la pseudoetichettatura non funziona. In questo caso, sospetto che il problema sia che ci sono pochissimi punti etichettati e la struttura del cluster corretta non può essere identificata da questi punti. Quindi, come Oliver et al. descrivi (e come fai notare nella tua domanda), le pseudo-etichette risultanti guidano il classificatore verso il limite di decisione sbagliato. Forse funzionerebbe con dati più etichettati. Ad esempio, contrastalo con il caso MNIST descritto di seguito, in cui la pseudoetichettatura funziona.

Dove funziona

Lee (2013) ha dimostrato che la pseudoetichettatura può aiutare nel set di dati MNIST (con 100-3000 esempi etichettati). In fig. 1 di quel documento, puoi vedere che una rete neurale addestrata su 600 esempi etichettati (senza alcun apprendimento semi-supervisionato) può già recuperare la struttura del cluster tra le classi. Sembra che la pseudo-etichettatura aiuti quindi a perfezionare la struttura. Si noti che questo è diverso dall'esempio delle due lune, in cui diversi punti etichettati non erano sufficienti per apprendere i cluster corretti.

Il documento menziona anche che i risultati erano instabili con solo 100 esempi etichettati. Ciò supporta ancora una volta l'idea che la pseudoetichettatura sia sensibile alle previsioni iniziali e che buone previsioni iniziali richiedano un numero sufficiente di punti etichettati.

Lee ha anche dimostrato che il pre-training senza supervisione mediante il denoising degli autoencoder aiuta ulteriormente, ma questo sembra essere un modo separato di sfruttare la struttura nei dati senza etichetta; sfortunatamente, non vi è stato alcun confronto con la pre-formazione incustodita da sola (senza pseudo-etichettatura).

Grandvalet e Bengio (2005) hanno riferito che i battiti pseudo-etichettati hanno supervisionato l'apprendimento sui set di dati CIFAR-10 e SVHN (rispettivamente con 4000 e 1000 esempi etichettati). Come sopra, si tratta di dati molto più etichettati rispetto ai 6 punti etichettati nel problema delle due lune.

Riferimenti

  • Grandvalet e Bengio (2005) . Apprendimento semi-supervisionato mediante minimizzazione dell'entropia.

  • Lee (2013) . Pseudo-etichetta: il metodo di apprendimento semi-supervisionato semplice ed efficiente per reti neurali profonde.

  • Oliver et al. (2018) . Valutazione realistica di algoritmi di apprendimento semi-supervisionati.


5

Quello che potresti trascurare in come funziona l'auto-allenamento è che:

  1. È iterativo, non one-shot.

  2. Si utilizza un classificatore che restituisce valori probabilistici. Ad ogni iterazione, aggiungi solo psuedo-label per i casi di cui il tuo algoritmo è più sicuro.

Nel tuo esempio, forse la prima iterazione è abbastanza sicura da etichettare uno o due punti molto vicino a ciascuno dei punti etichettati. Nella successiva iterazione il limite ruoterà leggermente per adattarsi a questi 4-6 punti etichettati, e se è non lineare può anche iniziare a piegarsi leggermente. Ripetere.

Non è garantito che funzioni. Dipende dal tuo classificatore di base, dal tuo algoritmo (quanto devi essere sicuro per assegnare una pseudo-etichetta, ecc.), Dai tuoi dati e così via.

Ci sono anche altri algoritmi che sono più potenti se puoi usarli. Quello che credo tu stia descrivendo è l'auto-allenamento, che è facile da codificare, ma stai usando un singolo classificatore che guarda ripetutamente le stesse informazioni. Il co-training utilizza più classificatori che guardano ciascuno informazioni diverse per ciascun punto. (Questo è in qualche modo analogo alle foreste casuali.) Ci sono anche altre tecniche semi-supervisionate - come quelle che si raggruppano esplicitamente - anche se non ci sono "tutto questo funziona sempre e questo è il vincitore".

IN RISPOSTA al commento: non sono un esperto in questo campo. Lo consideriamo molto applicabile a ciò che facciamo normalmente con i clienti, quindi sto imparando e non ho tutte le risposte.

Il massimo successo quando cerco panoramiche di apprendimento semi-supervisionate è: Sondaggio di letteratura sull'apprendimento semi-supervisionato , del 2008. Questo è secoli fa, per quanto riguarda il computer, ma parla delle cose che ho menzionato qui.

Ti sento che un classificatore potrebbe valutare con assoluta certezza i punti senza etichetta più lontani dai nodi etichettati. D'altra parte, le nostre intuizioni potrebbero ingannarci. Ad esempio, consideriamo la grafica ottenuta da Wikipedia con i nodi nero, bianco e grigio.

Innanzitutto, questo è in 2D e la maggior parte dei problemi realistici si troveranno in dimensioni più elevate, dove la nostra intuizione spesso ci fuorvia. Lo spazio ad alta dimensione agisce in modo diverso in molti modi: alcuni negativi e altri effettivamente utili.

In secondo luogo, potremmo indovinare che nella prima iterazione i due punti grigi più a destra e più in basso sarebbero etichettati come neri, poiché il punto con etichetta nera è più vicino a loro rispetto al punto con etichetta bianca. Ma se ciò accadesse da entrambi i lati, il limite decisionale verticale si inclinerebbe comunque e non sarà più verticale. Almeno nella mia immaginazione, se fosse una linea retta, scenderebbe nello spazio vuoto diagonale tra i due punti originariamente etichettati. Dividerebbe comunque in modo errato le due mezzalune, ma ora sarebbe più allineato ai dati. L'iterazione continua, in particolare con un limite di decisione non lineare, potrebbe fornire una risposta migliore di quanto prevediamo.

Terzo, non sono sicuro che una volta etichettato, sempre etichettato sia come dovrebbe effettivamente funzionare. A seconda di come lo fai e di come funziona l'algoritmo, potresti finire prima inclinando il confine mentre lo pieghi (assumendo non lineare), quindi alcune delle parti erroneamente qualificate delle mezzalune potrebbero spostare le loro etichette.

Il mio istinto è che quei tre punti, combinati con dati appropriati (probabilmente di dimensione più elevata) e classificatori appropriati, possono fare meglio di un semplice supervisionato con un numero molto piccolo di campioni di addestramento (etichettati). Nessuna garanzia, e nei miei esperimenti ho scoperto - lo biasimo su insiemi di dati che sono troppo semplici - che il semi-supervisionato può migliorare solo marginalmente rispetto al supervisionato e talvolta può fallire gravemente. Poi di nuovo, sto giocando con due algoritmi che ho creato che potrebbero essere o non essere effettivamente buoni.


2
Potresti espandere su quali tipi di classificatori / situazioni su cui funzionerebbe? La mia comprensione della maggior parte dei classificatori che lavorano sul tipo di dati di esempio mostrati sarebbe che sono i punti lontani dal limite di decisione (rispetto ai punti noti) che otterrebbero un'alta confidenza, quindi quelle code distali sarebbero classificate erroneamente confuse nella esempio. (Inoltre, qualsiasi riferimento / ulteriore lettura che potresti indicare sull'uso efficace dello pseudolabel e delle tecniche correlate sarebbe apprezzato.)
RM

@RM Modificato. Com'è quello?
Wayne,

1

Attenzione, non sono un esperto in questa procedura. La mia incapacità di ottenere buoni risultati non è la prova che la tecnica non può funzionare. Inoltre, la tua immagine ha una descrizione generale dell'apprendimento "semi-supervisionato", che è una vasta area con una varietà di tecniche.

Sono d'accordo con la tua intuizione, non vedo come una tecnica come questa possa funzionare fuori dagli schemi. In altre parole, penso che avresti bisogno di molti sforzi per farlo funzionare bene per un'applicazione specifica, e tale sforzo non sarebbe necessariamente utile in altre applicazioni.

Ho provato due diversi casi, uno con un set di dati a forma di banana come quello nell'immagine di esempio e un altro set di dati più semplice con due semplici cluster distribuiti normali. In entrambi i casi non ho potuto migliorare il classificatore iniziale.

Come un piccolo tentativo di incoraggiare le cose, ho aggiunto rumore a tutte le probabilità previste con la speranza che ciò potesse causare risultati migliori.

Nel primo esempio ho ricreato l'immagine sopra nel modo più fedele possibile. Non credo che l'etichettatura psuedo sarà in grado di aiutare qui.

Esaminare uno, dati a forma di banana

Il secondo esempio è molto più semplice, ma anche qui non riesce a migliorare il classificatore iniziale. Ho scelto specificamente un punto etichettato dal centro della classe sinistra, e il lato destro della classe destra sperando che si spostasse nella direzione corretta, senza una tale fortuna.

Esempio due, dati 2D normalmente distribuiti] =

Codice per esempio 1 (l'esempio 2 è abbastanza simile che non duplicherò qui):

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

Ecco la mia ipotesi (non so molto su questo argomento, volevo solo aggiungere i miei due centesimi a questa discussione).

Penso che tu abbia ragione, non ha senso addestrare un modello classico e usare le sue previsioni come dati, perché come dici tu, non c'è incentivo all'ottimizzatore a fare qualcosa di meglio. Immagino che gli algoritmi di avvio randomizzati hanno maggiori probabilità di trovare lo stesso ottimale perché sarebbero "più sicuri" che l'ottimale precedentemente trovato sia corretto, a causa del set di dati più ampio, ma questo è irrilevante.

Detto questo, la prima risposta che hai ricevuto ha un punto: quell'esempio su Wikipedia parla di clustering e penso che questo faccia la differenza. Quando hai dati senza etichetta, essenzialmente hai un sacco di punti senza etichetta che giacciono su alcuni "spazi di funzionalità latenti" condivisi come gli altri etichettati. Puoi davvero fare di meglio di un algoritmo di classificazione addestrato sui dati etichettati, se puoi scoprire il fatto che i punti senza etichetta possono essere separati e quindi classificati in base alla classe a cui appartengono i punti etichettati, in questo spazio di funzionalità latente.

Quello che voglio dire è che devi fare questo:

lun'Belleddun'tun'cluSteriongclun'SSiofiocun'tioon

... e poi ripeti con i dati senza etichetta. Qui, i confini del cluster appreso non saranno gli stessi, perché il clustering non si occupa delle etichette di classe, tutto ciò che rappresenta è la trasformazione dello spazio delle funzionalità. Il clustering genera uno spazio di funzionalità latente, sul quale viene appreso il limite di classificazione, e questo dipende solo dai dati etichettati.

Gli algoritmi che non eseguono alcun tipo di cluster, credo, non saranno in grado di cambiare il loro ottimale in base al set di dati senza etichetta.

A proposito, l'immagine che hai collegato fa un buon lavoro, penso di spiegare cosa sta succedendo qui; un limite di decisione viene appreso basandosi esclusivamente sull'algoritmo di clustering. Non hai idea di quali siano le classi corrette qui - potrebbe essere il caso che siano tutte casuali - non lo sappiamo. Tutto ciò che possiamo ora è che sembra esserci una struttura nello spazio delle caratteristiche e sembra che ci sia una mappatura dallo spazio delle caratteristiche alle etichette delle classi.

Non ho riferimenti ma su questo post di Reddit , a quanto ho capito, c'è una discussione su un GAN che esegue un apprendimento semi-supervisionato. È un mio sospetto che comporti implicitamente un raggruppamento, seguito da una classificazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.