
Dalam artikel sebelumnya dari seri tutorial ini, opsi yang mungkin untuk mempersiapkan data dijelaskan.
Pra-pemrosesan dan penambahan data dengan gambar , dalam artikel ini,
model Base untuk mengenali emosi berdasarkan gambar dari jaringan saraf convolutional juga dibangun.
Dalam artikel ini, kita akan membangun model jaringan saraf convolutional yang lebih baik untuk mengenali emosi dalam gambar menggunakan teknik yang disebut
pembelajaran induktif .
Pertama, Anda perlu membiasakan diri dengan artikel tentang
Model Dasar untuk Mengenali Emosi dalam Gambar , dan Anda juga dapat merujuknya saat membaca, karena beberapa bagian, termasuk mempelajari sumber data dan menggambarkan indikator jaringan, tidak akan diberikan secara rinci di sini.
Data
Kumpulan data berisi 1630 gambar dengan emosi dua kelas:
Negatif (kelas 0) dan
Positif (kelas 1). Beberapa contoh gambar tersebut diberikan di bawah ini.
Negatif

Positif


Beberapa contoh mengandung emosi positif atau negatif yang jelas, sementara yang lain mungkin tidak dikategorikan - bahkan dengan keterlibatan manusia. Berdasarkan inspeksi visual dari kasus-kasus tersebut, kami memperkirakan bahwa keakuratan maksimum yang mungkin harus sekitar 80 persen. Perhatikan bahwa classifier acak memberikan akurasi sekitar 53 persen karena ketidakseimbangan kecil di kelas.
Untuk melatih model, kami menggunakan teknik
mempertahankan bagian sampel dan membagi set data awal menjadi dua bagian, yang salah satunya (20 persen dari set awal) akan digunakan oleh kami untuk verifikasi. Partisi dilakukan dengan menggunakan
stratifikasi : ini berarti keseimbangan antar kelas dipertahankan dalam set pelatihan dan tes.
Mengatasi Ketidakcukupan Data
Model dasar menunjukkan hasil, hanya sedikit lebih baik daripada prediksi acak dari kelas gambar. Mungkin ada banyak alasan yang memungkinkan untuk perilaku ini. Kami percaya bahwa alasan utama adalah bahwa jumlah data yang tersedia jelas tidak cukup untuk pelatihan seperti bagian konvolusional dari jaringan yang akan memungkinkan memperoleh fitur karakteristik berdasarkan gambar input.
Ada banyak cara berbeda untuk menyelesaikan masalah kekurangan data. Berikut ini beberapa di antaranya:
- Ambil kembali . Gagasan metode ini adalah untuk mengevaluasi distribusi data dan memilih contoh-contoh baru dari distribusi ini.
- Belajar tanpa guru . Setiap orang dapat menemukan sejumlah besar data dengan sifat yang sama seperti contoh yang ditandai dalam dataset yang diberikan. Misalnya, bisa berupa film untuk pengenalan video atau buku audio untuk pengenalan suara. Langkah selanjutnya adalah menggunakan data ini untuk pra-pelatihan model (misalnya, menggunakan auto-encoders).
- Augmentasi Data . Selama proses ini, data sampel dimodifikasi secara acak menggunakan serangkaian transformasi yang diberikan.
- Pembelajaran Induktif . Topik ini sangat menarik bagi kami, jadi mari kita kenali lebih detail.
Pembelajaran Induktif
Istilah
pelatihan induktif mengacu pada serangkaian teknik yang menggunakan model (seringkali sangat besar) yang dilatih tentang kumpulan data yang berbeda yang sifatnya hampir sama.


