Tiga tahun telah berlalu sejak penerbitan bab pertama Kerinduan Pembelajaran Mesin Andrew Ng. Jika Anda berlangganan hub "Pembelajaran Mesin", maka tidak perlu memperkenalkan Anda kepada pembuatnya, dan kemungkinan besar Anda sudah membaca buku itu sendiri sejak lama dalam bahasa sumber aslinya. Terjemahan paruh pertama buku ke dalam bahasa Rusia dibuat oleh
alexey_nichnikov , saat ini diterbitkan di Habré dalam
serangkaian artikel .
Saya mempersembahkan kepada Anda versi terjemahan dari bagian kedua buku ini, yaitu bab 36-58. Direncanakan untuk memecahnya menjadi dua artikel untuk kenyamanan publikasi. Selain itu, Anda dapat mengunduh terjemahan yang sudah selesai dari bab-bab ini, yang
disusun dalam pdf , mungkin seseorang akan menemukan format ini lebih nyaman untuk dibaca.
Artikel pertama akan fokus pada pelatihan dan pengujian pada distribusi yang berbeda, serta algoritma debugging output.
Pelatihan dan pengujian pada distribusi yang berbeda
Bab 36. Kapan Anda Harus Melatih dan Menguji Distribusi yang Berbeda
Pengguna aplikasi Cat Photo Anda mengunggah 10.000 gambar yang Anda beri label secara manual berisi atau tidak mengandung kucing. Anda juga memiliki lebih dari 200.000 gambar yang Anda unduh dari Internet. Bagaimana cara mendefinisikan pelatihan (set kereta), validasi (set perangkat) dan pemilihan tes (set tes)?
Karena 10.000 gambar dari pengguna secara dekat mencerminkan distribusi probabilitas nyata dari data yang ingin Anda kerjakan dengan sukses di masa mendatang, Anda dapat menggunakan ini untuk validasi dan sampel uji Anda. Jika Anda melatih algoritma pembelajaran mendalam yang menuntut jumlah contoh pelatihan, Anda dapat memberikan 200.000 gambar tambahan yang diunduh dari Internet untuk pelatihan. Dengan demikian, data dalam validasi dan sampel uji akan memiliki distribusi probabilitas yang berbeda. Bagaimana ini akan mempengaruhi hasil pekerjaan Anda?
Alih-alih memecah data kami menjadi sampel pelatihan, validasi, dan uji, kami dapat mengambil semua 210.000 gambar yang tersedia dan secara acak mengocoknya menjadi sampel pelatihan, validasi, dan uji. Dalam hal ini, semua data masuk dengan distribusi yang sama. Tetapi saya tidak merekomendasikan menggunakan metode ini, karena sekitar 97,6% (205.000 / 210.000) validasi dan sampel uji Anda akan terdiri dari gambar yang diunduh dari Internet yang tidak mencerminkan distribusi aktual yang Anda inginkan untuk berhasil.
Rekomendasi untuk definisi validasi dan sampel uji:
- pilih validasi dan sampel uji untuk mencerminkan data yang ingin Anda terima di masa depan dan yang ingin Anda kerjakan dengan sukses.
Sebagian besar literatur pembelajaran mesin akademik menunjukkan bahwa pelatihan, validasi, dan sampel uji semuanya memiliki distribusi yang sama.
1 Di awal pembelajaran mesin, data langka. Biasanya kami hanya memiliki satu set data dengan beberapa distribusi probabilitas. Oleh karena itu, kami secara acak membagi seluruh set ke dalam pelatihan, validasi dan sampel uji, dengan asumsi bahwa semua data berasal dari sumber yang sama, yang biasanya sesuai dengan kenyataan.
1 Ada sejumlah studi ilmiah tentang pelatihan dan pengujian model pada berbagai distribusi. Contohnya termasuk Adaptasi Domain, Transfer Belajar, dan Pembelajaran Multitask. Tetapi masih ada kesenjangan besar antara teori dan praktik. Jika Anda melatih model pada dataset A dan menguji pada dataset B, yang sangat berbeda, keberuntungan dapat memiliki dampak besar pada kinerja algoritma Anda. (Di sini, “keberuntungan” mencakup pemilihan atribut secara manual oleh seorang peneliti untuk tugas tertentu, serta faktor-faktor lain yang belum kita pahami.) Hal ini menyulitkan untuk melakukan studi akademik yang sistematis tentang pelatihan dan pengujian pada berbagai distribusi.
Tetapi di era big data, kita sekarang memiliki akses ke set pelatihan besar, seperti gambar dengan kucing dari Internet. Sekalipun sampel pelatihan memiliki distribusi yang berbeda dari distribusi validasi dan sampel uji, kami masih ingin menggunakannya untuk pelatihan, karena ini dapat memberikan banyak informasi tambahan.
Dalam contoh dengan detektor kucing, alih-alih menempatkan semua 10.000 gambar yang diunggah oleh pengguna ke dalam validasi dan sampel uji, kami hanya dapat menempatkan 5.000 gambar di dalamnya. Dan sisa 5.000 contoh bisa kita masukkan ke dalam set pelatihan. Dengan demikian, sampel pelatihan akan terdiri dari 205.000 contoh, dan akan mencakup data yang memiliki distribusi yang sama seperti dalam validasi dan sampel uji, ditambah 200.000 gambar Internet. Dalam bab selanjutnya, kita akan membahas mengapa metode ini bermanfaat.
Mari kita lihat contoh kedua. Misalkan Anda sedang membangun sistem pengenalan ucapan untuk menyalin alamat untuk aplikasi suara Navigator. Anda memiliki 20.000 contoh, di mana masing-masing pengguna menyebutkan beberapa alamat. Tetapi Anda juga memiliki 500.000 rekaman audio lainnya di mana pengguna berbicara tentang topik gratis. Anda dapat mengambil 10.000 contoh dengan alamat untuk validasi dan sampel uji, dan 10.000 contoh lainnya ditambah 500.000 contoh tambahan untuk dimasukkan dalam rangkaian pelatihan.
Kami akan terus mengasumsikan bahwa validasi dan data sampel uji kami memiliki distribusi yang sama. Tetapi penting untuk memahami dan mengingat bahwa distribusi yang berbeda dalam pelatihan dan validasi / sampel uji akan mengarah pada masalah khusus.
Bab 37. Cara memutuskan apakah akan menggunakan semua data Anda atau hanya sebagian
Misalkan sampel pelatihan detektor kucing Anda menyertakan 10.000 gambar yang diunggah pengguna. Biarkan data ini memiliki distribusi yang sama seperti dalam validasi dan sampel uji, dan untuk distribusi seperti itulah Anda ingin mencapai hasil maksimal. Anda juga memiliki 20.000 gambar tambahan yang diunduh dari Internet. Apakah perlu untuk memasukkan semua 20.000 + 10.000 = 30.000 gambar dalam set pelatihan, atau lebih baik untuk menjatuhkan 20.000 gambar Internet karena takut memasukkan kesalahan ke dalam algoritma pembelajaran Anda?
Menggunakan generasi sebelumnya algoritma pembelajaran (seperti algoritma visi komputer yang dirancang secara manual, diikuti oleh classifier linier sederhana), ada risiko nyata bahwa menggabungkan data dari kedua sumber dapat menurunkan hasil. Karenanya, beberapa insinyur akan memperingatkan Anda untuk tidak menyertakan 20.000 gambar online.
Tetapi di era modern yang kuat, algoritma pembelajaran fleksibel, seperti jaringan saraf besar, risiko ini telah berkurang secara signifikan. Jika Anda mampu membangun jaringan saraf dengan lapisan tersembunyi yang cukup banyak, Anda dapat dengan aman menambahkan 20.000 gambar Internet ke set pelatihan Anda. Menambahkan gambar cenderung meningkatkan laba Anda.
Pengamatan ini didasarkan pada kenyataan bahwa ada beberapa korespondensi
x →
y yang bekerja dengan baik untuk kedua jenis data. Dengan kata lain, ada beberapa jenis sistem yang, setelah menerima baik gambar Internet atau gambar dari aplikasi seluler, dapat diandalkan untuk memprediksi label tanpa mengetahui sumber gambar tersebut.
Menambahkan 20.000 gambar Internet tambahan akan memiliki efek berikut:
- Ini akan memberikan jaringan saraf Anda lebih banyak contoh bagaimana kucing terlihat / tidak terlihat. Ini berguna karena gambar web dan gambar yang diunggah oleh pengguna aplikasi seluler memiliki beberapa kesamaan. Jaringan saraf Anda dapat menerapkan beberapa pengetahuan yang diperoleh dari gambar online ke gambar dari aplikasi seluler.
- Ini menyebabkan jaringan saraf menghabiskan sebagian sumber dayanya untuk mengenali properti yang khusus untuk gambar Internet (misalnya, resolusi lebih tinggi, berbagai metode desain, dll.). Jika properti ini berbeda secara signifikan dari gambar dari aplikasi seluler, ini akan "menguras" bagian dari kemampuan representatif dari jaringan saraf. Dengan demikian, akan ada lebih sedikit peluang untuk mengenali data yang diterima dari aplikasi seluler, dan inilah yang harus benar-benar membuat Anda khawatir. Secara teoritis, ini dapat menurunkan kinerja algoritma Anda.
Untuk menjelaskan efek kedua dengan kata lain, kita dapat beralih ke karakter fiksi, Sherlock Holmes, yang mengatakan bahwa otak Anda terlihat seperti loteng yang memiliki ruang terbatas. Dia mengatakan bahwa “dengan setiap tambahan pengetahuan Anda melupakan apa yang Anda ketahui sebelumnya. Karena itu, sangat penting untuk tidak membiarkan fakta-fakta yang tidak berguna menggantikan yang berguna. ”
22 “Etude in Scarlet”, Arthutre Conan Doyle, 1887
Untungnya, jika Anda memiliki kekuatan komputasi yang diperlukan untuk membangun jaringan saraf yang cukup besar, yaitu, "loteng yang cukup besar", maka "crowding out" yang dijelaskan di atas bukanlah masalah serius. Anda memiliki peluang pelatihan yang cukup baik pada gambar Internet dan pada gambar dari aplikasi mobile, sementara kedua jenis data tidak bersaing untuk kemampuan pengenalan. "Otak" algoritme Anda cukup besar sehingga Anda tidak perlu khawatir bahwa Anda tiba-tiba tidak memiliki cukup "ruang di loteng".
Tetapi jika Anda tidak memiliki jaringan saraf yang cukup besar (atau algoritma pembelajaran lain yang sangat fleksibel), maka Anda harus lebih memperhatikan data pelatihan Anda yang cocok dengan validasi dan sampel uji Anda.
Jika Anda berpikir bahwa Anda memiliki data yang tidak membawa manfaat, Anda harus mengecualikannya untuk mempercepat perhitungan. Misalnya, anggap validasi dan sampel uji Anda terutama berisi foto acak orang, tempat, tanda dan petunjuk, serta hewan. Misalkan Anda juga memiliki banyak koleksi dokumen historis yang dipindai:
Dokumen-dokumen ini tidak mengandung apa pun seperti kucing. Mereka juga terlihat sangat berbeda dari data dari validasi dan sampel uji Anda. Tidak masuk akal untuk memasukkan data ini sebagai contoh negatif, karena dalam hal ini manfaat yang dijelaskan dalam efek pertama akan diabaikan. Berdasarkan data ini, jaringan saraf Anda tidak akan dapat menemukan hampir semua hal yang dapat diterapkan pada validasi dan sampel uji Anda. Dimasukkannya contoh-contoh ini akan menyebabkan hilangnya sumber daya komputasi dan penurunan kemampuan representatif dari jaringan saraf.
Bab 38. Cara memutuskan apakah akan memasukkan data yang bertentangan
Misalkan Anda ingin mempelajari cara memperkirakan harga rumah di New York. Mengingat ukuran rumah (input
x ), Anda ingin memprediksi harga (label target
y ).
Harga rumah di New York sangat tinggi. Misalkan Anda memiliki kumpulan data kedua - harga perumahan di Detroit, Michigan, di mana harga perumahan jauh lebih rendah. Haruskah saya memasukkan data ini dalam set pelatihan saya?
Mengingat ukuran
x yang sama, harga rumah
y sangat berbeda tergantung pada apakah itu di New York atau di Detroit. Jika Anda hanya peduli dengan perkiraan harga rumah di New York, menggabungkan kedua dataset akan mengurangi produktivitas Anda. Dalam hal ini, akan lebih baik untuk tidak menggunakan data yang bertentangan dari set Detroit.
33 Ada satu cara untuk memecahkan masalah ketidakcocokan data Detroit dengan data New York, yaitu, menambahkan fitur tambahan untuk setiap contoh pelatihan, yaitu indikasi kota. Mengingat nilai input x , yang sekarang menunjukkan kota, nilai target y sekarang ditentukan secara unik. Namun, dalam praktiknya, saya masih tidak melihatnya sering dilakukan.
Apa bedanya contoh ini dengan perumahan di New York dan Detroit berbeda dari contoh kami dengan gambar Internet kucing dan gambar dari aplikasi seluler?
Contoh dengan gambar kucing berbeda dalam hal itu, mengingat input gambar
x , Anda dapat memprediksi label
y dengan andal, yang menunjukkan apakah ada kucing di dalamnya, tanpa mengetahui apakah kami menerima gambar dari Internet atau dari aplikasi seluler. Yaitu ada fungsi f (x) yang secara andal mencerminkan korespondensi input
x ke output target
y , tanpa mengetahui sumber asal
x . Dengan demikian, tugas mengenali gambar Internet "sesuai" dengan tugas mengenali gambar dari aplikasi mobile. Ini berarti bahwa ada minus kecil (kecuali untuk biaya komputasi) dari memasukkan semua data dan beberapa kemungkinan plus signifikan. Berbeda dengan contoh dengan data yang bertentangan dari New York dan Detroit, di mana, untuk nilai input
x yang sama (ukuran rumah), harganya sangat berbeda tergantung pada kota di mana rumah ini berada.
Bab 39. Menimbang Data
Misalkan Anda memiliki 200.000 gambar daring dan 5.000 gambar dari pengguna aplikasi seluler Anda. Ada rasio 40: 1 antara ukuran set data ini. Secara teoritis, selama Anda membangun jaringan saraf besar dan melatihnya cukup lama dengan semua 205.000 contoh yang tersedia, tidak ada yang salah dengan membuat algoritme berfungsi baik pada gambar Internet dan gambar seluler.
Namun dalam praktiknya, memiliki gambar Internet 40 kali lebih banyak daripada gambar dari aplikasi seluler, Anda mungkin perlu menghabiskan sumber daya komputasi 40 kali lebih banyak daripada ketika Anda melatih jaringan hanya dengan 5.000 gambar.
Jika Anda tidak memiliki sumber daya komputasi yang besar, Anda dapat memberikan gambar Internet jauh lebih sedikit sebagai kompromi.
Misalnya, anggap tujuan pengoptimalan Anda adalah kesalahan kuadrat (ini bukan pilihan yang baik untuk masalah klasifikasi, tetapi itu akan menyederhanakan penjelasan kami). Dengan demikian, algoritma pembelajaran Anda mencoba mengoptimalkan:
$$ menampilkan $$ \ min_θ \ jumlah _ {(x, y) ∈MobileImg} (h_θ (x) -y) ^ 2 + \ jumlah _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ tampilan $$
Jumlah pertama di atas adalah kesalahan total untuk 5.000 gambar seluler, dan jumlah kedua adalah kesalahan total untuk 200.000 gambar Internet. Sebagai gantinya, Anda dapat mengoptimalkan dengan parameter tambahan
beta :
$$ menampilkan $$ \ min_θ \ jumlah _ {(x, y) ∈MobileImg} (h_θ (x) -y) ^ 2 + \ beta \ sum _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ menampilkan $$
Jika Anda menginstal
beta = 1/40, algoritma akan memberikan bobot yang sama dengan 5.000 gambar seluler dan 200.000 gambar Internet. Anda juga dapat mengatur parameter
beta nilai-nilai lain, mungkin menyesuaikannya dengan sampel validasi.
Menetapkan bobot yang lebih rendah untuk gambar Internet, Anda tidak perlu membuat jaringan saraf besar untuk memastikan bahwa algoritma mengatasi dengan baik dengan kedua jenis tugas. Metode "reweighting" ini diperlukan hanya jika Anda mencurigai bahwa data tambahan (gambar Internet) memiliki distribusi yang sangat berbeda dari data dalam validasi dan sampel uji, atau jika ada lebih banyak data tambahan daripada data yang diperoleh dengan distribusi yang sama seperti dalam validasi dan sampel uji (gambar seluler).
Bab 40. Generalisasi sampel pelatihan ke sampel validasi
Misalkan Anda menerapkan ML dalam situasi di mana sampel pelatihan berbeda dari validasi / tes. Katakanlah, sampel pelatihan berisi gambar Internet + gambar seluler, dan sampel validasi / uji hanya berisi gambar seluler. Namun, algoritmanya tidak bekerja dengan baik: ia memiliki kesalahan yang jauh lebih tinggi pada sampel validasi / uji daripada yang kita inginkan. Berikut adalah beberapa alasan mengapa hal ini mungkin tidak terjadi:
- Algoritma tidak bekerja dengan baik pada set pelatihan. Ini adalah masalah bias yang tinggi (yang dapat dihindari) dari distribusi sampel pelatihan.
- Algoritme berfungsi dengan baik pada perangkat pelatihan, tetapi secara umum tidak tergeneralisasi untuk data baru (sebelumnya tidak ditampilkan) yang diambil dengan distribusi yang sama seperti pada perangkat pelatihan. Ini adalah varian yang tinggi.
- Algoritma digeneralisasikan dengan baik ke data baru (sebelumnya tidak ditampilkan) yang diambil dengan distribusi yang sama seperti dalam sampel pelatihan, tetapi tidak untuk data dari sampel validasi / uji. Kami menyebut ketidaksesuaian data masalah ini karena fakta bahwa data dari sampel pelatihan berkorelasi buruk dengan data dari sampel validasi / uji.
Misalnya, anggaplah orang mencapai hasil yang hampir sempurna dalam tugas mengidentifikasi kucing. Dan algoritma Anda telah mencapai:
- 1% kesalahan dalam sampel pelatihan
- 1,5% kesalahan pada data baru (sebelumnya tidak ditunjukkan ke algoritma) memiliki distribusi yang sama dengan sampel pelatihan
- 10% kesalahan dalam sampel validasi
Dalam hal ini, Anda pasti memiliki masalah ketidakcocokan data. Untuk mengaktifkannya, Anda dapat mencoba membuat sampel pelatihan lebih mirip dengan validasi / tes. Kami akan membahas beberapa teknik teknik ini nanti.
Untuk mendiagnosis sejauh mana algoritma menderita dari masing-masing masalah 1-3 yang dijelaskan di atas, akan berguna untuk memiliki kumpulan data yang berbeda. Secara khusus, alih-alih memberikan algoritma semua data yang tersedia untuk pelatihan, Anda dapat membaginya menjadi dua bagian: sampel pelatihan aktual tempat algoritma akan dilatih, dan satu set terpisah, yang akan kita sebut validasi pelatihan (set "trainig dev" ), yang tidak akan kami gunakan dalam pelatihan.
Dengan demikian, Anda memiliki 4 set data:- Set pelatihan (set pelatihan). Ini adalah data di mana algoritma akan dilatih (misalnya, gambar Internet + gambar dari aplikasi seluler). Data ini tidak harus diambil dengan distribusi yang sama, yang akhirnya menjadi fokus kami (validasi / sampel uji).
- Sampel pelatihan dan validasi (set "dev pelatihan"). Data ini diambil dengan distribusi yang sama seperti dalam sampel pelatihan (misalnya, gambar Internet + gambar aplikasi seluler). Set ini biasanya lebih kecil dari set pelatihan, dan itu harus cukup besar untuk mengevaluasi dan melacak kemajuan algoritma pelatihan kami.
- Pengambilan sampel validasi (dev set). Data ini diambil dengan distribusi yang sama seperti pada sampel uji dan harus sepenuhnya mencerminkan distribusi data yang kami perjuangkan untuk mencapai peningkatan maksimum (misalnya, gambar dari aplikasi seluler).
- Set tes Data ini diambil dengan distribusi yang sama seperti pada sampel validasi (misalnya, gambar dari aplikasi seluler).
Berbekal empat set data terpisah ini, Anda dapat mengevaluasi:- Kesalahan pelatihan (training error), dengan mengevaluasi sampel pelatihan.
- Kemampuan algoritma untuk menggeneralisasi ke data baru, dengan distribusi yang sama seperti pada set pelatihan, dengan mengevaluasi set validasi pelatihan.
- Efisiensi dari algoritma secara keseluruhan untuk menyelesaikan masalah, dengan mengevaluasi validasi dan (atau) sampel uji.
Sebagian besar rekomendasi yang diberikan dalam bab 5-7 dari buku ini untuk memilih ukuran sampel validasi juga berlaku untuk sampel pelatihan dan validasi.
Bab 41. Penentuan bias, varians dan kesalahan ketidakcocokan data
Misalkan orang mencapai efisiensi yang hampir sempurna (kesalahan ≈0%) dalam tugas mendeteksi kucing, dan dengan demikian tingkat kesalahan optimal adalah sekitar 0%.Misalkan Anda memiliki:- 1% kesalahan dalam sampel pelatihan
- 5% kesalahan dalam sampel pelatihan dan validasi
- 5% kesalahan dalam sampel validasi
Apa yang dikatakan di sini kepada kita? Anda tahu bahwa Anda memiliki varian yang tinggi. Metode pengurangan dispersi yang dijelaskan sebelumnya harus memungkinkan Anda untuk membuat beberapa kemajuan.Sekarang anggaplah algoritma Anda telah mencapai:- 10% kesalahan dalam sampel pelatihan
- 11% kesalahan dalam sampel pelatihan dan validasi
- 12% kesalahan dalam sampel validasi
Ini menunjukkan bahwa Anda memiliki bias tinggi yang dapat dihindari dalam set pelatihan. Yaitu
algoritma menghasilkan hasil yang buruk pada set pelatihan, tetapi metode reduksi offset akan membantu.Dalam dua contoh di atas, algoritma hanya menderita dari bias tinggi (bias dihindari) atau hanya dispersi tinggi (varians). Juga, algoritma dapat menderita dari kombinasi bias tinggi, dispersi tinggi, dan inkonsistensi data. Sebagai contoh:
- 10% kesalahan dalam sampel pelatihan
- 11% kesalahan dalam sampel pelatihan dan validasi
- 20% kesalahan dalam sampel validasi
Algoritma ini menderita bias yang tinggi (bias yang dapat dihindari) dan ketidakcocokan data, dan pada saat yang sama tidak mengalami masalah dengan dispersi yang tinggi dalam sampel pelatihan.Mungkin lebih mudah untuk memahami bagaimana berbagai jenis kesalahan berhubungan satu sama lain dengan menuliskannya dalam tabel berikut:Melanjutkan dengan contoh detektor gambar kucing, Anda dapat melihat bahwa ada dua distribusi data yang berbeda (distribusi A dan distribusi B) di sepanjang sumbu X. Pada sumbu Y, kami memiliki tiga jenis kesalahan: kesalahan manusia, kesalahan pada contoh dari mana algoritma dilatih, dan kesalahan pada contoh, di mana algoritma tidak dilatih. Kami dapat mengisi sel tabel dengan berbagai jenis kesalahan yang kami identifikasi pada bab sebelumnya.Jika mau, Anda juga dapat mengisi dua sel yang tersisa dalam tabel ini: Anda dapat mengisi bidang di sudut kanan atas ("Efisiensi dapat diakses manusia dalam gambar dari aplikasi seluler"), meminta seseorang untuk menandai gambar kucing dari aplikasi seluler dan kemudian mengukur kesalahannya. . Anda dapat mengisi kolom berikutnya dengan mengambil gambar kucing dari aplikasi seluler (distribusi B) dan menempatkan sebagian kecil dari mereka dalam rangkaian pelatihan sehingga jaringan saraf juga belajar darinya. Kemudian Anda mengukur kesalahan model yang dilatih pada subset data ini. Mengisi dua bidang tambahan ini terkadang dapat memberikan pemahaman tambahan tentang bagaimana algoritma bekerja pada dua distribusi yang berbeda (distribusi A dan B) data.Memahami jenis kesalahan apa yang paling banyak diderita oleh algoritma, Anda dapat lebih baik menentukan apakah akan fokus pada pengurangan bias, mengurangi varians, atau mengurangi inkonsistensi data.
Bab 42. Menyelesaikan Kesalahan Ketidakcocokan Data
Misalkan Anda telah mengembangkan sistem pengenalan ucapan yang bekerja sangat baik pada sampel pelatihan dan pada sampel validasi pelatihan. Namun, algoritme tidak berfungsi dengan baik pada sampel validasi Anda: Anda memiliki masalah ketidakcocokan data. Apa yang bisa kamu lakukanSaya menyarankan Anda: (i) mencoba memahami properti apa yang berbeda dalam data dari sampel pelatihan dan validasi; (ii) mencoba menemukan lebih banyak data pelatihan yang lebih cocok dengan contoh dari sampel validasi yang bermasalah dengan algoritma Anda. 44 « » (domain adaptation) — . , , .
Misalnya, anggap Anda melakukan analisis kesalahan validasi untuk sistem pengenalan ucapan: Anda secara manual memeriksa 100 contoh dan mencoba memahami di mana algoritma membuat kesalahan. Anda akan menemukan bahwa sistem Anda tidak berfungsi dengan baik, karena sebagian besar rekaman audio dari sampel validasi dibuat saat berada di dalam mobil, sementara sebagian besar contoh sampel pelatihan direkam dengan latar belakang keheningan. Kebisingan mesin dan jalan secara dramatis menurunkan kinerja sistem pengenalan ucapan Anda. Dalam hal ini, Anda dapat mencoba untuk mendapatkan lebih banyak contoh pelatihan yang berisi rekaman audio yang dibuat di dalam mobil. Tujuan dari analisis kesalahan adalah untuk memahami perbedaan yang signifikan antara sampel pelatihan dan validasi, yang menyebabkan ketidakcocokan data.Jika sampel pelatihan dan validasi pelatihan Anda menyertakan suara yang direkam di dalam mobil, Anda juga harus memeriksa kembali efektivitas sistem Anda pada kumpulan data ini. Jika itu bekerja dengan baik pada contoh "otomotif" dari sampel pelatihan, tetapi tidak pada contoh "otomotif" dari sampel validasi pelatihan, ini sekali lagi mengkonfirmasi hipotesis bahwa mendapatkan lebih banyak contoh "otomotif" akan membantu. Itulah sebabnya dalam bab sebelumnya kami membahas kemungkinan untuk memasukkan dalam set pelatihan Anda sejumlah data memiliki distribusi yang sama seperti dalam validasi / sampel uji. Ini memungkinkan Anda untuk membandingkan keefektifan sistem dengan contoh “otomotif” dalam rangkaian pelatihan versus contoh serupa dari sampel validasi / uji.Sayangnya, tidak ada jaminan dalam hal ini. Misalnya, jika Anda tidak memiliki kesempatan untuk mendapatkan lebih banyak data pelatihan yang akan lebih cocok dengan data sampel validasi, Anda mungkin tidak memiliki jalur yang jelas untuk meningkatkan efisiensi.
Bab 43. Mensintesis Data Buatan
Sistem pengenalan ucapan Anda membutuhkan lebih banyak data yang terdengar seolah-olah rekaman audio dari contoh-contoh ini dibuat di dalam mobil. Alih-alih mengumpulkan banyak data saat berkendara, mungkin ada cara yang lebih mudah untuk mendapatkan data itu: dengan membuatnya secara artifisial.Misalkan Anda menerima sejumlah besar rekaman audio dengan kebisingan jalan / mobil. Anda dapat mengunduh data ini dari beberapa situs. Misalkan Anda juga memiliki satu set pelatihan besar, dalam contoh di mana orang berbicara saat berada di ruangan yang tenang. Jika Anda mengambil rekaman audio dari orang yang berbicara dan "menambahkan" suara mobil / jalan ke sana, Anda akan mendapatkan rekaman audio yang terdengar seolah-olah orang ini berbicara di dalam mobil yang berisik. Dengan menggunakan proses ini, Anda dapat mensintesis sejumlah besar data yang terdengar seolah-olah dikumpulkan di dalam mobil.Secara umum, ada beberapa keadaan di mana pembuatan data buatan memungkinkan Anda membuat kumpulan data besar yang cukup sesuai dengan sampel validasi. Mari kita ambil detektor gambar kucing sebagai contoh kedua. Anda perhatikan bahwa gambar dalam sampel validasi jauh lebih kabur saat bergerak, karena biasanya diperoleh dari pengguna ponsel yang sedikit menggerakkan ponsel selama pemotretan. Anda dapat mengambil gambar Internet yang tajam dari perangkat pelatihan dan menambahkan imitasi blur pada mereka, sehingga membuatnya lebih mirip dengan gambar dalam set validasi.Perlu diingat bahwa sintesis data buatan memiliki masalah sendiri: kadang-kadang lebih mudah untuk membuat data sintetis yang tampaknya realistis bagi seseorang daripada membuat data yang tampaknya realistis untuk komputer. Misalnya, Anda memiliki 1000 jam rekaman pidato dalam satu set pelatihan, tetapi hanya 1 jam kebisingan mobil. Jika Anda berulang kali menggunakan jam kebisingan mobil yang sama dengan bagian-bagian selain 1000 jam asli dari rangkaian pelatihan, Anda akan mendapatkan dataset sintetis di mana kebisingan mobil yang sama diulang berulang kali. Meskipun orang yang mendengarkan suara ini mungkin tidak dapat menyebutkan fitur-fiturnya - semua suara mobil terdengar sama bagi kebanyakan dari kita, ada kemungkinan bahwa algoritma pembelajaran akan dilatih kembali untuk 1 jam kebisingan mobil. Dengan cara iniitu mungkin menggeneralisasi dengan buruk ke rekaman audio baru di mana suara mobil terdengar berbeda.Atau, misalkan Anda memiliki 1000 jam kebisingan mobil yang unik, tetapi hanya 10 mobil berbeda yang digunakan untuk merekamnya. Dalam hal ini, algoritme dapat melatih kembali pada catatan 10 mobil ini dan menunjukkan kinerja yang buruk ketika menguji catatan dari mobil lain. Sayangnya, masalah ini sulit dideteksi.
Ambil contoh lain, misalkan Anda membuat sistem visi komputer untuk mengenali mobil. Misalkan Anda berkolaborasi dengan perusahaan video game yang memiliki beberapa model mobil yang dibuat menggunakan grafis komputer. Untuk melatih algoritma Anda, Anda menggunakan model ini untuk menghasilkan gambar mobil sintetis. Bahkan jika gambar yang disintesis terlihat sangat realistis, pendekatan ini (yang disarankan secara independen oleh banyak orang) mungkin tidak akan bekerja dengan baik. Video game dapat memiliki sekitar 20 model mobil. Membuat model mobil 3D berkualitas tinggi sangat mahal, jika Anda bermain game, Anda mungkin tidak akan memperhatikan bahwa Anda melihat mobil yang sama berulang kali, mungkin hanya dalam warna yang berbeda. Yaitu
Data ini terlihat sangat realistis bagi Anda. Tetapi dibandingkan dengan variasi semua mobil di jalan, dan karenanya dengan himpunan yang mungkin akan Anda lihat dalam sampel validasi / uji, 20 model yang disintesis ini hanya menangkap sebagian kecil dari seluruh ragam mobil global. Jadi, jika 100.000 contoh pelatihan Anda seluruhnya didasarkan pada 20 mobil ini, maka sistem Anda akan dilatih ulang oleh model-model khusus ini dan itu tidak akan dapat digeneralisasikan dengan baik untuk validasi / sampel uji yang mencakup model mobil lain.Saat membuat data, pertimbangkan apakah Anda benar-benar menghasilkan serangkaian contoh yang representatif. Cobalah untuk tidak memberikan properti data yang disintesis itumemungkinkan algoritma pembelajaran untuk membedakan contoh yang disintesis dari yang tidak disintesis, seperti dalam kasus ketika semua data yang disintesis diperoleh berdasarkan salah satu dari 20 model mobil, atau semua suara yang disintesis diperoleh hanya dari 1 jam kebisingan mobil. Mengikuti saran ini bisa sangat sulit.Ketika mengerjakan sintesis data, kadang-kadang perlu waktu berminggu-minggu bagi tim kami untuk membuat data dengan detail yang cukup dekat dengan distribusi aktual dari data yang disintesis yang memiliki efek signifikan. Tetapi jika Anda bisa mendapatkan detail yang tepat, itu akan tiba-tiba memberi Anda akses ke set pelatihan yang jauh lebih besar dari sebelumnya.Algoritma Output Debugging
Bab 44. Benchmark Optimasi
Bayangkan Anda sedang mengembangkan sistem pengenalan ucapan. Sistem Anda bekerja dengan mengambil audio A sebagai input dan menghitung beberapa Skor A (S) untuk setiap kalimat keluaran yang mungkin S. Misalnya, Anda dapat mencoba mengevaluasi Skor A (S) = P (S | A), yaitu. probabilitas bahwa kalimat S adalah transkripsi output yang benar, mengingat bahwa audio dikirim ke input A.Dengan mengingat metode penghitungan Skor A (S), Anda perlu menemukan kalimat dalam bahasa Inggris yang akan memiliki peringkat maksimum:Output=argmaxSScoreA(S)
Bagaimana cara menghitung "arg max" dari contoh di atas? Ada 50.000 kata dalam bahasa Inggris, dalam hal ini ada (50.000) N kemungkinan kalimat dengan panjang N. Ini terlalu banyak untuk disebutkan.Jadi, Anda perlu menerapkan algoritma pencarian perkiraan untuk mencoba menemukan nilai S yang mengoptimalkan (memaksimalkan) skor Skor A (S). Salah satu contoh dari algoritma tersebut adalah pencarian balok, yang hanya menyimpan kandidat K terbaik dalam proses pencarian. (Untuk keperluan bab ini, Anda tidak perlu memahami detail operasi pencarian ray.) Algoritma tersebut tidak menjamin menemukan nilai S, yang memaksimalkan Skor skor A (S).Bayangkan pada beberapa kaset audio seseorang berkata, "Saya suka pembelajaran mesin." Tetapi alih-alih transkripsi yang benar, sistem Anda menghasilkan "Saya suka robot" yang salah. Ada dua kemungkinan alasan untuk apa yang salah:- Masalah dalam algoritma pencarian . Algoritma pencarian balok salah menemukan nilai S, yang memaksimalkan Skor A (S).
- Masalah obyektif dengan fungsi evaluasi . Perkiraan Skor A (S) = P (S | A) kami tidak akurat. Secara khusus, Skor A (S) yang dipilih tidak memungkinkan untuk mengenali dengan benar transkripsi yang benar "Saya suka pembelajaran mesin."
Bergantung pada yang mana di antaranya adalah penyebab kesalahan sistem, Anda harus memprioritaskan secara berbeda untuk upaya lebih lanjut. Dalam kasus pertama, Anda harus bekerja untuk meningkatkan algoritma pencarian, dalam kasus kedua, Anda harus bekerja pada algoritma pembelajaran yang menghitung skor Skor A (S).Menghadapi situasi yang serupa, beberapa peneliti secara acak memutuskan untuk bekerja pada algoritma pencarian, sementara yang lain secara acak memilih untuk bekerja pada perbaikan pembelajaran untuk fungsi peringkat Skor A (S). Tetapi sampai Anda mengetahui penyebab sebenarnya dari kesalahan sistem, semua upaya Anda bisa sia-sia. Bagaimana cara membuat keputusan yang lebih sistematis tentang apa yang layak dikerjakan?Ayo keluarakan menjadi transkripsi keluaran ("Saya suka robot"). Biarkan S * menjadi transkripsi yang benar ("Saya suka pembelajaran mesin"). Untuk memahami yang mana dari dua masalah yang tercantum di atas yang kita hadapi, Anda dapat melakukan tes Verifikasi Optimasi: pertama-tama hitung skor untuk Skor A (S *) dan untuk Skor A (S out ). Kemudian periksa peringkat mana yang lebih penting. Ada dua kemungkinan:- Score A (S*) > Score A (S out ), .. ().
S*. S out . , S, Score A (S). , . , (beam search). - Score A (S*) ≤ Score A (S out ), .. ().
, Score A (.): S out . . Score A (S) S.
Diskusi kami menyentuh satu contoh. Untuk menerapkan tes kontrol optimasi, Anda harus memeriksa kesalahan sampel validasi Anda. Untuk setiap kesalahan, Anda harus memverifikasi bahwa estimasi untuk transkripsi yang diharapkan (benar) lebih tinggi dari perkiraan transkripsi output (salah), yaitu Skor A (S *)> Skor A (S out ). Setiap contoh dari sampel validasi yang ketidaksamaannya akan ditandai sebagai kesalahan yang disebabkan oleh algoritma optimasi. Setiap contoh yang ketidaksamaan ini tidak bertahan akan dianggap sebagai kesalahan karena metode penghitungan Skor A (.) Yang salah.Misalnya, Anda menemukan bahwa 95% kesalahan disebabkan oleh pekerjaan fungsi evaluasi saat menghitung Skor A(.), dan hanya 5% kesalahan disebabkan oleh algoritma pengoptimalan. Sekarang Anda tahu bahwa tidak peduli seberapa besar Anda meningkatkan fungsi optimisasi Anda, pada kenyataannya itu akan membantu menghilangkan tidak lebih dari 5% kesalahan. Karenanya, Anda harus fokus pada peningkatan metode penghitungan Skor A (.).
Bab 45. Prosedur uji kontrol optimasi umum
Anda dapat menerapkan tolok ukur optimasi ketika mendapatkan beberapa x sebagai input, Anda tahu cara menghitung Skor
X (y), yang menunjukkan seberapa baik output
y sesuai dengan
x yang diberikan pada input. Selain itu, Anda menggunakan algoritma pencarian perkiraan untuk menemukan arg max
Y Skor
X (y), tetapi Anda menduga bahwa algoritma pencarian salah dalam menemukan maksimum. Dalam contoh sebelumnya, dengan sistem pengenalan suara,
x = A adalah rekaman audio, dan
y = S adalah transkripsi output.
Misalkan y * adalah nilai output yang benar, tetapi algoritma mengembalikan yout Anda sebagai gantinya. Maka hal utama adalah untuk memeriksa bagaimana Skor
X (y *) dan Skor
X (y
out ) terkait. Jika estimasi pertama lebih besar dari yang kedua, maka penyebab kesalahan ada dalam algoritma optimasi, jika tidak kesalahan terletak pada fungsi perhitungan skor Skor
X (y).
Mari kita lihat contoh lain. Misalkan Anda membuat sistem terjemahan mesin dari bahasa Cina ke bahasa Inggris. Sistem Anda bekerja dengan menerima kalimat C, menghitung skor
C (E) untuk setiap versi terjemahan yang mungkin E. Misalnya, Anda dapat menggunakan Skor skor
C (E) = P (E | C), yaitu. probabilitas bahwa transfer adalah E, mengingat kalimat C telah diajukan.
Mesin terjemahan mesin Anda sedang mencoba menghitung:
Output=arg maxEScoreC(E)
Namun, himpunan semua kalimat E yang mungkin dalam bahasa Inggris sangat besar sehingga Anda harus mengandalkan algoritma pencarian heuristik.
Misalkan algoritma Anda menghasilkan terjemahan E yang salah lebih sering daripada terjemahan E * yang benar. Kemudian tes kontrol optimasi akan memungkinkan untuk menghitung Skor ketimpangan
C (E *)> Skor
C (E
out ). Jika disimpan, maka Skor
C (.) Dengan benar mengenali E * sebagai output E terbaik, jadi Anda akan mengaitkan kesalahan ini dengan bagian dari perkiraan algoritma pencarian, jika tidak, ke fungsi penghitungan Skor
C (.).
Ini adalah pola yang sangat umum dalam AI: pertama, kami melatih perkiraan fungsi perkiraan Skor
x (.), Kemudian kami menggunakan algoritma maksimalisasi perkiraan. Jika Anda ingat pola ini, maka Anda dapat menggunakan tes kontrol optimisasi untuk menemukan sumber kesalahan.
Bab 46. Contoh Pembelajaran Penguatan
Misalkan Anda menggunakan pembelajaran mesin untuk mengajarkan helikopter bagaimana melakukan manuver yang rumit. Di atas adalah gambar selang waktu dari sebuah helikopter yang dikendalikan oleh komputer yang mendarat dengan mesin mati.
Manuver ini disebut pendaratan pada autorotation. Ini memungkinkan helikopter untuk mendarat, bahkan jika mesin tiba-tiba jatuh. Pilot manusia mempraktikkan manuver ini sebagai bagian dari pelatihan mereka. Tujuan Anda adalah menggunakan algoritma pembelajaran mesin sehingga helikopter dapat terbang di sepanjang beberapa lintasan T dan mendarat dengan selamat di akhir.
Untuk menerapkan pelatihan penguatan, Anda harus mengembangkan "fungsi hadiah" R (.) Itu memberikan perkiraan yang menunjukkan seberapa baik setiap lintasan yang mungkin dari T., misalnya, jika lintasan T menyebabkan kecelakaan helikopter, maka biarkan hadiah R (T) = - 1000, mis. memiliki nilai negatif yang besar. Lintasan T, yang berakhir dengan pendaratan yang sukses, akan memiliki perkiraan positif R (T), yang secara akurat mencerminkan ketergantungan seberapa halus pendaratan itu. Fungsi hadiah R (.) Biasanya dipilih secara manual untuk menghitung seberapa diinginkan berbagai lintasan T. Ini harus mengimbangi berbagai faktor: berapa banyak bergetar selama pendaratan, apakah helikopter mendarat tepat di tempat yang tepat, seberapa keras penurunan untuk penumpang, dan sebagainya. Fitur hadiah yang baik tidak mudah untuk dikembangkan.
Diberikan fungsi hadiah R (T), tugas algoritma pembelajaran penguatan adalah untuk mengendalikan helikopter sehingga mencapai max
T R (T). Namun, algoritma pembelajaran penguatan membuat banyak perkiraan dan mungkin tidak berhasil dalam mencapai maksimalisasi ini.
Misalkan Anda mendefinisikan fungsi Hadiah R (.) Dan menjalankan algoritma pembelajaran Anda. Namun, efektivitasnya jauh lebih buruk daripada pilot manusia - itu banyak bergetar selama pendaratan dan tampaknya kurang aman. Bagaimana menentukan apakah kesalahan terkait dengan algoritma pembelajaran penguatan yang mencoba mengikuti jalur maks
T R (T), atau apakah kesalahan tersebut terkait dengan fungsi hadiah yang mencoba mengukur dan menentukan hubungan ideal antara goncangan yang dapat diterima selama pendaratan dan keakuratan lokasi pendaratan?
Kami menerapkan tes kontrol optimisasi. Biarkan T
manusia menjadi jalur yang diikuti oleh pilot, dan T
keluar menjadi jalur yang dipilih oleh algoritma. Mengikuti uraian di atas, kami sepakat bahwa lintasan T
manusia lebih baik daripada T
keluar , maka pertanyaan pengujian utama adalah apakah R (T
manusia )> R (T
out ) sesuai dengan kenyataan.
Opsi 1: jika ketidaksetaraan ini berlanjut, maka fungsi hadiah R (.) Benar memperkirakan lintasan T
manusia . Tetapi algoritma pembelajaran penguatan memilih lintasan T yang lebih buruk. Ini berarti bahwa ada baiknya bekerja untuk meningkatkan algoritma pembelajaran penguatan kami.
Opsi 2: ketidaksetaraan ini tidak dipertahankan, mis. R (T
human ) ≤ R (T
out ). Ini berarti bahwa fungsi hadiah R (.) Ditugaskan hasil terburuk untuk
manusia T, meskipun sejauh ini merupakan lintasan terbaik. Anda harus berupaya meningkatkan R (.) Untuk menemukan rasio faktor terbaik yang sesuai dengan kecocokan.
Banyak aplikasi pembelajaran mesin memiliki "templat" ini untuk mengoptimalkan fungsi Score
x (.), Menggunakan algoritma pencarian perkiraan. Terkadang kami tidak memiliki input x yang diberikan secara tepat, sehingga optimasi hanya dikurangi menjadi Skor fungsi evaluasi (.). Dalam contoh di atas, fungsi hadiah adalah fungsi hadiah Skor (T) = R (T), dan algoritma pengoptimalan adalah algoritma pembelajaran penguatan yang mencoba menghitung lintasan yang baik T.
Satu-satunya perbedaan antara contoh ini dan yang sebelumnya adalah bahwa alih-alih membandingkan dengan output "optimal", kami membandingkannya dengan efisiensi manusia untuk
manusia T. Kami berasumsi bahwa lintasan T
manusia cukup baik, bahkan jika tidak optimal. Secara umum, selama Anda memiliki beberapa y * (dalam contoh ini, T
manusia ), yang merupakan output terbaik dalam hal efisiensi untuk algoritma pembelajaran Anda saat ini (bahkan jika itu tidak "optimal"), maka uji kontrol optimasi dapat menunjukkan apakah akan ada lebih banyak berjanji untuk meningkatkan algoritme pengoptimalan atau fungsi evaluasi.
[
Lanjutan ]