Mengapa menggunakan pseudo-labeling non-sepele mempengaruhi hasil?

19

Saya telah mencari metode pembelajaran semi-diawasi, dan telah menemukan konsep "pseudo-labeling".

Seperti yang saya pahami, dengan pseudo-label Anda memiliki satu set data berlabel serta satu set data yang tidak berlabel. Anda pertama-tama melatih model hanya pada data berlabel. Anda kemudian menggunakan data awal itu untuk mengklasifikasikan (melampirkan label sementara) data yang tidak berlabel. Anda kemudian memasukkan data yang berlabel dan yang tidak berlabel kembali ke dalam pelatihan model Anda, (cocok) dengan label yang dikenal dan label yang diprediksi. (Iterasi proses ini, beri label ulang dengan model yang diperbarui.)

Manfaat yang diklaim adalah Anda dapat menggunakan informasi tentang struktur data yang tidak berlabel untuk meningkatkan model. Variasi dari gambar berikut sering ditampilkan, "menunjukkan" bahwa proses dapat membuat batas keputusan yang lebih kompleks berdasarkan di mana data (tidak berlabel) berada.

Batas keputusan dalam metode semi-diawasi

Gambar dari Wikimedia Commons oleh Techerin CC BY-SA 3.0

Namun, saya tidak cukup membeli penjelasan sederhana itu. Secara naif, jika hasil pelatihan hanya berlabel asli adalah batas keputusan atas, label semu akan ditetapkan berdasarkan batas keputusan itu. Yang mengatakan bahwa tangan kiri kurva atas akan berlabel pseudo putih dan tangan kanan kurva bawah akan berlabel pseudo hitam. Anda tidak akan mendapatkan batas keputusan melengkung yang bagus setelah pelatihan ulang, karena pseudo-label baru hanya akan memperkuat batas keputusan saat ini.

Atau dengan kata lain, batas keputusan berlabel-satunya saat ini akan memiliki akurasi prediksi yang sempurna untuk data yang tidak berlabel (seperti yang kami gunakan untuk membuatnya). Tidak ada kekuatan pendorong (tidak ada gradien) yang akan menyebabkan kami mengubah lokasi batas keputusan itu hanya dengan menambahkan data pseudo-label.

Apakah saya benar dalam berpikir bahwa penjelasan yang terkandung dalam diagram kurang? Atau ada sesuatu yang saya lewatkan? Jika tidak, apa yang manfaat dari pseudo-label, mengingat batas keputusan pra-pelatihan kembali memiliki akurasi yang sempurna atas pseudo-label?

RM
sumber

Jawaban:

16

Pelabelan semu tidak bekerja pada masalah mainan yang diberikan

Oliver et al. (2018) mengevaluasi algoritma pembelajaran semi-diawasi yang berbeda. Gambar pertama mereka menunjukkan bagaimana pelabelan semu (dan metode lain) melakukan pada masalah mainan yang sama seperti dalam pertanyaan Anda (disebut dataset 'dua bulan'):

masukkan deskripsi gambar di sini

Plot menunjukkan titik data yang berlabel dan tidak berlabel, dan batas-batas keputusan diperoleh setelah melatih jaringan saraf menggunakan metode pembelajaran semi-terawasi yang berbeda. Seperti yang Anda duga, pelabelan semu tidak berfungsi dengan baik dalam situasi ini. Mereka mengatakan bahwa pseudo-label "adalah heuristik sederhana yang banyak digunakan dalam praktiknya, kemungkinan karena kesederhanaan dan generalitasnya". Tetapi: "Meskipun intuitif, namun dapat menghasilkan hasil yang salah ketika fungsi prediksi menghasilkan target yang tidak membantu untuk [data yang tidak berlabel], seperti yang ditunjukkan pada gambar. 1."

Mengapa dan kapan pseudo-label bekerja?

Pelabelan semu diperkenalkan oleh Lee (2013), sehingga Anda dapat menemukan detail lebih lanjut di sana.

Asumsi cluster

Pembenaran teoretis yang diberikan Lee untuk pseudo-labeling adalah bahwa itu mirip dengan regularisasi entropi. Regulatorisasi entropi (Grandvalet dan Bengio 2005) adalah teknik pembelajaran semi-diawasi lainnya, yang mendorong pengklasifikasi untuk membuat prediksi percaya diri pada data yang tidak berlabel. Sebagai contoh, kami lebih suka titik yang tidak berlabel untuk diberikan probabilitas tinggi berada di kelas tertentu, daripada probabilitas menyebar tersebar di beberapa kelas. Tujuannya adalah untuk mengambil keuntungan dari asumsi bahwa data dikelompokkan sesuai dengan kelas (disebut "asumsi cluster" dalam pembelajaran semi-diawasi). Jadi, titik terdekat memiliki kelas yang sama, dan titik di kelas yang berbeda lebih banyak dipisahkan, sehingga batas keputusan sebenarnya dijalankan melalui daerah dengan kepadatan rendah ruang input.