Perbandingan pembelajaran mesin tradisional dan metode pembelajaran induktif. Gambar diambil dari entri blog S. Ruder
"Apa itu pembelajaran induktif?" .
Ada
tiga skenario utama untuk menggunakan pembelajaran induktif:
- Model pra-terlatih . Setiap pengguna dapat dengan mudah mengambil model yang dilatih oleh orang lain dan menggunakannya untuk tugas mereka. Skenario seperti itu dimungkinkan jika tugasnya sangat mirip.
- Memblokir pemilihan tanda . Pada titik ini, kita tahu bahwa arsitektur model dapat dibagi menjadi dua bagian utama: unit ekstraksi fitur , yang bertanggung jawab untuk mengekstraksi fitur dari data input, dan modul klasifikasi , yang mengklasifikasikan contoh berdasarkan fitur yang diterima. Biasanya, blok ekstraksi fitur adalah bagian utama dari model. Gagasan metode ini adalah untuk mengambil blok untuk membedakan fitur dari model yang dilatih dalam masalah lain, memperbaiki koefisien bobotnya (membuat mereka tidak terlatih), dan kemudian membangun berdasarkan modul klasifikasi baru untuk masalah yang sedang dipertimbangkan. Modul klasifikasi biasanya tidak terlalu dalam dan terdiri dari beberapa lapisan yang terhubung sepenuhnya, sehingga model ini lebih mudah untuk dilatih.
- Penyesuaian yang tepat dan dalam . Metode ini seperti skenario menggunakan blok ekstraksi fitur. Tindakan yang sama dilakukan dengan pengecualian "membekukan" blok ekstraksi fitur. Misalnya, Anda dapat menggunakan jaringan VGG sebagai blok ekstraksi fitur dan "membekukan" di dalamnya hanya tiga (dari empat) blok konvolusional pertama. Dalam hal ini, unit ekstraksi fitur dapat lebih beradaptasi dengan tugas saat ini. Untuk informasi lebih lanjut, lihat posting blog F. Chollet.Buat model klasifikasi gambar yang kuat menggunakan data yang sangat sedikit .
Penjelasan terperinci dari skenario untuk menggunakan pembelajaran induktif dapat ditemukan dalam kursus Stanford University
CS231n jaringan saraf konvolusional untuk pengakuan visual oleh Fei-Fei Li dan entri blog oleh S. Ruder
Pembelajaran induktif adalah batas berikutnya dalam pengembangan pembelajaran mesin (topik dibahas lebih komprehensif).
Anda mungkin memiliki pertanyaan: mengapa semua metode ini diperlukan dan mengapa mereka bisa bekerja? Kami akan mencoba menjawabnya.
- Manfaat menggunakan dataset besar. Misalnya, kita dapat mengambil blok ekstraksi fitur dari model yang dilatih pada 14 juta gambar yang terkandung dalam dataset kontes ImageNet . Model-model ini cukup kompleks untuk memungkinkan ekstraksi fitur berkualitas sangat tinggi dari data input.
- Pertimbangan terkait waktu. Pelatihan model besar dapat memakan waktu berminggu-minggu atau bahkan berbulan-bulan. Dalam hal ini, setiap orang dapat menghemat banyak waktu dan sumber daya komputasi .
- Asumsi berbobot yang mendasari mengapa semua ini bisa bekerja adalah sebagai berikut: Atribut yang diperoleh dari pelatihan dalam satu tugas dapat berguna dan cocok untuk tugas lain. Dengan kata lain, fitur memiliki properti invarian sehubungan dengan masalah tersebut. Perhatikan bahwa domain tugas baru harus serupa dengan domain tugas asli. Jika tidak, unit ekstraksi fitur bahkan dapat memperburuk hasilnya.
Arsitektur Model yang Ditingkatkan
Sekarang kita akrab dengan konsep pembelajaran induktif. Kita juga tahu bahwa ImageNet adalah peristiwa besar, di mana hampir semua arsitektur jaringan saraf convolutional canggih modern diuji. Mari kita coba untuk mengambil blok ekstraksi fitur dari salah satu jaringan ini.
Untungnya, perpustakaan Keras memberi kami
beberapa model pra-terlatih (melalui ImageNet) yang dibuat di dalam platform ini. Kami mengimpor dan menggunakan salah satu model ini.

Dalam hal ini, kami akan menggunakan jaringan dengan arsitektur VGG. Untuk memilih hanya unit ekstraksi fitur, kami menghapus modul klasifikasi (tiga lapisan teratas yang sepenuhnya terhubung) dari jaringan dengan mengatur parameter
include_top ke
False . Kami juga ingin menginisialisasi jaringan kami menggunakan bobot jaringan yang dilatih di ImageNet. Parameter terakhir adalah ukuran input.
Harap perhatikan bahwa ukuran gambar asli dalam kontes ImageNet adalah (224, 224, 3), sedangkan gambar kami berukuran (400, 500, 3). Namun, kami menggunakan lapisan konvolusional - ini berarti bahwa bobot jaringan adalah bobot dari kernel yang bergerak dalam operasi konvolusi. Bersama-sama dengan properti pemisahan parameter (diskusi tentang ini ditemukan dalam artikel teoritis kami
Tinjauan umum jaringan saraf convolutional untuk mengklasifikasikan gambar ), ini mengarah pada fakta bahwa ukuran data input dapat hampir sewenang-wenang, karena konvolusi dilakukan dengan menggunakan jendela geser, dan jendela ini dapat meluncur bersama gambar dari berbagai ukuran. Satu-satunya batasan adalah bahwa ukuran data input harus cukup besar sehingga tidak runtuh ke satu titik (pengukuran spasial) di beberapa lapisan menengah, karena jika tidak maka tidak mungkin untuk membuat perhitungan lebih lanjut.
Trik lain yang kami gunakan adalah
caching . VGG adalah jaringan yang sangat besar. Satu operan langsung untuk semua gambar (1630 contoh) melalui unit ekstraksi fitur membutuhkan waktu sekitar 50 detik. Namun, harus diingat bahwa bobot unit ekstraksi fitur adalah tetap, dan umpan langsung selalu memberikan hasil yang sama untuk gambar yang sama. Kita dapat menggunakan fakta ini untuk melakukan operan langsung melalui unit ekstraksi fitur hanya
sekali dan kemudian men-cache hasil dalam array perantara. Untuk menerapkan skenario ini, pertama-tama kita membuat instance kelas
ImageDataGenerator untuk memuat file dari hard drive secara langsung (untuk informasi lebih lanjut, lihat artikel
dasar Model dasar untuk mengenali emosi dalam gambar ).

Pada tahap berikutnya, kami menggunakan dalam mode prediksi blok ekstraksi fitur yang dibuat sebelumnya sebagai bagian dari model untuk mendapatkan fitur gambar.

Dibutuhkan sekitar 50 detik. Sekarang kita dapat menggunakan hasilnya untuk pelatihan yang sangat cepat dari bagian klasifikasi model - satu era berlangsung sekitar 1 detik untuk kita. Bayangkan sekarang bahwa setiap era berlangsung 50 detik lebih lama. Dengan demikian, teknik caching sederhana ini memungkinkan kami untuk mempercepat proses pelatihan jaringan sebanyak 50 kali! Dalam skenario ini, kami menyimpan semua tanda untuk semua contoh dalam RAM, karena volumenya cukup untuk ini. Saat menggunakan kumpulan data yang lebih besar, Anda dapat menghitung properti, menulisnya ke hard drive, dan kemudian membacanya menggunakan pendekatan yang sama yang terkait dengan kelas generator.
Akhirnya, pertimbangkan arsitektur bagian klasifikasi model:


Ingat bahwa pada output blok ekstraksi fitur jaringan saraf convolutional, tensor empat dimensi (contoh, tinggi, lebar dan saluran) dikeluarkan, dan lapisan yang terhubung penuh untuk klasifikasi memerlukan tensor dua dimensi (contoh, fitur). Salah satu cara untuk mengubah tensor empat dimensi dengan fitur adalah dengan menyelaraskannya di sekitar tiga sumbu terakhir (kami menggunakan teknik serupa dalam model dasar). Dalam skenario ini, kami menggunakan pendekatan yang berbeda, yang disebut
global mean value sub -
sampling (GAP). Alih-alih menyelaraskan vektor empat dimensi, kita akan mengambil nilai rata-rata berdasarkan dua dimensi spasial. Faktanya, kami mengambil peta atribut dan rata-rata semua nilai di dalamnya. Metode GAP pertama kali diperkenalkan dalam karya luar biasa dari
Jaringan Min Lin
di Internet (buku ini benar-benar layak untuk dikenali karena membahas beberapa konsep penting - misalnya, konvolusi 1 × 1). Satu keuntungan nyata dari pendekatan GAP adalah pengurangan signifikan dalam jumlah parameter. Dengan menggunakan GAP, kami hanya mendapatkan 512 fitur untuk setiap contoh, sementara menyelaraskan data mentah, jumlah fitur akan menjadi 15 × 12 × 512 = 92 160. Ini dapat menyebabkan overhead yang serius, karena dalam kasus ini bagian klasifikasi model akan memiliki sekitar 50 juta parameter! Elemen lain dari bagian klasifikasi model, seperti lapisan dan lapisan yang terhubung penuh yang menerapkan metode pengecualian, dibahas secara rinci dalam artikel
Model dasar untuk mengenali emosi dalam gambar .
Opsi pengaturan dan pelatihan
Setelah kami menyiapkan arsitektur model kami menggunakan Keras, Anda perlu mengonfigurasi seluruh model untuk pelatihan menggunakan metode kompilasi.