Mengapa pseudo-labeling mungkin gagal

Mengingat hal di atas, tampaknya masuk akal untuk menebak bahwa asumsi cluster adalah kondisi yang diperlukan untuk pelabelan semu agar berfungsi. Tapi, jelas itu tidak cukup, karena masalah dua bulan di atas memuaskan asumsi cluster, tetapi pseudo-labeling tidak berfungsi. Dalam kasus ini, saya menduga masalahnya adalah bahwa ada sangat sedikit titik berlabel, dan struktur kluster yang tepat tidak dapat diidentifikasi dari titik-titik ini. Jadi, seperti Oliver et al. menjelaskan (dan seperti yang Anda tunjukkan dalam pertanyaan Anda), pseudo-label yang dihasilkan memandu classifier menuju batas keputusan yang salah. Mungkin itu akan berhasil mengingat lebih banyak data berlabel Sebagai contoh, kontras ini dengan kasus MNIST yang dijelaskan di bawah ini, di mana pseudo-labeling berfungsi.

Tempat kerjanya

Lee (2013) menunjukkan bahwa pseudo-labeling dapat membantu pada set data MNIST (dengan 100-3000 contoh berlabel). Dalam gbr. 1 dari makalah itu, Anda dapat melihat bahwa jaring saraf yang dilatih pada 600 contoh berlabel (tanpa pembelajaran semi-diawasi) sudah dapat memulihkan struktur cluster di antara kelas. Tampaknya pseudo-labeling kemudian membantu memperbaiki struktur. Perhatikan bahwa ini tidak seperti contoh dua bulan, di mana beberapa titik berlabel tidak cukup untuk mempelajari kelompok yang tepat.

Makalah ini juga menyebutkan bahwa hasilnya tidak stabil dengan hanya 100 contoh berlabel. Ini lagi mendukung gagasan bahwa pseudo-labeling sensitif terhadap prediksi awal, dan bahwa prediksi awal yang baik membutuhkan jumlah poin berlabel yang cukup.

Lee juga menunjukkan bahwa pra-pelatihan tanpa pengawasan yang menggunakan autoencoder denoising membantu lebih jauh, tetapi ini tampaknya menjadi cara terpisah untuk mengeksploitasi struktur dalam data yang tidak berlabel; Sayangnya, tidak ada perbandingan dengan pra-pelatihan yang tidak diawasi sendirian (tanpa pseudo-labeling).

Grandvalet dan Bengio (2005) melaporkan bahwa ketukan pseudo-labeling diawasi pada dataset CIFAR-10 dan SVHN (masing-masing dengan 4000 dan 1000 contoh berlabel). Seperti di atas, ini jauh lebih berlabel data daripada 6 titik berlabel dalam masalah dua bulan.

Referensi

pengguna20160
sumber
5

Apa yang mungkin Anda abaikan dalam cara latihan mandiri adalah:

  1. Itu iteratif, bukan sekali suntikan.

  2. Anda menggunakan classifier yang mengembalikan nilai probabilistik. Pada setiap iterasi, Anda hanya menambahkan label-label psuedo untuk kasus-kasus yang paling pasti algoritme Anda.

Dalam contoh Anda, mungkin iterasi pertama hanya cukup percaya diri untuk memberi label satu atau dua poin yang sangat dekat dengan masing-masing poin yang berlabel. Dalam iterasi berikutnya batas akan berputar sedikit untuk mengakomodasi empat hingga enam titik berlabel ini, dan jika itu non-linear juga dapat mulai sedikit menekuk. Ulang.

Ini tidak dijamin berfungsi. Itu tergantung pada base classifier Anda, algoritme Anda (seberapa pasti Anda harus menetapkan label palsu, dll), data Anda, dan sebagainya.

Ada juga algoritma lain yang lebih kuat jika Anda bisa menggunakannya. Apa yang saya yakin Anda gambarkan adalah pelatihan mandiri, yang mudah untuk dikodekan, tetapi Anda menggunakan pengelompokan tunggal yang melihat informasi yang sama berulang kali. Pelatihan bersama menggunakan beberapa pengklasifikasi yang masing-masing mencari informasi yang berbeda untuk setiap poin. (Ini agak analog dengan Hutan Acak.) Ada juga teknik semi-diawasi lainnya - seperti yang secara eksplisit mengelompok - meskipun tidak ada keseluruhan "ini selalu berhasil dan ini adalah pemenangnya".

DALAM TANGGAPAN untuk komentar: Saya bukan ahli dalam bidang ini. Kami melihatnya sangat sesuai dengan apa yang biasanya kami lakukan dengan klien, jadi saya belajar dan tidak memiliki semua jawaban.

Hasil terbaik ketika saya mencari ikhtisar pembelajaran semi-diawasi adalah: Survei Sastra Belajar Semi-Supervisi , dari tahun 2008. Itu berabad-abad yang lalu, dari segi komputer, tetapi berbicara tentang hal-hal yang saya sebutkan di sini.

Saya mendengar Anda bahwa classifier dapat menilai poin yang tidak berlabel yang paling jauh dari node berlabel dengan kepastian yang paling tinggi. Di sisi lain, intuisi kita mungkin membodohi kita. Sebagai contoh, mari kita perhatikan grafik yang Anda dapatkan dari Wikipedia dengan simpul hitam, putih, dan abu-abu.

Pertama, ini dalam 2D ​​dan masalah paling realistis akan berada di dimensi yang lebih tinggi, di mana intuisi kita sering menyesatkan kita. Ruang dimensi tinggi bertindak berbeda dalam banyak hal - beberapa negatif dan beberapa benar-benar bermanfaat.

Kedua, kita bisa menebak bahwa dalam iterasi pertama dua titik abu-abu paling kanan, paling bawah akan diberi label sebagai hitam, karena titik berlabel hitam lebih dekat dengan mereka daripada titik berlabel putih. Tetapi jika itu terjadi di kedua sisi, batas keputusan vertikal akan tetap miring dan tidak lagi vertikal. Setidaknya dalam imajinasiku, jika itu adalah garis lurus, itu akan menuju ruang kosong diagonal antara dua titik yang awalnya berlabel. Itu masih akan membagi dua crescent salah, tetapi akan lebih selaras dengan data sekarang. Iterasi yang berkelanjutan - terutama dengan batas keputusan non-linear - mungkin menghasilkan jawaban yang lebih baik dari yang kami perkirakan.

Ketiga, saya tidak yakin bahwa label sekali, selalu berlabel adalah bagaimana seharusnya bekerja. Bergantung pada bagaimana Anda melakukannya dan bagaimana algoritme bekerja, Anda mungkin berakhir dengan memiringkan batas saat menekuknya (dengan asumsi non-linear), dan kemudian beberapa bagian yang salah diklasifikasi dari bulan sabit mungkin menggeser label mereka.

Perasaan saya adalah bahwa ketiga poin tersebut, dikombinasikan dengan data yang sesuai (mungkin berdimensi lebih tinggi), dan pengklasifikasi yang tepat dapat melakukan lebih baik daripada yang langsung diawasi dengan sejumlah kecil sampel pelatihan (berlabel). Tidak ada jaminan, dan dalam percobaan saya, saya telah menemukan - saya menyalahkannya pada kumpulan data yang terlalu sederhana - bahwa semi-diawasi mungkin hanya sedikit meningkat daripada diawasi dan kadang-kadang gagal buruk. Kemudian lagi, saya bermain dengan dua algoritma yang saya buat yang mungkin atau mungkin tidak benar-benar baik.

Wayne
sumber
2
Bisakah Anda memperluas jenis klasifikasi / situasi apa yang akan berhasil? Pemahaman saya tentang sebagian besar pengklasifikasi yang bekerja pada jenis contoh data yang ditampilkan adalah bahwa itu adalah poin yang jauh dari batas keputusan (dibandingkan dengan poin yang diketahui) yang akan mendapatkan kepercayaan yang tinggi, sehingga ekor yang jauh itu dengan percaya diri akan salah diklasifikasi dalam contoh. (Selain itu, setiap referensi / bacaan lebih lanjut yang dapat Anda tunjukkan berkenaan dengan penggunaan pseudolabeling dan teknik terkait secara efektif akan dihargai.)
RM
@RM Diedit. Bagaimana dengan itu?
Wayne
1

Peringatan, saya bukan ahli dalam prosedur ini. Kegagalan saya untuk menghasilkan hasil yang baik bukanlah bukti bahwa teknik ini tidak dapat dibuat untuk bekerja. Selain itu, gambar Anda memiliki deskripsi umum tentang pembelajaran "semi-diawasi", yang merupakan area luas dengan berbagai teknik.