Dalam hal ini, kami menggunakan pengaturan yang hampir mirip dengan pengaturan model dasar, dengan pengecualian pilihan pengoptimal. Untuk mengoptimalkan pembelajaran,
binary cross-entropy akan digunakan sebagai fungsi kerugian, dan metrik akurasi akan dilacak tambahan. Kami menggunakan metode
Adam sebagai pengoptimal. Adam adalah jenis algoritma penurunan gradien stokastik dengan momen dan
kecepatan belajar adaptif (untuk informasi lebih lanjut lihat entri blog oleh S. Ruder
Gambaran umum algoritma optimasi penurunan gradien ).
Kecepatan belajar adalah hyperparameter pengoptimal yang harus dikonfigurasi untuk memastikan model operasional. Ingat bagaimana rumus untuk penurunan gradien "vanilla" tidak mengandung fungsionalitas tambahan:

Θ adalah vektor parameter model (dalam kasus kami, ini adalah koefisien bobot dari jaringan saraf), - adalah fungsi objektif, ∇ adalah operator gradien (dihitung menggunakan algoritma propagasi kesalahan kembali), dan α adalah kecepatan belajar. Dengan demikian, gradien fungsi objektif mewakili arah langkah optimasi dalam ruang parameter, dan kecepatan belajar adalah ukurannya. Ketika menggunakan kecepatan belajar yang terlalu tinggi, ada kemungkinan tergelincirnya titik optimal secara konstan karena ukuran langkah yang terlalu besar. Di sisi lain, jika kecepatan belajar terlalu rendah, maka optimasi akan memakan waktu terlalu banyak dan dapat memastikan konvergensi hanya untuk minimum lokal berkualitas rendah daripada ekstrem global. Oleh karena itu, dalam setiap situasi tertentu, perlu untuk mencari kompromi yang sesuai. Menggunakan pengaturan default untuk algoritma Adam adalah titik awal yang baik untuk memulai.
Namun, dalam tugas ini, pengaturan Adam default menunjukkan hasil yang buruk. Kita perlu mengurangi tingkat pembelajaran awal menjadi 0,0001. Kalau tidak, pelatihan tidak akan bisa memastikan konvergensi.
Pada akhirnya, kita dapat mulai belajar lebih dari 100 era dan kemudian menyimpan model itu sendiri dan sejarah pembelajaran. Perintah
% time adalah perintah sihir Ipython * yang memungkinkan Anda untuk mengukur waktu eksekusi kode.

Peringkat

Mari kita evaluasi keefektifan model selama pelatihan. Dalam kasus kami, akurasi verifikasi adalah 73 persen (dibandingkan dengan 55 persen menggunakan model dasar). Hasil ini jauh lebih baik daripada hasil model dasar.
Mari kita juga melihat distribusi kesalahan menggunakan matriks ketidakakuratan. Kesalahan didistribusikan hampir merata antara kelas-kelas dengan sedikit bias terhadap contoh negatif yang salah diklasifikasikan (sel kiri atas matriks ketidakakuratan). Hal ini dapat dijelaskan dengan
ketidakseimbangan kecil dalam kumpulan data menuju kelas positif.
Metrik lain yang kami lacak adalah kurva kinerja penerima (kurva ROC) dan area di bawah kurva ini (AUC). Untuk deskripsi terperinci tentang metrik ini, lihat artikel
Model dasar untuk mengenali emosi dalam gambar .

Semakin dekat kurva ROC ke titik kiri atas grafik dan semakin besar area di bawahnya (metrik AUC), semakin baik classifier bekerja. Gambar ini jelas menunjukkan bahwa model yang ditingkatkan dan pra-pelatihan menunjukkan hasil yang lebih baik dibandingkan dengan model dasar yang dibuat dari awal. Nilai AUC untuk model pra-terlatih adalah 0,82, yang merupakan hasil yang baik.

Kesimpulan
Pada artikel ini, kami bertemu dengan teknik yang kuat - pembelajaran induktif. Kami juga membangun sebuah pengklasifikasi jaringan saraf convolutional menggunakan unit ekstraksi fitur pra-dilatih berdasarkan arsitektur VGG. Klasifikasi ini melampaui karakteristik kinerjanya model konvolusional dasar, dilatih dari awal. Peningkatan akurasi adalah 18 persen, dan peningkatan metrik AUC adalah 0,25, yang menunjukkan peningkatan kualitas sistem yang sangat signifikan.