Saya setuju dengan intuisi Anda, saya tidak melihat bagaimana teknik seperti ini bisa berhasil. Dengan kata lain, saya pikir Anda akan membutuhkan banyak upaya untuk membuatnya berfungsi dengan baik untuk aplikasi tertentu, dan upaya itu tidak selalu membantu dalam aplikasi lain.

Saya mencoba dua contoh berbeda, satu dengan dataset berbentuk pisang seperti yang ada pada gambar contoh, dan satu lagi dataset yang lebih mudah dengan dua cluster sederhana yang terdistribusi normal. Dalam kedua kasus saya tidak bisa meningkatkan pada classifier awal.

Sebagai upaya kecil untuk mendorong berbagai hal, saya menambahkan kebisingan ke semua probabilitas yang diprediksi dengan harapan bahwa ini akan menyebabkan hasil yang lebih baik.

Contoh pertama saya membuat ulang gambar di atas setepat mungkin. Saya tidak berpikir pelabelan psuedo akan dapat membantu sama sekali di sini.

Examlpe satu, data berbentuk pisang

Contoh kedua jauh lebih mudah, tetapi bahkan di sini gagal untuk memperbaiki pengklasifikasi awal. Saya secara khusus memilih satu titik berlabel dari tengah kelas kiri, dan sisi kanan kelas kanan berharap itu akan bergeser ke arah yang benar, tidak ada keberuntungan seperti itu.

Contoh dua, data berdistribusi normal 2D] =

Kode untuk contoh 1 (contoh 2 cukup mirip sehingga saya tidak akan menggandakannya di sini):

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()
kbrose
sumber
1

Inilah tebakan saya (saya juga tidak tahu banyak tentang topik ini, hanya ingin menambahkan dua sen ke diskusi ini).

Saya pikir Anda benar, tidak ada gunanya melatih model klasik dan menggunakan prediksinya sebagai data, karena seperti yang Anda katakan, tidak ada insentif bagi pengoptimal untuk melakukan yang lebih baik. Saya akan menebak bahwa algoritma mulai acak lebih cenderung untuk menemukan yang sama optimal karena mereka akan "lebih yakin" bahwa yang ditemukan sebelumnya optimal adalah benar, karena kumpulan data yang lebih besar, tetapi ini tidak relevan.

Yang mengatakan, jawaban pertama yang Anda terima ada benarnya - contoh di Wikipedia berbicara tentang pengelompokan, dan saya pikir itu membuat semua perbedaan. Saat Anda memiliki data yang tidak berlabel, pada dasarnya Anda memiliki banyak titik yang tidak berlabel yang terbentang di beberapa "ruang fitur laten" bersama seperti yang diberi label lainnya. Anda hanya dapat benar-benar melakukan lebih baik daripada algoritma klasifikasi yang dilatih pada data yang berlabel, jika Anda dapat mengungkap fakta bahwa titik-titik yang tidak berlabel dapat dipisahkan dan kemudian diklasifikasikan berdasarkan kelas apa yang dimiliki titik berlabel, pada ruang fitur laten ini.

Maksud saya adalah, Anda perlu melakukan ini:

lSebuahbelleddSebuahtSebuahclkamustersayangclSebuahsssayafsayacSebuahtsayaHain

... dan kemudian ulangi dengan data tidak berlabel. Di sini, batas - batas kluster yang dipelajari tidak akan sama, karena pengelompokan tidak peduli dengan label kelas, yang diperhitungkan hanyalah mengubah ruang fitur. Pengelompokan menghasilkan ruang fitur laten, di mana batas klasifikasi dipelajari, dan ini hanya bergantung pada data berlabel.

Algoritma yang tidak melakukan pengelompokan apa pun, saya percaya, tidak akan dapat mengubah optimumnya berdasarkan kumpulan data yang tidak berlabel.

Omong-omong, gambar yang Anda tautkan melakukan pekerjaan yang adil, saya pikir akan menjelaskan apa yang terjadi di sini; batas keputusan dipelajari hanya berdasarkan algoritma pengelompokan. Anda tidak tahu kelas apa yang benar di sini - mungkin karena semuanya acak - kita tidak tahu. Yang kita dapat sekarang adalah bahwa tampaknya ada beberapa struktur dalam ruang fitur, dan tampaknya ada beberapa pemetaan dari ruang fitur ke label kelas.

Tidak benar-benar memiliki referensi tetapi pada posting Reddit ini , seperti yang saya mengerti, ada diskusi tentang GAN yang melakukan pembelajaran semi-diawasi. Ini adalah firasat saya bahwa ia secara implisit melakukan pengelompokan, diikuti oleh klasifikasi.

InfProbSciX
sumber